From b02d3d6d11fe36d515e2db74409b3a3e388db8f3 Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Mon, 15 Mar 2021 19:58:52 +0100 Subject: [PATCH] [0.95][x86] Print output to a file instead of printing it to stdout --- src/common/main.c | 2 +- src/common/printer.c | 49 +++++++++++++++++++++++++------------------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/common/main.c b/src/common/main.c index 7831463..7578e08 100644 --- a/src/common/main.c +++ b/src/common/main.c @@ -51,7 +51,7 @@ NOTES: \n\ } void print_version() { - printf("cpufetch v%s (%s)\n",VERSION, ARCH_STR); + printf("cpufetch v%s (%s) [outfile branch]\n",VERSION, ARCH_STR); } int main(int argc, char* argv[]) { diff --git a/src/common/printer.c b/src/common/printer.c index 19993a2..c67eef7 100644 --- a/src/common/printer.c +++ b/src/common/printer.c @@ -22,6 +22,7 @@ #include #endif +#define OUTPUT_FILE "cpufetch.txt" #define max(a,b) (((a)>(b))?(a):(b)) #define MAX_ATTRIBUTES 100 @@ -346,43 +347,43 @@ uint32_t longest_attribute_length(struct ascii* art) { } #ifdef ARCH_X86 -void print_algorithm_intel(struct ascii* art, int n, bool* flag) { +void print_algorithm_intel(FILE *file, struct ascii* art, int n, bool* flag) { for(int i=0; i < LINE_SIZE; i++) { if(*flag) { if(art->art[n][i] == ' ') { *flag = false; - printf("%s%c%s", art->color2_ascii, art->ascii_chars[1], art->reset); + fprintf(file, "%s%c%s", art->color2_ascii, art->ascii_chars[1], art->reset); } else { - printf("%s%c%s", art->color1_ascii, art->ascii_chars[0], art->reset); + fprintf(file, "%s%c%s", art->color1_ascii, art->ascii_chars[0], art->reset); } } else { if(art->art[n][i] != ' ' && art->art[n][i] != '\0') { *flag = true; - printf("%c",' '); + fprintf(file, "%c",' '); } else { - printf("%c",' '); + fprintf(file, "%c",' '); } } } } -void print_algorithm_amd(struct ascii* art, int n, bool* flag) { +void print_algorithm_amd(FILE *file, struct ascii* art, int n, bool* flag) { *flag = false; // dummy, just silence compiler error for(int i=0; i < LINE_SIZE; i++) { if(art->art[n][i] == '@') - printf("%s%c%s", art->color1_ascii, art->ascii_chars[0], art->reset); + fprintf(file, "%s%c%s", art->color1_ascii, art->ascii_chars[0], art->reset); else if(art->art[n][i] == '#') - printf("%s%c%s", art->color2_ascii, art->ascii_chars[1], art->reset); + fprintf(file, "%s%c%s", art->color2_ascii, art->ascii_chars[1], art->reset); else - printf("%c",art->art[n][i]); + fprintf(file, "%c",art->art[n][i]); } } -void print_ascii_x86(struct ascii* art, uint32_t la, void (*callback_print_algorithm)(struct ascii* art, int i, bool* flag)) { +void print_ascii_x86(FILE *file, struct ascii* art, uint32_t la, void (*callback_print_algorithm)(FILE *file, struct ascii* art, int i, bool* flag)) { int attr_to_print = 0; int attr_type; char* attr_value; @@ -391,9 +392,9 @@ void print_ascii_x86(struct ascii* art, uint32_t la, void (*callback_print_algor uint32_t space_down = NUMBER_OF_LINES - art->n_attributes_set - space_up; bool flag = false; - printf("\n"); + fprintf(file, "\n"); for(uint32_t n=0;n space_up-1 && n < NUMBER_OF_LINES-space_down) { attr_type = art->attributes[attr_to_print]->type; @@ -401,20 +402,20 @@ void print_ascii_x86(struct ascii* art, uint32_t la, void (*callback_print_algor attr_to_print++; space_right = 1 + (la - strlen(ATTRIBUTE_FIELDS[attr_type])); - printf("%s%s%s%*s%s%s%s\n", art->color1_text, ATTRIBUTE_FIELDS[attr_type], art->reset, space_right, "", art->color2_text, attr_value, art->reset); + fprintf(file, "%s%s%s%*s%s%s%s\n", art->color1_text, ATTRIBUTE_FIELDS[attr_type], art->reset, space_right, "", art->color2_text, attr_value, art->reset); } - else printf("\n"); + else fprintf(file, "\n"); } - printf("\n"); + fprintf(file, "\n"); } -void print_ascii(struct ascii* art) { +void print_ascii(FILE *file, struct ascii* art) { uint32_t longest_attribute = longest_attribute_length(art); if(art->vendor == CPU_VENDOR_INTEL) - print_ascii_x86(art, longest_attribute, &print_algorithm_intel); + print_ascii_x86(file, art, longest_attribute, &print_algorithm_intel); else if(art->vendor == CPU_VENDOR_AMD) - print_ascii_x86(art, longest_attribute, &print_algorithm_amd); + print_ascii_x86(file, art, longest_attribute, &print_algorithm_amd); else { printBug("Invalid CPU vendor: %d\n", art->vendor); } @@ -426,6 +427,8 @@ bool print_cpufetch_x86(struct cpuInfo* cpu, STYLE s, struct colors* cs) { if(art == NULL) return false; + FILE *output_file; + char* uarch = get_str_uarch(cpu); char* manufacturing_process = get_str_process(cpu); char* sockets = get_str_sockets(cpu->topo); @@ -436,7 +439,6 @@ bool print_cpufetch_x86(struct cpuInfo* cpu, STYLE s, struct colors* cs) { char* avx = get_str_avx(cpu); char* fma = get_str_fma(cpu); - char* l1i = get_str_l1i(cpu->cach); char* l1d = get_str_l1d(cpu->cach); char* l2 = get_str_l2(cpu->cach); @@ -472,9 +474,14 @@ bool print_cpufetch_x86(struct cpuInfo* cpu, STYLE s, struct colors* cs) { if(art->n_attributes_set > NUMBER_OF_LINES) { printBug("The number of attributes set is bigger than the max that can be displayed"); return false; + } + + if((output_file = fopen(OUTPUT_FILE, "w+")) == NULL) { + perror("fopen"); + return false; } - - print_ascii(art); + + print_ascii(output_file, art); free(manufacturing_process); free(max_frequency);