/* dump.c - Don Yang (uguu.org) dump [start] [end | +length] Parameters are assumed hexadecimal if prefix 0x. Dump hex bytes to stdout, read from stdin if no arguments. 11/08/00 */ #include #include int main(int argc, char **argv) { FILE *input; int start, end, i, c; start = 0; end = -1; if( argc > 1 ) { if( argv[1][0] == '-' ) { puts( "Dump 1.0 (11/8/00) - Don Yang (uguu.org)\n\n" "dump [file] [start] [end | +offset]\n\n" "Read from stdin if no input file\n" "Prefix hexadecimal parameters with 0x\n"); return 0; } if( (input = fopen(argv[1], "rb")) == NULL ) { printf("Can not open %s.\n", argv[1]); return 1; } if( argc > 2 ) { if( argv[2][1] == 'x' ) sscanf(argv[2] + 2, "%x", &start); else start = atoi(argv[2]); } if( argc > 3 ) { if( argv[3][0] == '+' ) { if( argv[3][2] == 'x' ) sscanf(argv[3] + 3, "%x", &end); else end = atoi(argv[3] + 1); end += start; } else { if( argv[3][1] == 'x' ) sscanf(argv[3] + 2, "%x", &end); else end = atoi(argv[3]); } } } else { input = stdin; } start &= ~15; if( (i = start) > 0 ) { if( input != stdin ) { fseek(input, start, SEEK_SET); } else { for(; i < start && !feof(input); i++) fgetc(input); } } for(; i != end && !feof(input); i++) { if( (i & 15) == 0 ) { printf("\n%08x:", i); } else if( (i & 15) == 8 ) { putchar(' '); } if( (c = fgetc(input)) < 0 ) break; printf(" %02x", c); } putchar('\n'); if( input != stdin ) fclose(input); return 0; } /* main() */