#include #include #include #include #include #define BUF_SIZE 20 void truncate_spaces(char *str); static char *get_sys(char *sys); void get_cpu(char cpu[]); void get_gpu(char gpu[]); static char *get_kernel(void); static char *get_uptime(void); static int get_packages(char sys); void get_RAM(float *total, float *used, char bar[]); char *os_name = NULL, *uptime = NULL, *kern_name = NULL; int main(int argc, char *argv[]){ char cpu[70], gpu[70], sys; char bar[] = "[----------]"; float total = 0, used = 0; //These get info get_gpu(gpu); get_cpu(cpu); get_RAM(&total, &used, bar); if ( !strcmp(argv[1], "-arch") ) { printf("\n"); printf("\x1b[1m . \x1b[36mOS\x1b[0m -> %s\n", get_sys(&sys)); printf("\x1b[1m / \\ \x1b[36mKRNL\x1b[0m -> %s\n", get_kernel()); printf("\x1b[1m / \\ \x1b[36mUPT\x1b[0m -> %s\n", get_uptime()); printf("\x1b[1m /^. \\ \x1b[36mPKGS\x1b[0m -> %d\n", get_packages(sys)); printf("\x1b[1m / .-. \\ \x1b[36m\x1b[0m \n"); printf("\x1b[1m / ( ) _\\ \x1b[36mCPU\x1b[0m -> %s\n", cpu); printf("\x1b[1m / _.~ ~._^\\ \x1b[36mGPU\x1b[0m -> %s\n", gpu); printf("\x1b[1m /.^ ^.\\ \x1b[36mRAM\x1b[0m -> %.2f GB of %.2f GB, %s -> %.2f %%\n", used / 1000000, total / 1000000, bar, (used/total) * 100); printf("\n\n"); } if ( !strcmp(argv[1], "-ubuntu") ) { printf("\n"); printf("\x1b[1m .-. \x1b[36mOS\x1b[0m -> %s\n", get_sys(&sys)); printf("\x1b[1m .-'``(|||) \x1b[36mKERNEL\x1b[0m -> %s\n", get_kernel()); printf("\x1b[1m ,`\\ \\ `-`. \x1b[36mUPTIME\x1b[0m -> %s\n", get_uptime()); printf("\x1b[1m / \\ '``-. ` \x1b[36mPACKAGES\x1b[0m -> %d\n", get_packages(sys)); printf("\x1b[1m .-. , `___: \x1b[36m\x1b[0m \n"); printf("\x1b[1m (:::) : ___ \x1b[36mCPU\x1b[0m -> %s\n", cpu); printf("\x1b[1m `-` ` , : \x1b[36mGPU\x1b[0m -> %s\n", gpu); printf("\x1b[1m \\ / ,..-` , \x1b[36mRAM\x1b[0m -> %.2f GB of %.2f GB, %s -> %.2f %%\n", used / 1000000, total / 1000000, bar, (used/total) * 100); printf("\x1b[1m `./ / .-.` \x1b[36m\x1b[0m \n"); printf("\x1b[1m `-..-( ) \x1b[36m\x1b[0m \n"); printf("\x1b[1m `-` \x1b[36m\x1b[0m \n"); printf("\n\n"); } free(os_name); free(uptime); free(kern_name); return 0; } void truncate_spaces(char *str) { int src = 0, dst = 0; while(*(str + dst) == ' ') dst++; while(*(str + dst) != '\0') { *(str + src) = *(str + dst); if(*(str + (dst++)) == ' ') while(*(str + dst) == ' ') dst++; src++; } *(str + src) = '\0'; } static char *get_sys(char *sys){ os_name = malloc(BUF_SIZE); char *name = malloc(BUF_SIZE); FILE *sysName = fopen("/etc/issue", "r"); fscanf(sysName, "%s ", name); fclose(sysName); snprintf(os_name, BUF_SIZE, "%s Linux", name ); if ( !strcmp( name, "Arch")) *sys = 'a'; if ( !strcmp( name, "Ubuntu")) *sys = 'u'; free(name); truncate_spaces(os_name); return os_name; } void get_cpu(char cpu[]){ FILE *cpuName = popen("grep -m 1 name /proc/cpuinfo | awk -F':' '{print $2}' | cut -c 2- ", "r"); fscanf(cpuName, "%[^\n]%s", cpu); fclose(cpuName); } void get_gpu(char gpu[]){ FILE *gpuName = popen("lspci -v | grep VGA -m 1 | awk -F'[' '{ print $2 }' | awk -F']' '{ print $1 }' ", "r"); fscanf(gpuName, "%[^\n]%s", gpu); fclose(gpuName); } static char *get_kernel(){ kern_name = malloc(BUF_SIZE); char *kernel = malloc(BUF_SIZE); FILE *kInfo = fopen("/proc/version", "r"); fscanf(kInfo, "Linux version %s ", kernel); fclose(kInfo); truncate_spaces(kernel); snprintf(kern_name, BUF_SIZE + 5, "Linux %s", kernel); free(kernel); return kern_name; } static char *get_uptime(void){ int sec, hr, min; FILE *FUp = fopen("/proc/uptime", "r"); uptime = malloc(BUF_SIZE); fscanf(FUp, "%d", &sec); fclose(FUp); hr = (sec/60/60%24); min = (sec/60%60); snprintf(uptime, BUF_SIZE, "%dh, %dmin", hr, min); return uptime; } static int get_packages(char sys){ DIR *packageDir; int fileCount = 0; struct dirent * entry; switch (sys){ case 'a': packageDir = opendir("/var/lib/pacman/local"); break; case 'u': break; default: printf("\n\n\aUnable to find package list\n\n"); } while ((entry = readdir(packageDir)) != NULL) { if (entry->d_type == DT_DIR) { fileCount++; } } closedir(packageDir); return fileCount; } void get_RAM(float *total, float *used, char bar[]){ int usedPercent; FILE *RAM = popen("free | grep Mem", "r"); fscanf(RAM, "Mem: %f %f ", total, used); fclose(RAM); usedPercent = round(((*used) / (*total)) * 10); for( int i = 1; i <= usedPercent; i++){ bar[i] = '*'; } } /* char *LOGO[] = { " ▄ ", " ▟█▙ ", " ▟███▙ ", " ▟█████▙ ", " ▟███████▙ ", " ▂▔▀▜██████▙ ", " ▟██▅▂▝▜█████▙ ", " ▟█████████████▙ ", " ▟███████████████▙ ", " ▟█████████████████▙ ", " ▟███████████████████▙ ", " ▟█████████▛▀▀▜████████▙ ", " ▟████████▛ ▜███████▙ ", " ▟█████████ ████████▙ ", " ▟██████████ █████▆▅▄▃▂ ", " ▟██████████▛ ▜█████████▙ ", " ▟██████▀▀▀ ▀▀██████▙ ", " ▟███▀▘ ▝▀███▙ ", " ▟▛▀ ▀▜▙ " }; */