diff --git a/documents/references.md b/documents/references.md index 637d575545a83e3c0a6763cb63cb5d493af2b06c..c7f621cd066dcf6e08f0535aeaf75cd797bdced9 100644 --- a/documents/references.md +++ b/documents/references.md @@ -23,7 +23,9 @@ Includes anything from stack overflow links to notes about logic from previous w ### Compare Strings in C <https://www.programiz.com/c-programming/library-function/string.h/strcmp> - +### File Read In +<https://www.tutorialspoint.com/cprogramming/c_file_io.htm> +<https://stackoverflow.com/a/39237609> ## Makefile diff --git a/main.c b/main.c index 2340ccf53f6266a02be47ff545ad51bf2288c6db..9975e5d0a03b5d75ac0e3a82406e99aee17ecc27 100644 --- a/main.c +++ b/main.c @@ -29,6 +29,7 @@ // Method Declaration. +void run_simulator(char*, int, int, int, bool); /** @@ -48,7 +49,6 @@ int main(int argc, char* argv[]) { bool setting_blocks = false; bool setting_file = false; - printf("argc: %d\n", argc); // Loop through all passed args and process accordingly. for (int index = 0; index < argc; index++) { @@ -92,22 +92,18 @@ int main(int argc, char* argv[]) { if (setting_sets) { // Prior flag was sets. Set accordingly. total_sets = atoi(arg); - printf("Set total_set value of %d.\n", total_sets); } else if (setting_lines) { // Prior value was lines. Set accordingly. lines_per_set = atoi(arg); - printf("Set lines_per_set value of %d.\n", lines_per_set); } else if (setting_blocks) { // Prior flag was blocks. Set accordingly. bits_per_block = atoi(arg); - printf("Set bits_per_block value of %d.\n", bits_per_block); } else if (setting_file) { // Prior flag was blocks. Set accordingly. file_name = arg; - printf("Set file_name value of %s.\n", file_name); } else { // Could not determine what value is for. First index is file name so we can skip that. @@ -124,5 +120,45 @@ int main(int argc, char* argv[]) { } } + // Check that all important values were set. + if (file_name == NULL || total_sets == -1 || lines_per_set == -1 || bits_per_block == -1) { + // One or more required args weren't provided. + fprintf(stderr, "Not all args set. Exiting program.\n"); + exit(1); + } else { + run_simulator(file_name, total_sets, lines_per_set, bits_per_block, verbose); + } + printf("\n\nTerminating program.\n"); } + + +/** + * Runs cache simulator logic. + */ +void run_simulator(char* file_name, int total_sets, int lines_per_set, int bits_per_block, bool verbose) { + printf("\nrun_simulator()\n"); + printf(" file_name: %s\n", file_name); + printf(" total_sets: %d\n", total_sets); + printf(" lines_per_set: %d\n", lines_per_set); + printf(" bits_per_block: %d\n", bits_per_block); + printf(" verbose: %d\n", bits_per_block); + + // Open file. + FILE* file_pointer = fopen(file_name, "r"); + char* read_in_buffer = calloc(sizeof(char*), 255); + + // Read in file line by line. + printf("\nReading in file:\n"); + while (fgets(read_in_buffer, 255, file_pointer)) { + printf(" %s", read_in_buffer); + + // Reset buffer for next possible line read in. + free(read_in_buffer); + read_in_buffer = calloc(sizeof(char*), 255); + } + + free(read_in_buffer); + fclose(file_pointer); + printf("Done reading in file.\n"); +}