From 53ab6a2bf6e6313dda08822b24aaad40272a57be Mon Sep 17 00:00:00 2001 From: sBubshait Date: Wed, 12 Jun 2024 00:50:00 +0100 Subject: [PATCH] Update fileio, add countLine, rewrite read and write file funcs --- src/fileio.c | 110 +++++++++++++++++++++++++++------------------------ src/fileio.h | 6 ++- 2 files changed, 63 insertions(+), 53 deletions(-) diff --git a/src/fileio.c b/src/fileio.c index 8be2e38..f2f47fd 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -1,9 +1,8 @@ -#include #include #include "global.h" #include "fileio.h" -#define MAX_ASM_LINE_LENGTH 30 +#define MAX_ASM_LINE_LENGTH 300 int isValidFileFormat(char filename[], char expectedExtension[]){ char *pointLoc = strrchr(filename, '.'); @@ -16,67 +15,76 @@ int isValidFileFormat(char filename[], char expectedExtension[]){ return(0); } -int writeBinaryFile(word instrs[], char outputFile[], int numInstrs){ - - if (!isValidFileFormat(outputFile, "bin")){ - return(-1); +void writeBinaryFile(word instrs[], char outputFile[], int numInstrs) { + FILE *fp = fopen(outputFile, "wb"); + if (fp == NULL) { + fprintf(stderr, "Error: Could not open file %s\n", outputFile); + exit(EXIT_FAILURE); } - - FILE *fp; - fp = fopen(outputFile, "wb"); - - if(fp == NULL){ - return(-1); - } - - fwrite(instrs, 4, sizeof(word) * numInstrs, fp); + fwrite(instrs, sizeof(word), numInstrs, fp); fclose(fp); - - return(0); } -char **readAssemblyFile(char inputFile[]) { - if (!isValidFileFormat(inputFile, "s")){ - return(NULL); +int countLines(char *filename) { + FILE *file = fopen(filename, "r"); + if (file == NULL) { + fprintf(stderr, "Error: Could not read file %s\n", filename); + exit(EXIT_FAILURE); } - FILE *fp = fopen(inputFile, "r"); + int count = 0; + char c; - if (fp == NULL){ - return(NULL); - } - - int lineCount = 0; - char ch; - while ((ch = fgetc(fp)) != EOF) - { - if (ch == '\n' || ch == '\0') - { - lineCount++; + while ((c = fgetc(file)) != EOF) { + if (c == '\n') { + count++; } } - - char **heap = malloc(sizeof(char *) * lineCount); - rewind(fp); - - for( int i=0; i #include #include "global.h" #define EXIT_FAILURE 1 -char **readAssemblyFile(char inputFile[]); -int writeBinaryFile(word instrs[], char outputFile[], int numInstrs); +char **readAssemblyFile(char filename[], int lineCount); +void writeBinaryFile(word instrs[], char outputFile[], int numInstrs); +int countLines(char *filename); #endif