#include /* kbhit() code */ #include #include #include int kbhit() { struct timeval tv; struct fd_set readfd; tv.tv_sec = 0; tv.tv_usec = 0; FD_ZERO( &readfd ); FD_SET( 0, &readfd ); return select( 1, &readfd, NULL, NULL, &tv); } /* end kbhit() code */ #define decprec 78 #define b1prec 127 #define b2prec 256 /* b2prec should be b1prec*2+2 */ void main(int argc, char *argv[]) { int i, j, k, l; int d[decprec]; int b1[b1prec]; int b2[b2prec]; int bn[b2prec][decprec]; int lp1[b2prec]; /* Initializations */ if (argc > 2) { printf("Usage: palin [approximate binary startoff]\n"); exit(); } printf("\nHit return at any time to stop...\n"); printf("\nInitializing...\n"); l=-1; for (i=0; i 1) { j=0; for (i=strlen(argv[1]); i>=0; i--) { if (argv[1][i] == '1') { b1[j]=1; } else { b1[j]=0; } j++; } l=j-1; } printf("Ok:\n"); while (!kbhit()) /* Main Loop */ { /* Increment b1. */ i=0; while (b1[i]==1) { i++; } b1[i]=1; if (i>l) { l++; } for (j=0; j-1; i-=1) { b2[j]=b1[i]; j++; } for (i=0; i<=l; i++) { b2[j]=b1[i]; j++; } /* j is now the length+1 of b2. (b2[0..j-1]) */ /* Convert b2 to decimal d */ for (i=0; i-1; j-=1) { printf("%d", b2[j]); } i-=1; printf(" "); for (j=i; j>-1; j-=1) { printf("%d", d[j]); } printf("\n"); } /* Create b2 binary palindrome #2. */ j=0; for (i=l; i>-1; i-=1) { b2[j]=b1[i]; j++; } b2[j]=0; j++; for (i=0; i<=l; i++) { b2[j]=b1[i]; j++; } /* j is now the length+1 of b2. (b2[0..j-1]) */ /* Convert b2 to decimal d */ for (i=0; i-1; j-=1) { printf("%d", b2[j]); } i-=1; printf(" "); for (j=i; j>-1; j-=1) { printf("%d", d[j]); } printf("\n"); } /* Create b2 binary palindrome #3. */ j=0; for (i=l; i>-1; i-=1) { b2[j]=b1[i]; j++; } b2[j]=1; j++; for (i=0; i<=l; i++) { b2[j]=b1[i]; j++; } /* j is now the length+1 of b2. (b2[0..j-1]) */ /* Convert b2 to decimal d */ for (i=0; i-1; j-=1) { printf("%d", b2[j]); } i-=1; printf(" "); for (j=i; j>-1; j-=1) { printf("%d", d[j]); } printf("\n"); } } /* End of while (1) loop */ }