From 83e4aef1637f636043e6fea17f5f2d361e9a2caa Mon Sep 17 00:00:00 2001 From: TheDarkBug Date: Mon, 1 Nov 2021 16:48:54 +0100 Subject: [PATCH] Windows build is fully working --- Makefile | 15 +- res/ascii/windows.txt | 18 +- res/ascii/windows.txt.old | 9 + res/ascii/windows_sum.txt | 9 + uwufetch.c | 747 +++++++++++++++++--------------------- uwufetch.exe | Bin 0 -> 196082 bytes 6 files changed, 370 insertions(+), 428 deletions(-) create mode 100644 res/ascii/windows.txt.old create mode 100644 res/ascii/windows_sum.txt create mode 100644 uwufetch.exe diff --git a/Makefile b/Makefile index f2ce685..c7960ec 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,8 @@ NAME = uwufetch FILES = uwufetch.c CFLAGS = -O3 CFLAGS_DEBUG = -Wall -Wextra -g -pthread +CC = cc + ifeq ($(shell uname), Linux) PREFIX = /usr/bin LIBDIR = /usr/lib @@ -16,18 +18,21 @@ else ifeq ($(shell uname), FreeBSD) PREFIX = /usr/bin LIBDIR = /usr/lib MANDIR = /usr/share/man/man1 +else ifeq ($(shell uname), windows32) + CC = gcc + CFLAGS += -D__WINDOWS__ + CFLAGS_DEBUG += -D__WINDOWS__ + PREFIX = "C:\Program Files" + LIBDIR = + MANDIR = endif -CC = cc - - build: $(FILES) $(CC) $(CFLAGS) -o $(NAME) $(FILES) debug: - @clear $(CC) $(CFLAGS_DEBUG) -o $(NAME) $(FILES) - ./uwufetch + ./$(NAME) install: mkdir -p $(DESTDIR)$(PREFIX) $(DESTDIR)$(LIBDIR)/uwufetch $(DESTDIR)$(MANDIR) diff --git a/res/ascii/windows.txt b/res/ascii/windows.txt index 8781ffe..354598b 100644 --- a/res/ascii/windows.txt +++ b/res/ascii/windows.txt @@ -1,9 +1,9 @@ -{BLUE}MMMMMMM MMMMMMM -M ^ M M ^ M -M M M M -MMMMMMM MMMMMMM - -MMMMMMM MMMMMMM -M W W W M -M WW WW M -MMMMMMM MMMMMMM +{RED}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{GREEN}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK} +{RED}{BLOCK_VERTICAL} {BLOCK}{BLOCK}{BLOCK} {GREEN}{BLOCK_VERTICAL} {BLOCK}{BLOCK}{BLOCK} {BLOCK_VERTICAL} +{RED}{BLOCK_VERTICAL} {BLOCK_VERTICAL}{BLOCK} {GREEN}{BLOCK_VERTICAL} {BLOCK}{BLOCK_VERTICAL} {BLOCK_VERTICAL} +{RED}{BLOCK_VERTICAL} {BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK_VERTICAL}{BLOCK} {GREEN}{BLOCK_VERTICAL} {BLOCK_VERTICAL}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK} {BLOCK_VERTICAL} +{RED}{BLOCK_VERTICAL}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{GREEN}{BLOCK_VERTICAL}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK_VERTICAL} +{BLUE}{BLOCK_VERTICAL} {YELLOW} {BLOCK_VERTICAL} {BLOCK_VERTICAL} +{BLUE}{BLOCK_VERTICAL} {BLOCK} {YELLOW} {BLOCK} {BLOCK} {BLOCK_VERTICAL} +{BLUE}{BLOCK_VERTICAL} {BLOCK_VERTICAL}{BLOCK}{YELLOW}{BLOCK_VERTICAL}{BLOCK}{BLOCK_VERTICAL} {BLOCK_VERTICAL} +{BLUE}{BLOCK_VERTICAL}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{YELLOW}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK_VERTICAL} diff --git a/res/ascii/windows.txt.old b/res/ascii/windows.txt.old new file mode 100644 index 0000000..8781ffe --- /dev/null +++ b/res/ascii/windows.txt.old @@ -0,0 +1,9 @@ +{BLUE}MMMMMMM MMMMMMM +M ^ M M ^ M +M M M M +MMMMMMM MMMMMMM + +MMMMMMM MMMMMMM +M W W W M +M WW WW M +MMMMMMM MMMMMMM diff --git a/res/ascii/windows_sum.txt b/res/ascii/windows_sum.txt new file mode 100644 index 0000000..7964bb5 --- /dev/null +++ b/res/ascii/windows_sum.txt @@ -0,0 +1,9 @@ +{SPRING_GREEN}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK} +{BLOCK_VERTICAL} {BLOCK}{BLOCK}{BLOCK} {BLOCK_VERTICAL} {BLOCK}{BLOCK}{BLOCK} {BLOCK_VERTICAL} +{BLOCK_VERTICAL} {BLOCK_VERTICAL}{BLOCK} {BLOCK_VERTICAL} {BLOCK}{BLOCK_VERTICAL} {BLOCK_VERTICAL} +{BLOCK_VERTICAL} {BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK_VERTICAL}{BLOCK} {BLOCK_VERTICAL} {BLOCK_VERTICAL}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK} {BLOCK_VERTICAL} +{BLOCK_VERTICAL}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK_VERTICAL}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK_VERTICAL} +{BLOCK_VERTICAL} {BLOCK_VERTICAL} {BLOCK_VERTICAL} +{BLOCK_VERTICAL} {BLOCK} {BLOCK} {BLOCK} {BLOCK_VERTICAL} +{BLOCK_VERTICAL} {BLOCK_VERTICAL}{BLOCK}{BLOCK_VERTICAL}{BLOCK}{BLOCK_VERTICAL} {BLOCK_VERTICAL} +{BLOCK_VERTICAL}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK}{BLOCK_VERTICAL} diff --git a/uwufetch.c b/uwufetch.c index 3e95891..929bc06 100644 --- a/uwufetch.c +++ b/uwufetch.c @@ -24,13 +24,23 @@ #if defined(__APPLE__) || defined(__FREEBSD__) #include #include -#else -#ifndef __FREEBSD__ +#else // defined(__APPLE__) || defined(__FREEBSD__) +#ifdef __FREEBSD__ +#else // defined(__FREEBSD__) || defined(__WINDOWS__) +#ifndef __WINDOWS__ #include -#endif -#endif +#else // __WINDOWS__ +#include +#endif // __WINDOWS__ +#endif // defined(__FREEBSD__) || defined(__WINDOWS__) +#endif // defined(__APPLE__) || defined(__FREEBSD__) +#ifndef __WINDOWS__ #include -#include +#include +#else // __WINDOWS__ +#include +CONSOLE_SCREEN_BUFFER_INFO csbi; +#endif // __WINDOWS__ // COLORS #define NORMAL "\x1b[0m" @@ -38,6 +48,7 @@ #define BLACK "\x1b[30m" #define RED "\x1b[31m" #define GREEN "\x1b[32m" +#define SPRING_GREEN "\x1b[38;5;120m" #define YELLOW "\x1b[33m" #define BLUE "\x1b[34m" #define MAGENTA "\x1b[0;35m" @@ -45,6 +56,12 @@ #define WHITE "\x1b[37m" #define PINK "\x1b[38;5;201m" #define LPINK "\x1b[38;5;213m" + +#ifdef __WINDOWS__ +#define BLOCK_CHAR "\xdb" +#else // __WINDOWS__ +#define BLOCK_CHAR "\u2587" +#endif // __WINDOWS__ #ifdef __APPLE__ // buffers where data fetched from sysctl are stored // CPU @@ -60,22 +77,31 @@ size_t mem_buffer_len = sizeof(mem_buffer); // uptime struct timeval time_buffer; size_t time_buffer_len = sizeof(time_buffer); -#endif +#endif // __APPLE__ struct package_manager { char command_string[128]; // command to get number of packages installed char pkgman_name[16]; // name of the package manager }; +#ifndef __WINDOWS__ struct utsname sys_var; +#endif // __WINDOWS__ #ifndef __APPLE__ #ifdef __linux__ struct sysinfo sys; -#endif -#endif +#else // __linux__ +#ifdef __WINDOWS__ +struct _SYSTEM_INFO sys; +#endif // __WINDOWS__ +#endif // __linux__ +#endif // __APPLE__ +#ifndef __WINDOWS__ struct winsize win; +#else // __WINDOWS__ +int ws_col, ws_rows; +#endif // __WINDOWS__ -int iscygwin = 0; // initialise the variables to store data, gpu array can hold up to 8 gpus int target_width = 0, screen_width = 0, screen_height = 0, ram_total, ram_used = 0, pkgs = 0; long uptime = 0; @@ -94,10 +120,16 @@ int ascii_image_flag = 0, // when (0) ascii is printed, when (1) image is printe show_uptime = 1, show_colors = 1; -char user[32], host[256], shell[64], host_model[256], kernel[256], version_name[64], cpu_model[256], +char user[128], host[256], shell[64], host_model[256], kernel[256], version_name[64], cpu_model[256], gpu_model[64][256], pkgman_name[64], image_name[128], *config_directory = NULL, *cache_content = NULL; +#ifndef __WINDOWS__ +char *terminal_cursor_move = "\033[18C"; +#else // __WINDOWS__ +char *terminal_cursor_move = "\033[21C"; +#endif // __WINDOWS__ + // functions definitions, to use them in main() int pkgman(); void parse_config(); @@ -143,6 +175,10 @@ int main(int argc, char *argv[]) return 0; } } +#ifdef __WINDOWS__ + // packages disabled by default because chocolatey is slow + show_pkgs = 0; +#endif int opt = 0; static struct option long_options[] = { @@ -208,7 +244,6 @@ void parse_config() { char line[256]; - // opening and reading the config file FILE *config = NULL; if (config_directory == NULL) { @@ -216,11 +251,11 @@ void parse_config() { char homedir[512]; sprintf(homedir, "%s/.config/uwufetch/config", getenv("HOME")); - config = fopen(homedir, "r"); + config = fopen(homedir, "r+"); } } else - config = fopen(config_directory, "r"); + config = fopen(config_directory, "r+"); if (config == NULL) return; @@ -276,6 +311,7 @@ int pkgman() int total = 0; #ifndef __APPLE__ // this function is not used on mac os because it causes lots of problems +#ifndef __WINDOWS__ struct package_manager pkgmans[] = { {"apt list --installed 2> /dev/null | wc -l", "(apt)"}, {"apk info 2> /dev/null | wc -l", "(apk)"}, @@ -292,15 +328,13 @@ int pkgman() {"xbps-query -l 2> /dev/null | wc -l", "(xbps)"}, {"zypper -q se --installed-only 2> /dev/null | wc -l", "(zypper)"}}; const unsigned long pkgman_count = sizeof(pkgmans) / sizeof(pkgmans[0]); - // to format the pkgman_name string properly int comma_separator = 0; - for (long unsigned int i = 0; i < pkgman_count; i++) { // long unsigned int instead of int because of -Wsign-compare struct package_manager *current = &pkgmans[i]; - FILE *fp = popen(current->command_string, "r"); + FILE *fp = popen(current->command_string, "r+"); unsigned int pkg_count; if (fscanf(fp, "%u", &pkg_count) == 3) @@ -321,6 +355,28 @@ int pkgman() strcat(pkgman_name, current->pkgman_name); // this is the line that breaks mac os, but something strange happens before } } +#else // __WINDOWS__ + if (show_pkgs) + { + FILE *fp = popen("choco list -l --no-color 2> nul", "r"); + unsigned int pkg_count; + char buffer[7562] = {0}; + while (fgets(buffer, sizeof(buffer), fp)) + { + sscanf(buffer, "%u packages installed.", &pkg_count); + } + if (fp) + pclose(fp); + + total = pkg_count; + char spkg_count[16]; + sprintf(spkg_count, "%u", pkg_count); + strcat(pkgman_name, spkg_count); + strcat(pkgman_name, " "); + strcat(pkgman_name, "(chocolatey)"); + } +#endif // __WINDOWS__ + #endif return total; } @@ -355,65 +411,64 @@ int uptime_freebsd() void print_info() { -#define responsively_printf(buf, format, ...) { \ - sprintf(buf, format, __VA_ARGS__); \ - printf("%.*s\n", win.ws_col-1, buf); \ -} - char print_buf[255]; // for responsively print +#ifdef __WINDOWS__ +#define responsively_printf(buf, format, ...) \ + { \ + sprintf(buf, format, __VA_ARGS__); \ + printf("%.*s\n", ws_col - 1, buf); \ + } +#else // __WINDOWS__ +#define responsively_printf(buf, format, ...) \ + { \ + sprintf(buf, format, __VA_ARGS__); \ + printf("%.*s\n", win.ws_col - 1, buf); \ + } +#endif // __WINDOWS__ + char print_buf[1024]; // for responsively print // print collected info - from host to cpu info printf("\033[9A"); // to align info text - if (show_user_info) { - responsively_printf(print_buf, "\033[18C%s%s%s@%s", NORMAL, BOLD, user, host); - } + if (show_user_info) + responsively_printf(print_buf, "%s%s%s%s@%s", terminal_cursor_move, NORMAL, BOLD, user, host); uwu_name(); - if (show_os) { - responsively_printf(print_buf, "\033[18C%s%sOWOS %s%s", NORMAL, BOLD, NORMAL, version_name); - } - if (show_host) { - responsively_printf(print_buf, "\033[18C%s%sHOWOST %s%s", NORMAL, BOLD, NORMAL, host_model); - } - if (show_kernel) { - responsively_printf(print_buf, "\033[18C%s%sKEWNEL %s%s", NORMAL, BOLD, NORMAL, kernel); - } - if (show_cpu) { - responsively_printf(print_buf, "\033[18C%s%sCPUWU %s%s", NORMAL, BOLD, NORMAL, cpu_model); - } + if (show_os) + responsively_printf(print_buf, "%s%s%sOWOS %s%s", terminal_cursor_move, NORMAL, BOLD, NORMAL, version_name); + if (show_host) + responsively_printf(print_buf, "%s%s%sHOWOST %s%s", terminal_cursor_move, NORMAL, BOLD, NORMAL, host_model); + if (show_kernel) + responsively_printf(print_buf, "%s%s%sKEWNEL %s%s", terminal_cursor_move, NORMAL, BOLD, NORMAL, kernel); + if (show_cpu) + responsively_printf(print_buf, "%s%s%sCPUWU %s%s", terminal_cursor_move, NORMAL, BOLD, NORMAL, cpu_model); // print the gpus - if (show_gpu) { + if (show_gpu) for (int i = 0; gpu_model[i][0]; i++) responsively_printf(print_buf, - "\033[18C%s%sGPUWU %s%s", - NORMAL, BOLD, NORMAL, gpu_model[i]); - } + "%s%s%sGPUWU %s%s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, gpu_model[i]); // print ram to uptime and colors - if (show_ram) { + if (show_ram) responsively_printf(print_buf, - "\033[18C%s%sWAM %s%i MiB/%i MiB", - NORMAL, BOLD, NORMAL, (ram_used), ram_total); - } + "%s%s%sWAM %s%i MiB/%i MiB", + terminal_cursor_move, NORMAL, BOLD, NORMAL, (ram_used), ram_total); if (show_resolution) - if (screen_width != 0 || screen_height != 0) { + if (screen_width != 0 || screen_height != 0) responsively_printf(print_buf, - "\033[18C%s%sRESOWUTION%s %dx%d", - NORMAL, BOLD, NORMAL, screen_width, screen_height); - } - if (show_shell) { + "%s%s%sRESOWUTION%s %dx%d", + terminal_cursor_move, NORMAL, BOLD, NORMAL, screen_width, screen_height); + if (show_shell) responsively_printf(print_buf, - "\033[18C%s%sSHEWW %s%s", - NORMAL, BOLD, NORMAL, shell); - } + "%s%s%sSHEWW %s%s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, shell); #ifdef __APPLE__ if (show_pkgs) system("ls $(brew --cellar) | wc -l | awk -F' ' '{print \" \x1b[34mw w \x1b[0m\x1b[1mPKGS\x1b[0m \"$1 \" (brew)\"}'"); #else - if (show_pkgs) { + if (show_pkgs) responsively_printf(print_buf, - "\033[18C%s%sPKGS %s%s%d: %s", - NORMAL, BOLD, NORMAL, NORMAL, pkgs, pkgman_name); - } + "%s%s%sPKGS %s%s%d: %s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, NORMAL, pkgs, pkgman_name); #endif if (show_uptime) { @@ -426,7 +481,11 @@ void print_info() #ifdef __FREEBSD__ uptime = uptime_freebsd(); #else +#ifdef __WINDOWS__ + uptime = GetTickCount() / 1000; +#else // __WINDOWS__ uptime = sys.uptime; +#endif // __WINDOWS__ #endif #endif } @@ -434,23 +493,23 @@ void print_info() { case 0 ... 3599: responsively_printf(print_buf, - "\033[18C%s%sUWUPTIME %s%lim", - NORMAL, BOLD, NORMAL, uptime / 60 % 60); + "%s%s%sUWUPTIME %s%lim", + terminal_cursor_move, NORMAL, BOLD, NORMAL, uptime / 60 % 60); break; case 3600 ... 86399: responsively_printf(print_buf, - "\033[18C%s%sUWUPTIME %s%lih, %lim", - NORMAL, BOLD, NORMAL, uptime / 3600, uptime / 60 % 60); + "%s%s%sUWUPTIME %s%lih, %lim", + terminal_cursor_move, NORMAL, BOLD, NORMAL, uptime / 3600, uptime / 60 % 60); break; default: responsively_printf(print_buf, - "\033[18C%s%sUWUPTIME %s%lid, %lih, %lim", - NORMAL, BOLD, NORMAL, uptime / 86400, uptime / 3600 % 24, uptime / 60 % 60); + "%s%s%sUWUPTIME %s%lid, %lih, %lim", + terminal_cursor_move, NORMAL, BOLD, NORMAL, uptime / 86400, uptime / 3600 % 24, uptime / 60 % 60); } } if (show_colors) - printf("\033[18C%s%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\n", - BOLD, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, NORMAL); + printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", + terminal_cursor_move, BOLD, BLACK, BLOCK_CHAR, BLOCK_CHAR, RED, BLOCK_CHAR, BLOCK_CHAR, GREEN, BLOCK_CHAR, BLOCK_CHAR, YELLOW, BLOCK_CHAR, BLOCK_CHAR, BLUE, BLOCK_CHAR, BLOCK_CHAR, MAGENTA, BLOCK_CHAR, BLOCK_CHAR, CYAN, BLOCK_CHAR, BLOCK_CHAR, WHITE, BLOCK_CHAR, BLOCK_CHAR, NORMAL); } void write_cache() @@ -467,7 +526,9 @@ void write_cache() #ifdef __FREEBSD__ uptime = uptime_freebsd(); #else +#ifndef __WINDOWS__ uptime = sys.uptime; +#endif // __WINDOWS__ #endif #endif fprintf(cache_fp, "user=%s\nhost=%s\nversion_name=%s\nhost_model=%s\nkernel=%s\ncpu=%s\nscreen_width=%d\nscreen_height=%d\nshell=%s\npkgs=%d\npkgman_name=%s\n", user, host, version_name, host_model, kernel, cpu_model, screen_width, screen_height, shell, pkgs, pkgman_name); @@ -489,7 +550,7 @@ int read_cache() { char cache_file[512]; sprintf(cache_file, "%s/.cache/uwufetch.cache", getenv("HOME")); - FILE *cache_fp = fopen(cache_file, "r"); + FILE *cache_fp = fopen(cache_file, "r+"); if (cache_fp == NULL) return 0; @@ -521,41 +582,44 @@ int read_cache() void print_cache() { #ifndef __APPLE__ +#ifndef __WINDOWS__ sysinfo(&sys); // to get uptime -#ifndef __CYGWIN__ +#endif // __WINDOWS__ FILE *meminfo; #ifdef __FREEBSD__ - meminfo = popen("LANG=EN_us freecolor -om 2> /dev/null", "r"); -#else - meminfo = popen("LANG=EN_us free -m 2> /dev/null", "r"); -#endif + meminfo = popen("LANG=EN_us freecolor -om 2> /dev/null", "r+"); +#else // __FREEBSD__ + meminfo = popen("LANG=EN_us free -m 2> /dev/null", "r+"); +#endif // __FREEBSD__ char line[256]; while (fgets(line, sizeof(line), meminfo)) // free command prints like this: "Mem:" total used free shared buff/cache available sscanf(line, "Mem: %d %d", &ram_total, &ram_used); fclose(meminfo); -#else +#elif defined(__WINDOWS__) // wmic OS get FreePhysicalMemory FILE *mem_used_fp; - mem_used_fp = popen("wmic OS GET FreePhysicalMemory | sed -n 2p", "r"); + mem_used_fp = popen("wmic OS GET FreePhysicalMemory", "r+"); char mem_used_ch[2137]; + printf("\n\n\n\\\n"); while (fgets(mem_used_ch, sizeof(mem_used_ch), mem_used_fp) != NULL) - ; + { + printf("%s\n", mem_used_ch); + } pclose(mem_used_fp); int mem_used = atoi(mem_used_ch); ram_used = mem_used / 1024; -#endif -#else +#else // __APPLE__ // Used ram FILE *mem_wired_fp, *mem_active_fp, *mem_compressed_fp; - mem_wired_fp = popen("vm_stat | awk '/wired/ { printf $4 }' | cut -d '.' -f 1", "r"); - mem_active_fp = popen("vm_stat | awk '/active/ { printf $3 }' | cut -d '.' -f 1", "r"); - mem_compressed_fp = popen("vm_stat | awk '/occupied/ { printf $5 }' | cut -d '.' -f 1", "r"); + mem_wired_fp = popen("vm_stat | awk '/wired/ { printf $4 }' | cut -d '.' -f 1", "r+"); + mem_active_fp = popen("vm_stat | awk '/active/ { printf $3 }' | cut -d '.' -f 1", "r+"); + mem_compressed_fp = popen("vm_stat | awk '/occupied/ { printf $5 }' | cut -d '.' -f 1", "r+"); char mem_wired_ch[2137], mem_active_ch[2137], mem_compressed_ch[2137]; while (fgets(mem_wired_ch, sizeof(mem_wired_ch), mem_wired_fp) != NULL) { @@ -579,8 +643,7 @@ void print_cache() sysctlbyname("hw.memsize", &mem_buffer, &mem_buffer_len, NULL, 0); ram_used = ((mem_wired + mem_active + mem_compressed) * 4 / 1024); -#endif - +#endif // __APPLE__ print_ascii(); print_info(); return; @@ -590,86 +653,98 @@ void get_info() { // get all necessary info char line[256]; // var to scan file lines - // terminal width used to truncate long names +// terminal width used to truncate long names +#ifndef __WINDOWS__ ioctl(STDOUT_FILENO, TIOCGWINSZ, &win); target_width = win.ws_col - 30; +#else // __WINDOWS__ + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); + ws_col = csbi.srWindow.Right - csbi.srWindow.Left - 29; + ws_rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; +#endif // __WINDOWS__ // os version, cpu and board info - FILE *os_release = fopen("/etc/os-release", "r"); + FILE *os_release = fopen("/etc/os-release", "r+"); #ifndef __FREEBSD__ - FILE *cpuinfo = fopen("/proc/cpuinfo", "r"); + FILE *cpuinfo = fopen("/proc/cpuinfo", "r+"); #else - FILE *cpuinfo = popen("sysctl -a | egrep -i 'hw.model'", "r"); + FILE *cpuinfo = popen("sysctl -a | egrep -i 'hw.model'", "r+"); #endif - FILE *host_model_info = fopen("/sys/devices/virtual/dmi/id/board_name", "r"); + FILE *host_model_info = fopen("/sys/devices/virtual/dmi/id/board_name", "r+"); if (!host_model_info) if ((host_model_info = fopen("/sys/devices/virtual/dmi/id/product_name", "r")) != NULL) fclose(host_model_info); -#ifdef __FREEBSD__ - host_model_info = popen("sysctl -a hw.hv_vendor", "r"); +#ifdef __WINDOWS__ + host_model_info = popen("wmic computersystem get model", "r"); + while (fgets(line, sizeof(line), host_model_info)) + { + if (strstr(line, "Model") != 0) + continue; + else + { + sprintf(host_model, "%s", line); + host_model[strlen(host_model) - 2] = '\0'; + break; + } + } +#elif defined(__FREEBSD__) + host_model_info = popen("sysctl -a hw.hv_vendor", "r+"); while (fgets(line, sizeof(line), host_model_info)) if (sscanf(line, "hw.hv_vendor: %[^\n]", host_model)) break; -#endif +#endif // __WINDOWS__ FILE *host_model_version = fopen("/sys/devices/virtual/dmi/id/product_version", "r"); -#ifdef __CYGWIN__ - iscygwin = 1; -#endif - if (iscygwin == 1) - sprintf(version_name, "windows"); - if (os_release || iscygwin == 1) + if (os_release) { // get normal vars - if (iscygwin == 0) - { - while (fgets(line, sizeof(line), os_release)) - if (sscanf(line, "\nID=\"%s\"", version_name) || sscanf(line, "\nID=%s", version_name)) - break; + while (fgets(line, sizeof(line), os_release)) + if (sscanf(line, "\nID=\"%s\"", version_name) || sscanf(line, "\nID=%s", version_name)) + break; - // trying to detect amogos because in its os-release file ID value is just "debian" - if (strcmp(version_name, "debian") == 0) + // trying to detect amogos because in its os-release file ID value is just "debian" + if (strcmp(version_name, "debian") == 0) + { + DIR *amogos_plymouth = opendir("/usr/share/plymouth/themes/amogos"); + if (amogos_plymouth) { - DIR *amogos_plymouth = opendir("/usr/share/plymouth/themes/amogos"); - if (amogos_plymouth) - { - closedir(amogos_plymouth); - sprintf(version_name, "amogos"); - } + closedir(amogos_plymouth); + sprintf(version_name, "amogos"); } - if (host_model_info) + } + if (host_model_info) + { + while (fgets(line, sizeof(line), host_model_info)) + if (sscanf(line, "%[^\n]", host_model)) + break; + if (host_model_version) { - while (fgets(line, sizeof(line), host_model_info)) - if (sscanf(line, "%[^\n]", host_model)) - break; - if (host_model_version) + char version[32]; + while (fgets(line, sizeof(line), host_model_version)) { - char version[32]; - while (fgets(line, sizeof(line), host_model_version)) + if (sscanf(line, "%[^\n]", version)) { - if (sscanf(line, "%[^\n]", version)) - { - strcat(host_model, " "); - strcat(host_model, version); - break; - } + strcat(host_model, " "); + strcat(host_model, version); + break; } } } } while (fgets(line, sizeof(line), cpuinfo)) + { #ifdef __FREEBSD__ if (sscanf(line, "hw.model: %[^\n]", cpu_model)) #else if (sscanf(line, "model name : %[^\n]", cpu_model)) -#endif break; +#endif // __FREEBSD__ + } char *tmp_user = getenv("USER"); if (tmp_user == NULL) sprintf(user, "%s", ""); else sprintf(user, "%s", tmp_user); - if (iscygwin == 0) - fclose(os_release); + fclose(os_release); } else { // try for android vars, next for macOS var, or unknown system @@ -682,11 +757,11 @@ void get_info() closedir(system_priv_app); sprintf(version_name, "android"); // android vars - FILE *whoami = popen("whoami", "r"); + FILE *whoami = popen("whoami", "r+"); if (fscanf(whoami, "%s", user) == 3) sprintf(user, "unknown"); fclose(whoami); - host_model_info = popen("getprop ro.product.model", "r"); + host_model_info = popen("getprop ro.product.model", "r+"); while (fgets(line, sizeof(line), host_model_info)) if (sscanf(line, "%[^\n]", host_model)) break; @@ -712,7 +787,9 @@ void get_info() #ifndef __FREEBSD__ fclose(cpuinfo); #endif +#ifndef __WINDOWS__ gethostname(host, 256); + // #endif // __WINDOWS__ char *tmp_shell = getenv("SHELL"); if (tmp_shell == NULL) sprintf(shell, "%s", ""); @@ -720,64 +797,124 @@ void get_info() sprintf(shell, "%s", tmp_shell); if (strlen(shell) > 16) memmove(&shell, &shell[27], strlen(shell)); // android shell was too long, this works only for termux - +#else + cpuinfo = popen("wmic cpu get caption", "r"); + while (fgets(line, sizeof(line), cpuinfo)) + { + if (strstr(line, "Caption") != 0) + continue; + else + { + sprintf(cpu_model, "%s", line); + cpu_model[strlen(cpu_model) - 2] = '\0'; + break; + } + } + FILE *user_host_fp = popen("wmic computersystem get username", "r"); + while (fgets(line, sizeof(line), user_host_fp)) + { + if (strstr(line, "UserName") != 0) + continue; + else + { + sscanf(line, "%[^\\]%s", host, user); + memmove(user, user + 1, sizeof(user) - 1); + break; + } + } + FILE *shell_fp = popen("powershell $PSVersionTable", "r"); + sprintf(shell, "PowerShell "); + char tmp_shell[64]; + while (fgets(line, sizeof(line), shell_fp)) + if (sscanf(line, "PSVersion %s", tmp_shell) != 0) + break; + strcat(shell, tmp_shell); +#endif // __WINDOWS__ // truncate CPU name truncate_name(cpu_model); - // system resources +// system resources +#ifndef __WINDOWS__ uname(&sys_var); +#endif // __WINDOWS__ #ifndef __APPLE__ #ifndef __FREEBSD__ +#ifndef __WINDOWS__ sysinfo(&sys); // somehow this function has to be called again in print_info() +#else // __WINDOWS__ + GetSystemInfo(&sys); +#endif // __WINDOWS__ #endif #endif +#ifndef __WINDOWS__ truncate_name(sys_var.release); sprintf(kernel, "%s %s %s", sys_var.sysname, sys_var.release, sys_var.machine); truncate_name(kernel); +#else // __WINDOWS__ + sprintf(version_name, "windows"); + FILE *kernel_fp = popen("wmic computersystem get systemtype", "r"); + while (fgets(line, sizeof(line), kernel_fp)) + { + if (strstr(line, "SystemType") != 0) + continue; + else + { + sprintf(kernel, "%s", line); + kernel[strlen(kernel) - 2] = '\0'; + break; + } + } + if (kernel_fp != NULL) + pclose(kernel_fp); +#endif // __WINDOWS__ - // ram +// ram #ifndef __APPLE__ -#ifndef __CYGWIN__ +#ifdef __WINDOWS__ + FILE *mem_used_fp = popen("wmic os get freevirtualmemory", "r"); + FILE *mem_total_fp = popen("wmic os get totalvirtualmemorysize", "r"); + char mem_used_ch[2137] = {0}, mem_total_ch[2137] = {0}; + + while (fgets(mem_total_ch, sizeof(mem_total_ch), mem_total_fp) != NULL) + { + if (strstr(mem_total_ch, "TotalVirtualMemorySize") != 0) + continue; + else if (strstr(mem_total_ch, " ") == 0) + continue; + else + ram_total = atoi(mem_total_ch) / 1024; + } + while (fgets(mem_used_ch, sizeof(mem_used_ch), mem_used_fp) != NULL) + { + if (strstr(mem_used_ch, "FreeVirtualMemory") != 0) + continue; + else if (strstr(mem_used_ch, " ") == 0) + continue; + else + ram_used = ram_total - (atoi(mem_used_ch) / 1024); + } + pclose(mem_used_fp); + pclose(mem_total_fp); +#else FILE *meminfo; #ifdef __FREEBSD__ - meminfo = popen("LANG=EN_us freecolor -om 2> /dev/null", "r"); + meminfo = popen("LANG=EN_us freecolor -om 2> /dev/null", "r+"); #else - meminfo = popen("LANG=EN_us free -m 2> /dev/null", "r"); + meminfo = popen("LANG=EN_us free -m 2> /dev/null", "r+"); #endif while (fgets(line, sizeof(line), meminfo)) // free command prints like this: "Mem:" total used free shared buff/cache available sscanf(line, "Mem: %d %d", &ram_total, &ram_used); fclose(meminfo); -#else - // wmic OS get FreePhysicalMemory - - FILE *mem_used_fp, *mem_total_fp; - mem_used_fp = popen("wmic OS GET FreePhysicalMemory | sed -n 2p", "r"); - mem_total_fp = popen("wmic ComputerSystem GET TotalPhysicalMemory | sed -n 2p", "r"); - char mem_used_ch[2137], mem_total_ch[2137]; - while (fgets(mem_used_ch, sizeof(mem_used_ch), mem_used_fp) != NULL) - while (fgets(mem_total_ch, sizeof(mem_total_ch), mem_total_fp) != NULL) - ; - - pclose(mem_used_fp); - pclose(mem_total_fp); - - int mem_used = atoi(mem_used_ch); - - ram_used = mem_used / 1024; - - // I couldn't get it to show the total amount of ram correctly, so for now this cursed method here - ram_total = mem_total_ch; - ram_total = ram_total * -1; #endif #else // Used FILE *mem_wired_fp, *mem_active_fp, *mem_compressed_fp; - mem_wired_fp = popen("vm_stat | awk '/wired/ { printf $4 }' | cut -d '.' -f 1", "r"); - mem_active_fp = popen("vm_stat | awk '/active/ { printf $3 }' | cut -d '.' -f 1", "r"); - mem_compressed_fp = popen("vm_stat | awk '/occupied/ { printf $5 }' | cut -d '.' -f 1", "r"); + mem_wired_fp = popen("vm_stat | awk '/wired/ { printf $4 }' | cut -d '.' -f 1", "r+"); + mem_active_fp = popen("vm_stat | awk '/active/ { printf $3 }' | cut -d '.' -f 1", "r+"); + mem_compressed_fp = popen("vm_stat | awk '/occupied/ { printf $5 }' | cut -d '.' -f 1", "r+"); char mem_wired_ch[2137], mem_active_ch[2137], mem_compressed_ch[2137]; while (fgets(mem_wired_ch, sizeof(mem_wired_ch), mem_wired_fp) != NULL) { @@ -805,10 +942,12 @@ void get_info() #endif /* ---------- gpu ---------- */ - int gpun = 0; // number of the gpu that the program is searching for to put in the array + int gpun = 0; // number of the gpu that the program is searching for to put in the array +#ifndef __WINDOWS__ setenv("LANG", "en_US", 1); // force language to english +#endif // __WINDOWS__ FILE *gpu; - gpu = popen("lshw -class display 2> /dev/null", "r"); + gpu = popen("lshw -class display 2> /dev/null", "r+"); // add all gpus to the array gpu_model while (fgets(line, sizeof(line), gpu)) @@ -821,17 +960,17 @@ void get_info() if (strcmp(version_name, "android") != 0) { #ifndef __APPLE__ -#ifdef __CYGWIN__ - gpu = popen("wmic PATH Win32_VideoController GET Name | sed -n 2p", "r"); +#ifdef __WINDOWS__ + gpu = popen("wmic PATH Win32_VideoController GET Name | sed -n 2p", "r+"); #else - gpu = popen("lspci -mm 2> /dev/null | grep \"VGA\" | awk -F '\"' '{print $4 $5 $6}'", "r"); + gpu = popen("lspci -mm 2> /dev/null | grep \"VGA\" | awk -F '\"' '{print $4 $5 $6}'", "r+"); #endif #else - gpu = popen("system_profiler SPDisplaysDataType | awk -F ': ' '/Chipset Model: /{ print $2 }'", "r"); + gpu = popen("system_profiler SPDisplaysDataType | awk -F ': ' '/Chipset Model: /{ print $2 }'", "r+"); #endif } else - gpu = popen("getprop ro.hardware.vulkan 2> /dev/null", "r"); + gpu = popen("getprop ro.hardware.vulkan 2> /dev/null", "r+"); } // get all the gpus @@ -850,7 +989,7 @@ void get_info() } // Resolution - FILE *resolution = popen("xwininfo -root 2> /dev/null | grep -E 'Width|Height'", "r"); + FILE *resolution = popen("xwininfo -root 2> /dev/null | grep -E 'Width|Height'", "r+"); while (fgets(line, sizeof(line), resolution)) { sscanf(line, " Width: %d", &screen_width); @@ -916,7 +1055,11 @@ void replace_ignorecase(char *original, char *search, char *replacer) { char *ch; char buffer[1024]; +#ifndef __WINDOWS__ while ((ch = strcasestr(original, search))) +#else + while ((ch = strstr(original, search))) +#endif // __WINDOWS__ { strncpy(buffer, original, ch - original); buffer[ch - original] = 0; @@ -934,7 +1077,7 @@ void print_ascii() 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"); + file = fopen(ascii_file, "r+"); // Now tries to get file from normal directory if (!file) { @@ -946,7 +1089,7 @@ void print_ascii() { sprintf(ascii_file, "/usr/lib/uwufetch/ascii/%s.txt", version_name); } - file = fopen(ascii_file, "r"); + file = fopen(ascii_file, "r+"); if (!file) { // Prevent infinite loops @@ -967,6 +1110,7 @@ void print_ascii() replace(line, "{BLACK}", BLACK); replace(line, "{RED}", RED); replace(line, "{GREEN}", GREEN); + replace(line, "{SPRING_GREEN}", SPRING_GREEN); replace(line, "{YELLOW}", YELLOW); replace(line, "{BLUE}", BLUE); replace(line, "{MAGENTA}", MAGENTA); @@ -974,7 +1118,9 @@ void print_ascii() replace(line, "{WHITE}", WHITE); replace(line, "{PINK}", PINK); replace(line, "{LPINK}", LPINK); - // For manjaro and amogos + // For manjaro and amogos and windows + replace(line, "{BLOCK}", "\xdc"); + replace(line, "{BLOCK_VERTICAL}", "\xdb"); replace(line, "{BACKGROUND_GREEN}", "\e[0;42m"); replace(line, "{BACKGROUND_RED}", "\e[0;41m"); replace(line, "{BACKGROUND_WHITE}", "\e[0;47m"); @@ -983,254 +1129,6 @@ void print_ascii() // 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) - { - printf("\033[2E\033[4C%s. .___.\n" - " / \\/ \\ /\n" - " /O\u03c9O\\ɛU\\/ __\n" - " / \\ \\__/ \\\n" - "/ \\ \\\n\n\n", - BLUE); - } - else if (strcmp(version_name, "arch") == 0) - { - printf("\033[1E\033[8C%s/\\\n" - " / \\\n" - " /\\ \\\n" - " / > \u03c9 <\\\n" - " / __ \\\n" - " / __| |__-\\\n" - " /_-'' ''-_\\\n\n", - BLUE); - } - else if (strcmp(version_name, "artix") == 0) - { - printf("\033[1E\033[8C%s/\\\n" - " / \\\n" - " /`'.,\\\n" - " /\u2022 w \u2022 \\\n" - " / ,`\\\n" - " / ,.'`. \\\n" - " /.,'` `'.\\\n\n", - BLUE); - } - else if (strcmp(version_name, "debian") == 0) - { - printf("\033[1E\033[6C%s______\n" - " / ___ \\\n" - " | / O\u03c9O |\n" - " | \\____-\n" - " -_\n" - " --_\n\n\n", - RED); - } - else if (strcmp(version_name, "endeavouros") == 0 || strcmp(version_name, "EndeavourOS") == 0) - { - printf("\033[2E\033[8C%s/\\\n" - " %s/%s/ \\%s\\\n" - " %s/%s/>\u03c9<\\%s\\\n" - " %s/%s/ \\ %s\\\n" - " %s/ %s/ _) %s) \n" - " %s/_%s/___-- %s___-\n" - " /____---\n\n", - MAGENTA, RED, MAGENTA, BLUE, RED, MAGENTA, BLUE, RED, MAGENTA, BLUE, RED, MAGENTA, BLUE, RED, MAGENTA, BLUE); - } - else if (strcmp(version_name, "fedora") == 0) - { - printf("\033[1E\033[8C%s_____\n" - " / __)%s\\\n" - " %s> %s| / %s<%s\\ \\\n" - " __%s_| %s\u03c9%s|_%s_/ /\n" - " / %s(_ _)%s_/\n" - " / / %s| |\n" - " %s\\ \\%s__/ |\n" - " %s\\%s(_____/\n", - BLUE, CYAN, WHITE, BLUE, WHITE, CYAN, BLUE, CYAN, BLUE, CYAN, BLUE, CYAN, BLUE, CYAN, BLUE, CYAN, BLUE); - } - else if (strcmp(version_name, "gentoo") == 0) - { - printf("\033[1E\033[3C%s_-----_\n" - " ( \\\n" - " \\ O\u03c9O \\\n" - "%s \\ )\n" - " / _/\n" - " ( _-\n" - " \\____-\n\n", - MAGENTA, WHITE); - } - else if (strcmp(version_name, "gnu") == 0 || strcmp(version_name, "guix") == 0) - { - printf("\033[3E\033[3C%s,= %s,-_-. %s=.\n" - " ((_/%s)%sU U%s(%s\\_))\n" - " `-'%s(. .)%s`-'\n" - " %s\\%sw%s/\n" - " \u00af\n\n", - WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW); - } - else if (strcmp(version_name, "manjaro") == 0 || strcmp(version_name, "manjaro-arm") == 0) - { - printf("\033[0E\033[1C\u25b3 \u25b3 \u25e0\u25e0\u25e0\u25e0\n" - " \e[0;42m \e[0m \e[0;42m \e[0m\n" - " \e[0;42m \e[0m\e[0;42m\e[1;30m > \u03c9 < \e[0m\e[0;42m \e[0m \e[0;42m \e[0m\n" - " \e[0;42m \e[0m \e[0;42m \e[0m\n" - " \e[0;42m \e[0m \e[0;42m \e[0m \e[0;42m \e[0m\n" - " \e[0;42m \e[0m \e[0;42m \e[0m \e[0;42m \e[0m\n" - " \e[0;42m \e[0m \e[0;42m \e[0m \e[0;42m \e[0m\n" - " \e[0;42m \e[0m \e[0;42m \e[0m \e[0;42m \e[0m\n"); - } - else if (strcmp(version_name, "linuxmint") == 0) - { - printf("\033[2E\033[4C%s__/\\____/\\.\n" - " |%s.--. %s|\n" - " %s, %s¯| %s| U\u03c9U| %s|\n" - " %s|| %s| %s| | %s|\n" - " %s | %s| %s---- %s|\n" - " %s --%s'--------'\n\n", - GREEN, WHITE, GREEN, WHITE, - GREEN, WHITE, GREEN, WHITE, GREEN, WHITE, GREEN, WHITE, - GREEN, WHITE, GREEN, WHITE, GREEN); - } - else if (strcmp(version_name, "opensuse-leap") == 0 || strcmp(version_name, "opensuse-tumbleweed") == 0) - { - printf("\033[3E\033[3C%s|\\----/|\n" - " _ / %sO O%s\\\n" - " __. \u03c9 /\n" - " '----'\n\n\n", - GREEN, WHITE, GREEN); - } - else if (strcmp(version_name, "pop") == 0) - { - printf("\033[2E\033[6C%s|\\.-----./|\n" - " |/ \\|\n" - " | > < |\n" - " | %s~ %sP! %s~ %s|\n" - "_ ---\\ \u03c9 /\n" - " \\_/ '-----'\n\n", - BLUE, LPINK, WHITE, LPINK, BLUE); - } - else if (strcmp(version_name, "raspbian") == 0) - { - printf("\033[0E\033[6C%s__ __\n" - " (_\\)(/_)\n" - " %s(>(__)<)\n" - " (_(_)(_)_)\n" - " (_(__)_)\n" - " (__)\n\n\n", - GREEN, RED); - } - else if (strcmp(version_name, "slackware") == 0) - { - printf("\033[2E\033[6C%s|\\.-----./|\n" - " |/ \\|\n" - " | > < |\n" - " | %s~ %sS %s~ %s|\n" - "_ ---\\ \u03c9 /\n" - " \\_/ '-----'\n\n", - MAGENTA, LPINK, WHITE, LPINK, MAGENTA); - } - else if (strcmp(version_name, "solus") == 0) - { - printf("\033[2E\033[6C%s|\\.-----./|\n" - " | \\ / |\n" - " |/ > <\\ |\n" - " |%s_%s~%s_____%s~%s\\|\n" - "%s_ ---\\ %sω %s/\n" - " \\_/ '-----'\n\n", - WHITE, BLUE, LPINK, BLUE, LPINK, WHITE, BLUE, WHITE, BLUE); - } - else if (strcmp(version_name, "ubuntu") == 0) - { - printf("\033[1E\033[9C%s_\n" - " %s\u25E3%s__(_)%s\u25E2%s\n" - " _/ --- \\\n" - " (_) |>\u03c9<| |\n" - " \\ --- _/\n" - " %sC__/%s---(_)\n\n\n", - LPINK, PINK, LPINK, PINK, LPINK, PINK, LPINK); - } - else if (strcmp(version_name, "void") == 0) - { - printf("\033[2E\033[2C%s |\\_____/|\n" - " _\\____ |\n" - " | \\ \\ |\n" - " | | %s\u00d2\u03c9\u00d3 %s| | ,\n" - " | \\_____\\_|-, |\n" - " -_______\\ \\_/\n\n", - GREEN, WHITE, GREEN); - } - else if (strcmp(version_name, "android") == 0) - { // android at the end because it could be not considered as an actual distribution of gnu/linux - printf("\033[2E\033[3C%s\\ _------_ /\n" - " / \\\n" - " | %s~ %s> \u03c9 < %s~ %s|\n" - " ------------\n\n\n\n", - GREEN, RED, GREEN, RED, GREEN); - } - - // BSD - else if (strcmp(version_name, "freebsd") == 0) - { - printf("\033[2E\033[1C%s/\\,-'''''-,/\\\n" - " \\_) (_/\n" - " | \\ / |\n" - " | O \u03c9 O |\n" - " ; ;\n" - " '-_____-'\n\n", - RED); - } - else if (strcmp(version_name, "openbsd") == 0) - { - printf("\033[1E\033[3C%s ______ \n" - " \\- -/ %s\u2665 \n" - "%s\\_/ \\ \n" - "| %s> < %s| \n" - "|_ < %s// %s\u03c9 %s// \n" - "%s/ \\ / \n" - " /-________-\\ \n\n", - YELLOW, RED, YELLOW, WHITE, YELLOW, LPINK, WHITE, LPINK, YELLOW); - } - - else if (strcmp(version_name, "macos") == 0) - { - printf("\033[1E\033[3C%s .:`\n" - " .--``--.\n" - "%s ww O\u03c9O w\n" - "%s w w\n" - "%s w w\n", - GREEN, YELLOW, RED, PINK); - if (!show_pkgs) - printf("%s w w", BLUE); - printf("\n%s www_-_www\n\n", BLUE); - } - - // Windows - else if (strcmp(version_name, "windows") == 0) - { - printf("%sMMMMMMM MMMMMMM\n" - "M ^ M M ^ M\n" - "M M M M\n" - "MMMMMMM MMMMMMM\n" - "\n" - "MMMMMMM MMMMMMM\n" - "M W W W M\n" - "M WW WW M\n" - "MMMMMMM MMMMMMM\n", - BLUE); - } - - // everything else - else - printf("\033[0E\033[2C%s._.--._.\n" - " \\|>%s_%s< |/\n" - " |%s:_/%s |\n" - " // \\ \\ ?\n" - " (| | ) /\n" - " %s/'\\_ _/`\\%s-\n" - " %s\\___)=(___/\n\n", - WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW, WHITE, YELLOW);*/ } void print_image() @@ -1276,6 +1174,27 @@ void usage(char *arg) arg, BLUE, NORMAL); } +#ifdef __WINDOWS__ +// windows sucks and hasn't a strstep, so I copied one from https://stackoverflow.com/questions/8512958/is-there-a-windows-variant-of-strsep-function +char *strsep(char **stringp, const char *delim) +{ + char *start = *stringp; + char *p; + + p = (start != NULL) ? strpbrk(start, delim) : NULL; + + if (p == NULL) + *stringp = NULL; + else + { + *p = '\0'; + *stringp = p + 1; + } + + return start; +} +#endif + void uwu_kernel() { #define KERNEL_TO_UWU(str, original, uwufied) \ diff --git a/uwufetch.exe b/uwufetch.exe new file mode 100644 index 0000000000000000000000000000000000000000..e441f3abfb98c9dc03bc1bc06d1c5086ea96ac90 GIT binary patch literal 196082 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

