diff options
Diffstat (limited to 'libc/tests/hd.c')
-rw-r--r-- | libc/tests/hd.c | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/libc/tests/hd.c b/libc/tests/hd.c deleted file mode 100644 index 341185f..0000000 --- a/libc/tests/hd.c +++ /dev/null @@ -1,185 +0,0 @@ - -#include <stdio.h> -#include <ctype.h> -#include <errno.h> - -int lastnum[16] = {-1}; -long lastaddr = -1; -long offset = 0; - -FILE *fd; - -main(argc, argv) -int argc; -char **argv; -{ - int done = 0; - int ar; - int aflag = 1; - - for (ar = 1; ar < argc; ar++) - if (aflag && argv[ar][0] == '-') - switch (argv[ar][1]) - { - case 'r': - return reverse_hd(argc, argv); - case 'o': - offset = strtol(argv[ar] + 2, (void *) 0, 0); - break; - case '-': - aflag = 0; - break; - default: - Usage(); - } - else - { - fd = fopen(argv[ar], "rb"); - if (fd == 0) - fprintf(stderr, "Cannot open file '%s'\n", argv[ar]); - else - { - do_fd(); - fclose(fd); - } - done = 1; - } - - if (!done) -#ifdef MSDOS - Usage(); -#else - { - fd = stdin; - do_fd(); - } -#endif -} - -Usage() -{ - fprintf(stderr, "Usage: hd [-r]|[[-oOffset] file]\n"); - exit(1); -} - -do_fd() -{ - int j, ch; - char buf[20]; - int num[16]; - - if (offset) - fseek(fd, offset, 0); - - for (ch = 0; ch != EOF; offset += 16) - { - memset(buf, '\0', 16); - for (j = 0; j < 16; j++) - num[j] = -1; - for (j = 0; j < 16; j++) - { - ch = fgetc(fd); - if (ch == EOF) - break; - - num[j] = ch; - if (isascii(ch) && isprint(ch)) - buf[j] = ch; - else - buf[j] = '.'; - } - printline(offset, num, buf, ch == EOF); - } -} - -printline(address, num, chr, eofflag) -long address; -int *num; -char *chr; -int eofflag; -{ - int j; - - if (lastaddr >= 0) - { - for (j = 0; j < 16; j++) - if (num[j] != lastnum[j]) - break; - if (j == 16 && !eofflag) - { - if (lastaddr + 16 == address) - { - printf("*\n"); - fflush(stdout); - } - return; - } - } - - lastaddr = address; - printf("%06lx:", address); - for (j = 0; j < 16; j++) - { - if (j == 8) - putchar(' '); - if (num[j] >= 0) - printf(" %02x", num[j]); - else - printf(" "); - lastnum[j] = num[j]; - num[j] = -1; - } - - printf(" %.16s\n", chr); -} - - -/* - * This function takes output from hd and converts it back into a binary - * file - */ - -/* -- 0 1 2 3 4 5 6 7 8 9 a b c d e f */ -static char *datafmt = "%x: %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x\n"; -reverse_hd() -{ - char str[160]; - char * ptr; - int c[16], d[16], x, i, nxtaddr, addr; - - for (i = 0; i < 16; i++) - c[i] = 0; - nxtaddr = 0; - - for (nxtaddr = 0;;) - { - if (gets(str) == NULL) - break; - - str[57] = 0; - ptr = str; - - if( !isxdigit(*ptr) ) continue; - addr = strtol(ptr, &ptr, 16); - if( *ptr == ':' ) ptr++; - - if (nxtaddr == 0) - nxtaddr = addr; - while (nxtaddr < addr) - { - nxtaddr += 16; - for (i = 0; i < 16; i++) - putchar(c[i]); - } - for (i = 0; i < 16 && *ptr; i++) - { - char * ptr2; - c[i] = strtol(ptr, &ptr2, 16); - if( ptr == ptr2 ) break; - putchar(c[i]); - ptr = ptr2; - } - nxtaddr += 16; - } - return 0; -} |