Compare commits

...

1 Commits

Author SHA1 Message Date
Dr-Noob
b02d3d6d11 [0.95][x86] Print output to a file instead of printing it to stdout 2021-03-15 19:58:52 +01:00
2 changed files with 29 additions and 22 deletions

View File

@@ -51,7 +51,7 @@ NOTES: \n\
} }
void print_version() { 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[]) { int main(int argc, char* argv[]) {

View File

@@ -22,6 +22,7 @@
#include <Windows.h> #include <Windows.h>
#endif #endif
#define OUTPUT_FILE "cpufetch.txt"
#define max(a,b) (((a)>(b))?(a):(b)) #define max(a,b) (((a)>(b))?(a):(b))
#define MAX_ATTRIBUTES 100 #define MAX_ATTRIBUTES 100
@@ -346,43 +347,43 @@ uint32_t longest_attribute_length(struct ascii* art) {
} }
#ifdef ARCH_X86 #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++) { for(int i=0; i < LINE_SIZE; i++) {
if(*flag) { if(*flag) {
if(art->art[n][i] == ' ') { if(art->art[n][i] == ' ') {
*flag = false; *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 { 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 { else {
if(art->art[n][i] != ' ' && art->art[n][i] != '\0') { if(art->art[n][i] != ' ' && art->art[n][i] != '\0') {
*flag = true; *flag = true;
printf("%c",' '); fprintf(file, "%c",' ');
} }
else { 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 *flag = false; // dummy, just silence compiler error
for(int i=0; i < LINE_SIZE; i++) { for(int i=0; i < LINE_SIZE; i++) {
if(art->art[n][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] == '#') 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 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_to_print = 0;
int attr_type; int attr_type;
char* attr_value; 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; uint32_t space_down = NUMBER_OF_LINES - art->n_attributes_set - space_up;
bool flag = false; bool flag = false;
printf("\n"); fprintf(file, "\n");
for(uint32_t n=0;n<NUMBER_OF_LINES;n++) { for(uint32_t n=0;n<NUMBER_OF_LINES;n++) {
callback_print_algorithm(art, n, &flag); callback_print_algorithm(file, art, n, &flag);
if(n > space_up-1 && n < NUMBER_OF_LINES-space_down) { if(n > space_up-1 && n < NUMBER_OF_LINES-space_down) {
attr_type = art->attributes[attr_to_print]->type; 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++; attr_to_print++;
space_right = 1 + (la - strlen(ATTRIBUTE_FIELDS[attr_type])); 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); uint32_t longest_attribute = longest_attribute_length(art);
if(art->vendor == CPU_VENDOR_INTEL) 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) 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 { else {
printBug("Invalid CPU vendor: %d\n", art->vendor); 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) if(art == NULL)
return false; return false;
FILE *output_file;
char* uarch = get_str_uarch(cpu); char* uarch = get_str_uarch(cpu);
char* manufacturing_process = get_str_process(cpu); char* manufacturing_process = get_str_process(cpu);
char* sockets = get_str_sockets(cpu->topo); 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* avx = get_str_avx(cpu);
char* fma = get_str_fma(cpu); char* fma = get_str_fma(cpu);
char* l1i = get_str_l1i(cpu->cach); char* l1i = get_str_l1i(cpu->cach);
char* l1d = get_str_l1d(cpu->cach); char* l1d = get_str_l1d(cpu->cach);
char* l2 = get_str_l2(cpu->cach); char* l2 = get_str_l2(cpu->cach);
@@ -474,7 +476,12 @@ bool print_cpufetch_x86(struct cpuInfo* cpu, STYLE s, struct colors* cs) {
return false; return false;
} }
print_ascii(art); if((output_file = fopen(OUTPUT_FILE, "w+")) == NULL) {
perror("fopen");
return false;
}
print_ascii(output_file, art);
free(manufacturing_process); free(manufacturing_process);
free(max_frequency); free(max_frequency);