From 1f3e2fca843dc616ea4cab44a22d653c455daddd Mon Sep 17 00:00:00 2001 From: SuperNovaa41 Date: Thu, 6 Feb 2025 14:04:06 -0500 Subject: [PATCH] adds fileout --- src/hex.c | 18 ++++++++---------- src/include/hex.h | 4 +++- src/main.c | 22 +++++++++++++++++----- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/hex.c b/src/hex.c index 5bdb1b7..4f3c537 100644 --- a/src/hex.c +++ b/src/hex.c @@ -1,7 +1,6 @@ #include #include #include -#include #include "include/hex.h" @@ -32,27 +31,26 @@ void convert_text_to_hex(hex_chunk_t* chunk) } } -// TODO: clean up the text formatting to not print it every time -void display_hex_chunk(hex_chunk_t* chunk) +void display_hex_chunk(hex_chunk_t* chunk, FILE* stream) { int i, j; - printf("%08x: \x1b[32m", chunk->line * 16); + fprintf(stream, "%08x: \x1b[32m", chunk->line * 16); for (i = 0; i < HEX_LINE_LEN; i += 4) { for (j = 0; j < 4; j += 2) { if (((chunk->hex + i) + j)[0] == '0' && ((chunk->hex + i) + j)[1] == 'a') - printf("\x1b[33m%2.2s\x1b[32m", chunk->hex + i + j); + fprintf(stream, "\x1b[33m%2.2s\x1b[32m", chunk->hex + i + j); else - printf("%2.2s", chunk->hex + i + j); + fprintf(stream, "%2.2s", chunk->hex + i + j); } - printf(" "); + fprintf(stream, " "); } for (i = 0; i < TEXT_LINE_LEN; i++) { if (chunk->text[i] == '\n' || chunk->text[i] == EOF) - printf("\x1b[33m.\x1b[32m"); + fprintf(stream, "\x1b[33m.\x1b[32m"); else - printf("%c", chunk->text[i]); + fprintf(stream, "%c", chunk->text[i]); } - puts("\x1b[0m"); + fprintf(stream, "\x1b[0m\n"); } diff --git a/src/include/hex.h b/src/include/hex.h index a5f1a12..70af091 100644 --- a/src/include/hex.h +++ b/src/include/hex.h @@ -1,3 +1,5 @@ +#include + #ifndef HEX_H #define HEX_H @@ -13,6 +15,6 @@ typedef struct { void free_hex_chunk(hex_chunk_t* chunk); void add_text_to_chunk(char* src, char** dst); void convert_text_to_hex(hex_chunk_t* chunk); -void display_hex_chunk(hex_chunk_t* chunk); +void display_hex_chunk(hex_chunk_t* chunk, FILE* stream); #endif diff --git a/src/main.c b/src/main.c index d5b948c..f7805dc 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "include/hex.h" #include "include/file.h" @@ -10,7 +11,7 @@ int get_hex_lines(int len) int out; out = len / 16; - if (len % 16 != 0) + if (len % 16 != 0) // if we have a less than a full line remaining out++; return out; @@ -19,13 +20,24 @@ int get_hex_lines(int len) int main(int argc, char* argv[]) { char* file_content; + FILE* stream; + bool outfile; int hex_lines, i; - if (argc != 2) { + + if (argc < 2) { fprintf(stderr, "Usage: %s [filename]\n", argv[0]); return EXIT_FAILURE; } + stream = stdout; + outfile = false; + if (argc == 3) { + stream = fopen(argv[2], "w"); + outfile = true; + } + + read_file_to_buf(argv[1], &file_content); hex_lines = get_hex_lines(strlen(file_content)); @@ -39,10 +51,10 @@ int main(int argc, char* argv[]) } for (i = 0; i < hex_lines; i++) - display_hex_chunk(&(lines[i])); + display_hex_chunk(&(lines[i]), stream); - - + if (outfile) + fclose(stream); free(file_content); for (i = 0; i < hex_lines; i++) free_hex_chunk(&(lines[i]));