diff --git a/src/fastfetch.c b/src/fastfetch.c index 84a49734b..8954930cf 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -113,8 +113,7 @@ int main(int argc, char** argv) { FFstate state; - //init - ffLoadLogo(&state); //Use ffLoadLogoSet to specify an image. Note that this also overwrites color + ffLoadLogo(&state); //also sets color state.current_row = 0; state.passwd = getpwuid(getuid()); uname(&state.utsname); diff --git a/src/fastfetch.h b/src/fastfetch.h index 7155562fd..e45e3ee16 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -19,13 +19,20 @@ #define FASTFETCH_TEXT_MODIFIER_ERROR "\033[1;31m" #define FASTFETCH_TEXT_MODIFIER_RESET "\033[0m" +typedef struct FFlogo +{ + uint8_t width; + uint8_t height; + char chars[256][256]; + char name[128]; + char color[10]; +} FFlogo; + typedef struct FFstate { uint8_t current_row; - uint8_t logo_width; - uint8_t logo_height; - char logo_chars[256][256]; + FFlogo logo; uint8_t logo_seperator; char color[10]; diff --git a/src/logo.c b/src/logo.c index 087c8c7d4..3e1e6dd16 100644 --- a/src/logo.c +++ b/src/logo.c @@ -2,92 +2,108 @@ #include -static void loadArchLogo(FFstate* state) +static void loadUnknownLogo(FFlogo* logo) { - static const char* chars[] = { - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m -` "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m .o+` "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `ooo/ "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `+oooo: "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `+oooooo: "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m -+oooooo+: "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/:-:++oooo+: "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/++++/+++++++: "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/++++++++++++++: "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/+++ooooooooooooo/` "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m ./ooosssso++osssssso+` "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m .oossssso-````/ossssss+` "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m -osssssso. :ssssssso. "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m :osssssss/ osssso+++. "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m /ossssssss/ +ssssooo/- "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/ossssso+/:- -:/+osssso+- "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `+sso+:-` `.-/+oso: "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m`++:. `-/+/"FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m.` `/"FASTFETCH_TEXT_MODIFIER_RESET - }; - - state->logo_width = 37; - state->logo_height = 19; - for(uint8_t i = 0; i < state->logo_height; i++) - strcpy(state->logo_chars[i], chars[i]); - strcpy(state->color, "\033[36m"); + logo->width = 23; + logo->height = 18; + strcpy(logo->name, "unknown"); + strcpy(logo->color, ""); + strcpy(logo->chars[0], FASTFETCH_TEXT_MODIFIER_BOLT" ________ "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[1], FASTFETCH_TEXT_MODIFIER_BOLT" _jgN########Ngg_ "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[2], FASTFETCH_TEXT_MODIFIER_BOLT" _N##N@@\"\" \"\"9NN##Np_ "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[3], FASTFETCH_TEXT_MODIFIER_BOLT"d###P N####p"FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[4], FASTFETCH_TEXT_MODIFIER_BOLT"\"^^\" T####"FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[5], FASTFETCH_TEXT_MODIFIER_BOLT" d###P"FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[6], FASTFETCH_TEXT_MODIFIER_BOLT" _g###@F "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[7], FASTFETCH_TEXT_MODIFIER_BOLT" _gN##@P "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[8], FASTFETCH_TEXT_MODIFIER_BOLT" gN###F\" "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[9], FASTFETCH_TEXT_MODIFIER_BOLT" d###F "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[10], FASTFETCH_TEXT_MODIFIER_BOLT" 0###F "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[11], FASTFETCH_TEXT_MODIFIER_BOLT" 0###F "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[12], FASTFETCH_TEXT_MODIFIER_BOLT" 0###F "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[13], FASTFETCH_TEXT_MODIFIER_BOLT" \"NN@' "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[14], FASTFETCH_TEXT_MODIFIER_BOLT" "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[15], FASTFETCH_TEXT_MODIFIER_BOLT" ___ "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[16], FASTFETCH_TEXT_MODIFIER_BOLT" q###r "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[17], FASTFETCH_TEXT_MODIFIER_BOLT" \"\" "FASTFETCH_TEXT_MODIFIER_RESET); } -static void loadUnknownLogo(FFstate* state) +static void loadArchLogo(FFlogo* logo) { - static const char* chars[] = { - FASTFETCH_TEXT_MODIFIER_BOLT" ________ "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" _jgN########Ngg_ "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" _N##N@@\"\" \"\"9NN##Np_ "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"d###P N####p"FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT"\"^^\" T####"FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" d###P"FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" _g###@F "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" _gN##@P "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" gN###F\" "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" d###F "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" 0###F "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" 0###F "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" 0###F "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" \"NN@' "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" ___ "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" q###r "FASTFETCH_TEXT_MODIFIER_RESET, - FASTFETCH_TEXT_MODIFIER_BOLT" \"\" "FASTFETCH_TEXT_MODIFIER_RESET - }; + logo->width = 37; + logo->height = 20; + strcpy(logo->name, "arch"); + strcpy(logo->color, "\033[36m"); + strcpy(logo->chars[0], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m -` "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[1], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m -` "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[2], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m .o+` "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[3], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `ooo/ "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[4], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `+oooo: "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[5], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `+oooooo: "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[6], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m -+oooooo+: "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[7], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/:-:++oooo+: "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[8], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/++++/+++++++: "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[9], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/++++++++++++++: "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[10], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/+++ooooooooooooo/` "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[11], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m ./ooosssso++osssssso+` "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[12], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m .oossssso-````/ossssss+` "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[13], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m -osssssso. :ssssssso. "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[14], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m :osssssss/ osssso+++. "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[15], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m /ossssssss/ +ssssooo/- "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[16], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `/ossssso+/:- -:/+osssso+- "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[17], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m `+sso+:-` `.-/+oso: "FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[18], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m`++:. `-/+/"FASTFETCH_TEXT_MODIFIER_RESET); + strcpy(logo->chars[19], FASTFETCH_TEXT_MODIFIER_BOLT"\033[36m.` `/"FASTFETCH_TEXT_MODIFIER_RESET); +} - state->logo_width = 23; - state->logo_height = 18; - for(uint8_t i = 0; i < state->logo_height; i++) - strcpy(state->logo_chars[i], chars[i]); - state->color[0] = '\0'; +static FFlogo* getLogos(uint8_t* size) +{ + #define FASTFETCH_LOGO_AMOUNT 2 + + *size = FASTFETCH_LOGO_AMOUNT; + static FFlogo logos[FASTFETCH_LOGO_AMOUNT]; + + #undef FASTFETCH_LOGO_AMOUNT + + loadUnknownLogo(&logos[0]); + loadArchLogo(&logos[1]); + + return logos; } void ffLoadLogoSet(FFstate* state, const char* logo) { if(strcmp(logo, "arch") == 0) - loadArchLogo(state); + loadArchLogo(&state->logo); else - loadUnknownLogo(state); + loadUnknownLogo(&state->logo); } void ffLoadLogo(FFstate* state) { char id[256]; ffParsePropFile("/etc/os-release", "ID=%[^\n]", id); - - ffLoadLogoSet(state, id); + if(id[0] == '\0') + { + if(state->showErrors) + puts(FASTFETCH_TEXT_MODIFIER_ERROR"Error: \"ID=%[^\\n]\" not found in \"/etc/os-release\""FASTFETCH_TEXT_MODIFIER_RESET); + loadUnknownLogo(&state->logo); + } + else + { + ffLoadLogoSet(state, id); + } } void ffPrintLogoLine(FFstate* state) { - if(state->current_row < state->logo_height) + if(state->current_row < state->logo.height) { - printf(state->logo_chars[state->current_row]); + printf(state->logo.chars[state->current_row]); } else { - for(uint8_t i = 0; i < state->logo_width; i++) + for(uint8_t i = 0; i < state->logo.width; i++) putchar(' '); } @@ -99,10 +115,23 @@ void ffPrintLogoLine(FFstate* state) void ffListLogos() { - puts("not implemented"); + uint8_t size; + FFlogo* logos = getLogos(&size); + + for(uint8_t i = 0; i < size; i++) + puts(logos[i].name); } void ffPrintLogos() { - puts("not implemented"); + uint8_t size; + FFlogo* logos = getLogos(&size); + + for(uint8_t i = 0; i < size; i++) + { + printf(FASTFETCH_TEXT_MODIFIER_BOLT"%s%s"FASTFETCH_TEXT_MODIFIER_RESET":\n", logos[i].color, logos[i].name); + for(uint8_t k = 0; k < logos[i].height; k++) + puts(logos[i].chars[k]); + putchar('\n'); + } } \ No newline at end of file