diff --git a/Makefile b/Makefile index a143f03..55d2de9 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ debug: install: build cp $(NAME) $(DESTDIR)$(PREFIX)/$(NAME) ls $(DESTDIR)$(LIBDIR)/uwufetch > /dev/null || mkdir $(DESTDIR)$(LIBDIR)/uwufetch - cp res/* $(DESTDIR)$(LIBDIR)/uwufetch + cp -r res/* $(DESTDIR)$(LIBDIR)/uwufetch cp ./$(NAME).1.gz $(DESTDIR)$(MANDIR)/ uninstall: diff --git a/res/ascii/arch.txt b/res/ascii/arch.txt new file mode 100644 index 0000000..d4e77f8 --- /dev/null +++ b/res/ascii/arch.txt @@ -0,0 +1,8 @@ +{BLUE} /\ + / \ + /\ \ + / > ω <\ + / __ \ + / __| |__-\ + /_-'' ''-_\ + diff --git a/res/ascii/unknown.txt b/res/ascii/unknown.txt new file mode 100644 index 0000000..6c2e5d6 --- /dev/null +++ b/res/ascii/unknown.txt @@ -0,0 +1,7 @@ +{WHITE} ._.--._. + \|>{YELLOW}_{WHITE}< |/ + |{YELLOW}:_/{WHITE} | + // \ \ ? + (| | ) / + {YELLOW}/'\_ _/`\{WHITE}- + {YELLOW}\___)=(___/ diff --git a/uwufetch.c b/uwufetch.c index 255157e..80154ec 100644 --- a/uwufetch.c +++ b/uwufetch.c @@ -101,7 +101,9 @@ int pkgman(); void parse_config(); void get_info(); void list(); +void replace(char *original, char *search, char *replacer); void print_ascii(); +void print_unknown_ascii(); void print_info(); void print_image(); void usage(char *); @@ -623,9 +625,72 @@ void list(char *arg) NORMAL, BLUE, BLUE, PINK, MAGENTA, WHITE, GREEN, YELLOW, BLUE, WHITE); // Other/spare distributions colors } +/* + This replaces all terms in a string with another term. +replace("Hello World!", "World", "everyone") + This returns "Hello everyone!". +*/ +void replace(char *original, char *search, char *replacer) { + char buffer[4096]; + char *ch; + if(!(ch = strstr(original, search))) return; + + strncpy(buffer, original, ch-original); + buffer[ch-original] = 0; + sprintf(buffer+(ch - original), "%s%s", replacer, ch + strlen(search)); + + original[0] = 0; + strcpy(original, buffer); + return replace(original, search, replacer); +} + void print_ascii() { // prints logo (as ascii art) of the given system. distributions listed alphabetically. + printf("\n"); + FILE *file; + char ascii_file[1024]; + // First tries to get ascii art file from local directory. Good when modifying these files. + sprintf(ascii_file, "./res/ascii/%s.txt", version_name); + file = fopen(ascii_file, "r"); + // Now tries to get file from normal directory + if(!file) { + if(strcmp(version_name, "android") == 0) { + sprintf(ascii_file, "/data/data/com.termux/files/usr/lib/uwufetch/ascii/%s.txt", version_name); + } else { + sprintf(ascii_file, "/usr/lib/uwufetch/ascii/%s.txt", version_name); + } + file = fopen(ascii_file, "r"); + if(!file) { + // Prevent infinite loops + if(strcmp(version_name, "unknown") == 0) { + printf("No\nunknown\nascii\nfile\n\n\n\n"); + return; + } + sprintf(version_name, "unknown"); + return print_ascii(); + } + } + char line[64]; + while(fgets(line, 64, file)) { + replace(line, "{NORMAL}", NORMAL); + replace(line, "{BOLD}", BOLD); + replace(line, "{BLACK}", BLACK); + replace(line, "{RED}", RED); + replace(line, "{GREEN}", GREEN); + replace(line, "{YELLOW}", YELLOW); + replace(line, "{BLUE}", BLUE); + replace(line, "{MAGENTA}", MAGENTA); + replace(line, "{CYAN}", CYAN); + replace(line, "{WHITE}", WHITE); + replace(line, "{PINK}", PINK); + replace(line, "{LPINK}", LPINK); + printf(line); + } + // Always set color to NORMAL, so there's no need to do this in every ascii file. + printf(NORMAL); + fclose(file); + /* // linux if (strcmp(version_name, "alpine") == 0) { @@ -871,7 +936,12 @@ void print_ascii() " (| | ) /\n" " %s/'\\_ _/`\\%s-\n" " %s\\___)=(___/\n\n", - WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW); + WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW);*/ +} + +void print_unknown_ascii() { + printf("\n\n\n\n\nidk man\n"); + return; } void print_image()