Reworked quite a lot

This commit is contained in:
Јован Ђокић-Шумарац 2021-05-26 12:23:42 +02:00
parent 54491b7e71
commit 167bf81633
4 changed files with 283 additions and 360 deletions

View file

@ -1,7 +1,7 @@
PREFIX = /usr/local
CC = gcc
CFLAGS = -lm
CFLAGS = -lm -g -O0
all: fetchy

BIN
fetchy

Binary file not shown.

224
fetchy.c
View file

@ -2,71 +2,76 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <dirent.h>
#include <dirent.h> // directory management
#define BUF_SIZE 50
#define COLS 8
#define ROWS 100
#define SUPPORTED_OS "xadurm"
#define ARCH_BASED "axmr"
#define DEBIAN_BASED "du"
void truncate_spaces_leading(char *str);
void truncate_spaces_trailing(char *str);
#include "logos.h"
void truncate_spaces(char *str);
void read_line(char x);
void cache_info(char *cache_path, char **cpu_name, char **gpu);
void cache_info(char *cache_path, char **cpu_name, char **gpu, char *os_table);
static int count_files(DIR *package_dir);
static char *get_sys(char *ascii, char *sys, char *os_name);
static char *get_sys(char *s_os, char *os_name, char *os_table);
static char *get_kernel(char *kern_name);
static char *get_uptime(char *uptime);
static char *get_RAM(char *ram_info);
static char *get_cpu(char *cpuname);
static char *get_gpu(char *gpu);
static char *get_packages(char *package_count, char sys);
static char *get_packages(char *package_count);
void concatenate_and_print(char ascii, char sys, char *os, char *cpu_name, char *gpu);
void concatenate_print(char *os, char *cpu_name, char *gpu);
char sys;
int logo_number = 0;
int main(int argc, char *argv[]){
char sys, ascii,
*os_name = NULL,
char *os_name = NULL,
*cpu_name = NULL,
*gpu = NULL,
*os = malloc(BUF_SIZE),
*cache_path = malloc(BUF_SIZE * 2);
cache_info(cache_path, &cpu_name, &gpu);
os = get_sys(&ascii, &sys, os_name);
if ( argv[1] != NULL ){
switch ( *(argv[1] + 1) ){
case 'a':
case 'x':
case 'r':
case 'u':
case 'd':
case 'm':
case 'o':
case 'v':
ascii = *(argv[1] + 1) ;
break;
*os_table = malloc(BUF_SIZE * 2),
*cache_path = malloc(BUF_SIZE * 2),
*s_os = SUPPORTED_OS;
default:
printf("\n\nArgument not supported\n\n");
cache_info(cache_path, &cpu_name, &gpu, os_table);
os = get_sys(s_os, os_name, os_table);
if ( argv[1] != NULL ) {
if ( strchr(SUPPORTED_OS, *(argv[1] + 1)) )
logo_number = (int) (strchr(s_os, *(argv[1] + 1) ) - s_os);
else {
fprintf(stderr, "\n\nArgument not supported\n\n");
exit(EXIT_FAILURE);
}
}
}
//This one is in logos.h
concatenate_and_print(ascii, sys, os, cpu_name, gpu);
concatenate_print( os, cpu_name, gpu);
@ -76,23 +81,23 @@ int main(int argc, char *argv[]){
free(cache_path);
return 0;
return EXIT_SUCCESS;
}
void read_line(char x){
void read_line(char x) {
int c;
while (( c = getchar()) != x && c != EOF) { }
}
// taken from https://github.com/ss7m/paleofetch
void truncate_spaces_leading(char *str){
int src = 0, dst = 0;
void truncate_spaces(char *str) {
int src = 0, dst = 0, index, i = -1;
while(*(str + dst) == ' ') dst++;
while(*(str + dst) != '\0') {
@ -104,14 +109,6 @@ void truncate_spaces_leading(char *str){
}
*(str + src) = '\0';
}
void truncate_spaces_trailing(char *str){
int index, i = -1;
i = 0;
while(str[i] != '\0'){
@ -127,8 +124,7 @@ void truncate_spaces_trailing(char *str){
void cache_info(char *cache_path, char **cpu_name, char **gpu){
void cache_info(char *cache_path, char **cpu_name, char **gpu, char *os_table) {
snprintf(cache_path, BUF_SIZE * 2, "%s/.local/share/fetchy.cache", getenv("HOME"));
FILE *FCache = NULL;
@ -140,12 +136,14 @@ void cache_info(char *cache_path, char **cpu_name, char **gpu){
char *line = malloc(BUF_SIZE * 4);
fgets(line, BUF_SIZE * 4, FCache);
truncate_spaces(line);
snprintf(*cpu_name, BUF_SIZE * 4, "\x1b[36mCPU\x1b[0m -> %s", strchr(line, ':') +2);
truncate_spaces_trailing(*cpu_name);
fgets(line, BUF_SIZE * 4, FCache);
truncate_spaces(line);
snprintf(*gpu, BUF_SIZE * 4, "\x1b[36mGPU\x1b[0m -> %s", strchr(line, ':') +2);
truncate_spaces_trailing(*gpu);
fgets(os_table, BUF_SIZE * 2, FCache);
fclose(FCache);
free(line);
@ -163,18 +161,25 @@ void cache_info(char *cache_path, char **cpu_name, char **gpu){
fprintf(FCache, "CPU : %s\n", get_cpu(*cpu_name));
fprintf(FCache, "GPU : %s\n", get_gpu(*gpu));
fprintf(FCache, "a:Arch|x:Artix|r:Arco|m:Manjaro|u:Ubuntu|d:Debian\n");
fclose(FCache);
printf("\n\aFILE CACHING DONE!! \n\nValues returned : \nCPU -> %s\nGPU -> %s\n\n Caching occurs only once, every subsequent execution will run program normally. Enjoy!\n\n", get_cpu(*cpu_name), get_gpu(*gpu));
free(*cpu_name); free(*gpu);
exit(0);
printf("\n FILE CACHING DONE!!\n");
printf("Caching occurs only once,\n");
printf("every subsequent execution will\n");
printf("run program normally. Enjoy!\n\n");
cache_info(cache_path, cpu_name, gpu, os_table);
}
}
static int count_files(DIR *package_dir){
static int count_files(DIR *package_dir) {
struct dirent * entry;
int file_count = 0;
@ -192,58 +197,29 @@ static int count_files(DIR *package_dir){
static char *get_sys(char *ascii, char *sys, char *os_name){
static char *get_sys(char *s_os, char *os_name, char *os_table) {
os_name = malloc(BUF_SIZE);
char *name = malloc(BUF_SIZE);
FILE *sysName = fopen("/etc/issue", "rt");
if( sysName == NULL ){
printf("\nCan't get os name\n");
fprintf(stderr, "\nCan't get os name\n");
exit(EXIT_FAILURE);
}
fscanf(sysName, "%s ", name);
fclose(sysName);
truncate_spaces_leading(name);
if ( !strcmp( name, "Artix") ) {
*sys = 'x';
*ascii = 'x';
}
if ( !strcmp( name, "Arch") ) {
*sys = 'a';
*ascii = 'a';
}
truncate_spaces(name);
if ( !strcmp( name, "Manjaro") ) {
*sys = 'm';
*ascii = 'm';
}
sys = *(strstr(os_table, name) - 2);
logo_number = (int) (strchr(s_os, sys) - s_os);
if ( !strcmp( name, "ArcoLinux") ) {
*sys = 'r';
*ascii = 'r';
}
if ( !strcmp( name, "Debian")) {
*sys = 'd';
*ascii = 'd';
}
if ( !strcmp( name, "Ubuntu")) {
*sys = 'u';
*ascii = 'u';
}
if( *sys == 'r' )
if( sys == 'r' )
snprintf(os_name, BUF_SIZE, "\x1b[36mOS\x1b[0m -> %s", name);
else
snprintf(os_name, BUF_SIZE, "\x1b[36mOS\x1b[0m -> %s Linux", name);
@ -254,7 +230,6 @@ static char *get_sys(char *ascii, char *sys, char *os_name){
static char *get_cpu(char *cpu_name){
char *line = malloc(BUF_SIZE * 4);
@ -273,7 +248,7 @@ static char *get_cpu(char *cpu_name){
fgets(line, BUF_SIZE * 4, cpu);
snprintf(cpu_name, BUF_SIZE * 4, "%s", strchr(line, ':') +2);
truncate_spaces_trailing(cpu_name);
truncate_spaces(cpu_name);
fclose(cpu);
free(line);
@ -291,8 +266,8 @@ static char *get_gpu(char *gpu){
fscanf(gpuName, "%[^\n]%s", gpu);
truncate_spaces_leading(gpu);
truncate_spaces_trailing(gpu);
truncate_spaces(gpu);
fclose(gpuName);
@ -322,7 +297,7 @@ static char *get_kernel(char *kern_name){
fscanf(kInfo, "Linux version %s ", kernel);
fclose(kInfo);
truncate_spaces_leading(kernel);
truncate_spaces(kernel);
snprintf(kern_name, BUF_SIZE + 5, "\x1b[36mKERN\x1b[0m -> Linux %s", kernel);
free(kernel);
@ -362,31 +337,21 @@ static char *get_uptime(char *uptime){
static char *get_packages(char *package_count, char sys){
static char *get_packages(char *package_count){
int pkg_count = 0;
package_count = malloc(BUF_SIZE);
switch (sys){
case 'r':
case 'x':
case 'a':
case 'm':
if( strchr(ARCH_BASED, sys) )
pkg_count = count_files(opendir("/var/lib/pacman/local"));
break;
case 'd':
case 'u':
else if( strchr(DEBIAN_BASED, sys) )
pkg_count = count_files(opendir("/usr/bin")) + count_files(opendir("/sbin"));
break;
default:
else{
printf("\n\n\aUnable to find package list\n\n");
exit(EXIT_FAILURE);
}
@ -419,13 +384,13 @@ static char *get_RAM(char *ram_info){
fgets(line, BUF_SIZE * 3, RAM);
truncate_spaces_leading(line);
truncate_spaces(line);
sscanf(line, " MemTotal: %f", &total);
fgets(line, BUF_SIZE * 3, RAM);
fgets(line, BUF_SIZE * 3, RAM);
truncate_spaces_leading(line);
truncate_spaces(line);
sscanf(line, " MemAvailable: %f", &free_mem);
fclose(RAM);
@ -449,4 +414,31 @@ static char *get_RAM(char *ram_info){
#include "logos.h"
void concatenate_print(char *os, char *cpu_name, char *gpu){
char *uptime = NULL,
*kern_name = NULL,
*ram_info = NULL,
*package_count = NULL;
strcat( (logo + logo_number)->logo[0], os);
strcat( (logo + logo_number)->logo[1], get_kernel(kern_name));
strcat( (logo + logo_number)->logo[2], get_uptime(uptime));
strcat( (logo + logo_number)->logo[3], get_packages(package_count));
strcat( (logo + logo_number)->logo[4], cpu_name);
strcat( (logo + logo_number)->logo[5], gpu);
strcat( (logo + logo_number)->logo[6], get_RAM(ram_info));
for(int i = 0; i < COLS ; i++)
printf("%s\n", (logo + logo_number)->logo[i]);
free(uptime);
free(ram_info);
free(kern_name);
free(package_count);
}

187
logos.h
View file

@ -1,147 +1,78 @@
void concatenate_and_print(char ascii, char sys, char *os, char *cpu_name, char *gpu){
typedef struct s_logos {
char logo[COLS][ROWS];
} t_logos;
char *uptime = NULL,
*kern_name = NULL,
*ram_info = NULL,
*package_count = NULL;
t_logos logo[6] = {
{ "\x1b[1m /\\ ",
"\x1b[1m / \\ ",
"\x1b[1m /`'.,\\ ",
"\x1b[1m / ', ",
"\x1b[1m / ,`\\ ",
"\x1b[1m / ,.'`. \\ ",
"\x1b[1m /.,'` `'.\\ "
},
switch(ascii){
case 'a':
printf("\n");
printf("\x1b[1m . %s\n", os);
printf("\x1b[1m / \\ %s\n", get_kernel(kern_name));
printf("\x1b[1m / \\ %s\n", get_uptime(uptime));
printf("\x1b[1m /^. \\ %s\n", get_packages(package_count, sys));
printf("\x1b[1m / .-. \\ %s\n", cpu_name);
printf("\x1b[1m / ( ) _\\ %s\n", gpu);
printf("\x1b[1m / _.~ ~._^\\ %s\n", get_RAM(ram_info));
printf("\x1b[1m /.^ ^.\\ \n");
printf("\n\n");
break;
case 'x':
printf("\n");
printf("\x1b[1m /\\ %s\n", os);
printf("\x1b[1m / \\ %s\n", get_kernel(kern_name));
printf("\x1b[1m /`'.,\\ %s\n", get_uptime(uptime));
printf("\x1b[1m / ', %s\n", get_packages(package_count, sys));
printf("\x1b[1m / ,`\\ %s\n", cpu_name);
printf("\x1b[1m / ,.'`. \\ %s\n", gpu);
printf("\x1b[1m /.,'` `'.\\ %s\n", get_RAM(ram_info));
printf("\n\n");
break;
case 'd':
printf("\n");
printf("\x1b[1m _____ %s\n", os);
printf("\x1b[1m / __ \\ %s\n", get_kernel(kern_name));
printf("\x1b[1m | / | %s\n", get_uptime(uptime));
printf("\x1b[1m | \\___- %s\n", get_packages(package_count, sys));
printf("\x1b[1m -_ %s\n", cpu_name);
printf("\x1b[1m --_ %s\n", gpu);
printf("\x1b[1m %s\n", get_RAM(ram_info));
printf("\n\n");
break;
case 'u':
printf("\n");
printf("\x1b[1m _ %s\n", os);
printf("\x1b[1m ---(_) %s\n", get_kernel(kern_name));
printf("\x1b[1m _/ --- \\ %s\n", get_uptime(uptime));
printf("\x1b[1m (_) | | %s\n", get_packages(package_count, sys));
printf("\x1b[1m \\ --- / %s\n", cpu_name);
printf("\x1b[1m ---(_) %s\n", gpu);
printf("\x1b[1m %s\n", get_RAM(ram_info));
printf("\n\n");
break;
{ "\x1b[1m . ",
"\x1b[1m / \\ ",
"\x1b[1m / \\ ",
"\x1b[1m /^. \\ ",
"\x1b[1m / .-. \\ ",
"\x1b[1m / ( ) _\\ ",
"\x1b[1m / _.~ ~._^\\ ",
"\x1b[1m /.^ ^.\\ "
},
case 'r':
printf("\n");
printf("\x1b[1m /\\ %s\n", os);
printf("\x1b[1m / \\ %s\n", get_kernel(kern_name));
printf("\x1b[1m / /\\ \\ %s\n", get_uptime(uptime));
printf("\x1b[1m / / \\ \\ %s\n", get_packages(package_count, sys));
printf("\x1b[1m / / \\ \\ %s\n", cpu_name);
printf("\x1b[1m / / _____\\ \\ %s\n", gpu);
printf("\x1b[1m /_/ \\`----.\\_\\ %s\n", get_RAM(ram_info));
printf("\n\n");
break;
{ "\x1b[1m _____ ",
"\x1b[1m / __ \\ ",
"\x1b[1m | / | ",
"\x1b[1m | \\___- ",
"\x1b[1m -_ ",
"\x1b[1m --_ ",
"\x1b[1m "
},
{ "\x1b[1m _ ",
"\x1b[1m ---(_) ",
"\x1b[1m _/ --- \\ ",
"\x1b[1m (_) | | ",
"\x1b[1m \\ --- / ",
"\x1b[1m ---(_) ",
"\x1b[1m "
},
case 'm':
{ "\x1b[1m /\\ ",
"\x1b[1m / \\ ",
"\x1b[1m / /\\ \\ ",
"\x1b[1m / / \\ \\ ",
"\x1b[1m / / \\ \\ ",
"\x1b[1m / / _____\\ \\ ",
"\x1b[1m /_/ \\`----.\\_\\ "
},
printf("\n");
printf("\x1b[1m ||||||||| |||| %s\n", os);
printf("\x1b[1m ||||||||| |||| %s\n", get_kernel(kern_name));
printf("\x1b[1m |||| |||| %s\n", get_uptime(uptime));
printf("\x1b[1m |||| |||| |||| %s\n", get_packages(package_count, sys));
printf("\x1b[1m |||| |||| |||| %s\n", cpu_name);
printf("\x1b[1m |||| |||| |||| %s\n", gpu);
printf("\x1b[1m |||| |||| |||| %s\n", get_RAM(ram_info));
printf("\n\n");
break;
case 'v':
printf("\n");
printf("\x1b[1m | | | | (_)(_) | | %s\n", os);
printf("\x1b[1m | | | | ___ _ ___ _____ __| | __ _ %s\n", get_kernel(kern_name));
printf("\x1b[1m | | | |/ _ \\| || \\ \\ / / _ \\ / _` |/ _` | %s\n", get_uptime(uptime));
printf("\x1b[1m \\ \\_/ / (_) | || |\\ V / (_) | (_| | (_| | %s\n", get_packages(package_count, sys));
printf("\x1b[1m \\___/ \\___/| || | \\_/ \\___/ \\__,_|\\__,_| %s\n", cpu_name);
printf("\x1b[1m _/ |/ | %s\n", gpu);
printf("\x1b[1m |__/__/ %s\n", get_RAM(ram_info));
printf("\n\n");
break;
case 'o':
printf("\n");
printf("\x1b[1m %s\n", os);
printf("\x1b[1m ______ _____ ________ ___ %s\n", get_kernel(kern_name));
printf("\x1b[1m | _ \\ _ | _ | \\/ | %s\n", get_uptime(uptime));
printf("\x1b[1m | | | | | | | | | | . . | %s\n", get_packages(package_count, sys));
printf("\x1b[1m | | | | | | | | | | |\\/| | %s\n", cpu_name);
printf("\x1b[1m | |/ /\\ \\_/ | \\_/ / | | | %s\n", gpu);
printf("\x1b[1m |___/ \\___/ \\___/\\_| |_/ %s\n", get_RAM(ram_info));
printf("\n\n");
break;
default:
printf("\n\n ERROR : Unsupported system\n\n");
exit(EXIT_FAILURE);
{ "\x1b[1m ||||||||| |||| ",
"\x1b[1m ||||||||| |||| ",
"\x1b[1m |||| |||| ",
"\x1b[1m |||| |||| |||| ",
"\x1b[1m |||| |||| |||| ",
"\x1b[1m |||| |||| |||| ",
"\x1b[1m |||| |||| |||| "
}
free(uptime);
free(ram_info);
free(kern_name);
free(package_count);
}
};