From cb309f3826ec3393afc928b32b686ed81a5c9a3d Mon Sep 17 00:00:00 2001 From: SuperNovaa41 Date: Fri, 7 Feb 2025 22:11:17 -0500 Subject: [PATCH] moves some functionality from main into their own functions --- src/Makefile | 6 +++- src/a.out | Bin 0 -> 27504 bytes src/hex.c | 1 + src/include/hex.h | 1 + src/main.c | 75 +++++++++++++++++++++++++++++----------------- 5 files changed, 54 insertions(+), 29 deletions(-) create mode 100755 src/a.out diff --git a/src/Makefile b/src/Makefile index 2c684b4..5d65a08 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,10 +2,14 @@ TARGET=xxd CC=gcc OBJ = main.o hex.o file.o +FILES = main.c hex.c file.c + +DEBUG: + gcc -g $(FILES) $(TARGET): $(OBJ) mkdir -p ../build - $(CC) -Wall -g -o $(TARGET) $(OBJ) -g + $(CC) -g -o $(TARGET) $(OBJ) mv $(TARGET) ../build/ main.o: include/hex.h include/file.h diff --git a/src/a.out b/src/a.out new file mode 100755 index 0000000000000000000000000000000000000000..4f3f5a1180e52358c9799b7932d6aaee82e36dfa GIT binary patch literal 27504 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 IOgX6d-$&&+-2eap literal 0 HcmV?d00001 diff --git a/src/hex.c b/src/hex.c index ccd1969..cd375be 100644 --- a/src/hex.c +++ b/src/hex.c @@ -8,6 +8,7 @@ extern struct flags flags; void init_flags(struct flags* flags) { + flags->file_in = false; flags->files[0] = NULL; flags->files[1] = NULL; diff --git a/src/include/hex.h b/src/include/hex.h index d6a77ce..1611483 100644 --- a/src/include/hex.h +++ b/src/include/hex.h @@ -19,6 +19,7 @@ typedef struct { } hex_chunk_t; struct flags { + bool file_in; char* files[2]; uint cols; // choose the amount of columns to display (default 16) // done diff --git a/src/main.c b/src/main.c index 2c8939e..b881d61 100644 --- a/src/main.c +++ b/src/main.c @@ -43,10 +43,9 @@ static error_t parse_opt(int key, char* arg, struct argp_state* state) if (state->arg_num >= 2) argp_usage(state); flags->files[state->arg_num] = arg; + flags->file_in = true; break; case ARGP_KEY_END: - if (state->arg_num < 1) - argp_usage(state); break; default: return ARGP_ERR_UNKNOWN; @@ -69,48 +68,68 @@ int get_hex_lines(int len) return out; } -int main(int argc, char* argv[]) +void do_file_read(hex_chunk_t** lines) { char* file_content; - FILE* stream; - bool outfile; int hex_lines, i; size_t filesize; - init_flags(&flags); - - argp_parse(&argp, argc, argv, 0, 0, &flags); - read_file_to_buf(flags.files[0], &file_content); filesize = (flags.len == -1) ? strlen(file_content) : flags.len; hex_lines = get_hex_lines(filesize); - outfile = false; - if (flags.files[1] != NULL) { - stream = fopen(flags.files[1], "w"); - outfile = true; - } else { - stream = stdout; - } - - - hex_chunk_t* lines = malloc(sizeof(hex_chunk_t) * hex_lines); + *lines = malloc(sizeof(hex_chunk_t) * (hex_lines + 1)); for (i = 0; i < hex_lines; i++) { - lines[i].line = i; - add_text_to_chunk(file_content + (i * (flags.cols)), &(lines[i].text)); - convert_text_to_hex(&lines[i]); + (*lines)[i].line = i; + add_text_to_chunk(file_content + (i * (flags.cols)), &((*lines)[i].text)); + convert_text_to_hex(&(*lines)[i]); + } + + (*lines)[hex_lines].line = -1; + free(file_content); +} + +void do_display(hex_chunk_t** lines) +{ + int i; + bool fileout = false; + FILE* stream = stdout; + + if (flags.files[1] != NULL) { + stream = fopen(flags.files[1], "w"); + fileout = true; } - for (i = 0; i < hex_lines; i++) - display_hex_chunk(&(lines[i]), stream); + i = 0; + while ((*lines)[i].line != -1) + display_hex_chunk(&((*lines)[i++]), stream); - if (outfile) + if (fileout) fclose(stream); - free(file_content); - for (i = 0; i < hex_lines; i++) - free_hex_chunk(&(lines[i])); + +} + +int main(int argc, char* argv[]) +{ + int i; + hex_chunk_t* lines; + + init_flags(&flags); + + argp_parse(&argp, argc, argv, 0, 0, &flags); + flags.files[0] = "main.c"; + + do_file_read(&lines); + + do_display(&lines); + + i = 0; + while (lines[i].line != -1) + free_hex_chunk(&(lines[i++])); + free_hex_chunk(&(lines[i])); + free(lines);