diff --git a/hex.c b/hex.c index 7f13d06..f8d3460 100644 --- a/hex.c +++ b/hex.c @@ -1,6 +1,7 @@ #include -// TODO: Error checking +// TODO: ASCII/Position printing +// TODO: Stop appending garbage at file end #define BYTES 1024 #define BYTES_PER_LINE 10 @@ -18,8 +19,14 @@ void print_hex(unsigned char* buf, int byteno) puts(""); } -void main(int argc, char** argv) +int main(int argc, char** argv) { + if (argc != 2) + { + printf("Usage: %s \n", argv[0]); + return -1; + } + FILE* f = fopen(argv[1], "r"); unsigned char buf[BYTES]; int byteno = fread(buf, 1, BYTES, f); @@ -30,14 +37,27 @@ void main(int argc, char** argv) char cmd; int loc; scanf("%c%d", &cmd, &loc); - - if (cmd == 'p') print_hex(buf + loc, BYTES_PER_LINE); - if (cmd == 'e') scanf("%x", buf + loc); - if (cmd == 's') break; + switch(cmd) + { + case 'p': + case 'P': + print_hex(buf + loc, BYTES_PER_LINE); + break; + case 'e': + case 'E': + scanf("%hhx", buf + loc); + break; + case 's': + case 'S': + fclose(f); + f = fopen(argv[1], "w"); + fwrite(buf, 1, BYTES, f); + fclose(f); + break; + case 'q': + case 'Q': + return 0; + break; + } } - - fclose(f); - f = fopen(argv[1], "w"); - fwrite(buf, 1, BYTES, f); - fclose(f); } diff --git a/minihex b/minihex index 2ba6648..013a4c4 100755 Binary files a/minihex and b/minihex differ diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..1f66ab3 Binary files /dev/null and b/test.txt differ