-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 z zbM_D*2d;)kdj66=rrwe`=s;iS7;t>S=uv+tt_KJ7V0;+8piF-(aSW?aIvE}X^NnW`Q50ly zl&X@-36DgJqeUJkM~<-PqtsJC!^P70gL$4~ zr2INw+a$+2%Bp-H9!=)Rbqk#&wjcJvCFIEg}-H{5qKhs4E66DFJAu)aQlnJRt=hn?P)5>WOG%~y%tFuVVVi$uYI;R8~ z2AVi-V+uSO$q}a-byM@~sMTvhQ%rRm=E4z0oFfM*q8FzRL>xZ5!1qU2@{u$Rs`*Wy zUXWi@<^_2tx^mafojZ1-T^&s()9BP80!;+YmPZ!t{= z)A7=G9`W8^3JCj5|23=cp78`tn0Kr4fh{yo^^TCxpw^Lf;+?QjZ?v1U{7UVFt z;Cy%M(&?a&7SCX8$_e$~ivB=$^sv~7=Nye^vNV6f zje$-E!**PyV3DZ?^!{>jYW^^pkaYX;qHw17O-c`r;~#4ZvSOJ>VNmxI{pp(%nBVG8 zzI8N?;hn(aj)5O~1c1XOOt=!NoKb#%J1Q9m;dg;U}sKgdC?0F=(Ezlf~ zM3RdVd@7mm;Pp&UqM!-oGp!;4JgrDAN(=)Cnvipn>H6VVE6tAzG$cyV9#EIN8U=Dj zG%SQ5G|wt0F{c}*diG(=a!uoy6lKjuy&9mRQ82WJQffnVXH*No)$AK`uNG{C@sJvpz#GP~%%=w%-Iw4$vGGBl5WRG z8g&Pz0cnIJvqgFnLo?}w+!<Z|B5YwTn!nor>4yFy=jsF?yB{MnuB`Z_8^j zrVq2Y_FPcpU1xYH+7OQl8)F!CVg}jQ3d=nxu0W1|@PS-H`Tb}IMl)F`fqzY577_Oc za>CIg#A}{%iY>L>u0nZ)ugk{0G~^&(GhLm*l=oP?|41boK7A&ayiny38XoFxU`AJF z9wfQIXv*^Ee!1UrRU{_;T*=jPhsbC;nih5|W^ElzwV-@xYEO1l{Qg?5d%Ki#BiLM> z*RuF3mB8bJ3o1K4<3g^0XC%M##8CSCdE+WNVN~|yqy&E@y;nN=tUe|`{R17X`ncl4 zTtHOzRE|cYNi?WXwlpYFF`{`4U3~5c)M||&S+JgH1x1DlCljX$kb*rV^6VHlj3r{c zC#z)8y^h?lFV*RGe9@J{`iI}z(JS@O8cQz=uNU=Z^4xywaP}xQ<*4~y$5rbjD4oL) zeACa~YLL{c*bj*b8JaD|{utGr@zuftMXPo0&`Ll-B(7?Cx<}mRNXDS>X!Tp5sjZS( z-q&~4=dauXQGUlj-3BS1a-ynRkm|w`HF^fJ2}nn|7kBeM)r>HWz%Xf&@4{N#Nqob9 z`pX6iF+Cj&!L24hm}2xmT2lKbW%h^SiNT>9n~pb_qy3G=)8rrN)LE%W**PPk?vx}n z#Cxb(n;_I_3^oK9f01wMbV2Se{&@)vnIw;V7&%L2;L7C{bYZ&F^Y?NDTXO%HK*MO= z$&KVNS1Y9v-k3$8NlxKqEeq9Hq4thHVeh z<`g4IOpXx>+d6gU^F%>MS`6e#F0sp8Qt}P$r|6nc5^8hxbq>8_<{z904#6lj&}+C zO;@2|4H+%<0rVlLe~?I7lp9ISo+)J32Y+bvv4l$=7z?BB>s0R3)d(CP)k?YU&8rfZ zO6UYe&Ubw0HJm>0?RB@b!B^fqm#Wo*nR3!JaKS7zs-H8E>>m_EV9GVsEo}GkgmnAT z9*EnPDlS=q;wug6KMx(r=CDFfGj4fJA9aoZ71d7p;h~lkoI(mK^yDw7*FBmhC!*$E zvr=eokK~wgJWg3u-xmpyfoiIdYeG&mD+#rVJXOEN zQ>NB`5j4a{le}7CZAUC1yZvn1wjt28agaw)ZVizMrt7_%^+|nTCi9}oxbQp#U!j*u zAtMq6=*^{Fd`v>>6Z^*+Zn2UA<)%m4rY literal 0 HcmV?d00001