/***********************/ /* binhex.c 1.00 */ /* by Adam M. Costello */ /* */ /* ***********/ /* Translates a binary file to */ /* a text file, using a very */ /* human-readable format which */ /* can be valid input to hexbin. */ /*********************************/ /* This is ANSI C code. */ #include #include int hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; static int bytes[17]; void printline(void) { int *p = bytes, longwordnum, bytenum; *p = bytes[16]; for (longwordnum = 0; longwordnum < 4; ++longwordnum) { for (bytenum = 0; bytenum < 4; ++bytenum) { if (*p == EOF) { putchar(' '); putchar(' '); } else { putchar(hex[(*p & 0xF0) >> 4]); putchar(hex[ *p & 0x0F ]); } putchar(' '); *++p = getchar(); } putchar(' '); } putchar(';'); putchar(' '); p = bytes; for (longwordnum = 0; longwordnum < 4; ++longwordnum) { putchar(' '); for (bytenum = 0; bytenum < 4; ++bytenum) { if (isprint(*p)) putchar(*p); else if (*p != EOF) putchar('.'); ++p; } } putchar('\n'); } int main(int argc, char **argv) { unsigned long pagenum = 0; unsigned int linenum; bytes[16] = getchar(); if (feof(stdin)) return 0; for (;; ++pagenum) { printf("%c%c%c%c00:\n\n", hex[ pagenum / 0x1000], hex[(pagenum % 0x1000) / 0x0100], hex[(pagenum % 0x0100) / 0x0010], hex[(pagenum % 0x0010) ] ); linenum = 0; while (linenum < 16) { printf("%c0: ", hex[linenum]); printline(); if (feof(stdin)) return 0; if (!(++linenum % 4)) putchar('\n'); } putchar('\n'); } }