uwufetch/fetch.h

165 lines
5.0 KiB
C

/*
* UwUfetch is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef _FETCH_H_
#define _FETCH_H_
#include <stdbool.h>
#ifdef __DEBUG__
bool* get_verbose_handle();
#ifdef LIBFETCH_INTERNAL
#define VERBOSE_ENABLED verbose_enabled
#else
#define VERBOSE_ENABLED *verbose_enabled
#endif
#define LOG_I(format, ...) LOG(0, format, ##__VA_ARGS__)
#define LOG_W(format, ...) LOG(1, format, ##__VA_ARGS__)
#define LOG_E(format, ...) LOG(2, format, ##__VA_ARGS__)
#define LOG_V(var) \
if (VERBOSE_ENABLED) { \
char format[1024] = ""; \
sprintf(format, "%s = %s", #var, \
_Generic((var), int \
: "%d", float \
: "%f", char* \
: "\"%s\"", default \
: "%p")); \
LOG(3, format, var) \
}
#define LOG(type, format, ...) \
if (VERBOSE_ENABLED) { \
char buf[2048] = ""; \
if (sizeof(#__VA_ARGS__) == sizeof("")) \
sprintf(buf, "%s", format); \
else \
sprintf(buf, format, ##__VA_ARGS__); \
fprintf(stderr, "[%s]: %s in %s:%d: %s\n", \
type == 0 ? "\033[32mINFO\033[0m" \
: type == 1 ? "\033[33mWARNING\033[0m" \
: type == 2 ? "\033[31mERROR\033[0m" \
: type == 3 ? "\033[37mVARIABLE\033[0m" \
: "", \
__func__, __FILE__, __LINE__, buf); \
}
#else
#define LOG_I(format, ...)
#define LOG_E(format, ...)
#define LOG_V(var)
#define LOG(type, format, ...)
#endif
#ifndef LIBFETCH_INTERNAL
#ifdef __APPLE__
#include <TargetConditionals.h> // for checking iOS
#endif
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#if defined(__APPLE__) || defined(__BSD__)
#include <sys/sysctl.h>
#if defined(__OPENBSD__)
#include <sys/time.h>
#else
#include <time.h>
#endif // defined(__OPENBSD__)
#else // defined(__APPLE__) || defined(__BSD__)
#ifdef __BSD__
#else // defined(__BSD__) || defined(_WIN32)
#ifndef _WIN32
#ifndef __OPENBSD__
#include <sys/sysinfo.h>
#else // __OPENBSD__
#endif // __OPENBSD__
#else // _WIN32
#include <sysinfoapi.h>
#endif // _WIN32
#endif // defined(__BSD__) || defined(_WIN32)
#endif // defined(__APPLE__) || defined(__BSD__)
#ifndef _WIN32
#include <pthread.h> // linux only right now
#include <sys/ioctl.h>
#include <sys/utsname.h>
#else // _WIN32
#include <windows.h>
#endif // _WIN32
#endif
// info that will be printed with the logo
struct info {
char user[128], // username
host[256], // hostname (computer name)
shell[64], // shell name
model[256], // model name
kernel[256], // kernel name (linux 5.x-whatever)
os_name[64], // os name (arch linux, windows, mac os)
cpu_model[256], gpu_model[256][256],
pkgman_name[64], // package managers string
image_name[128];
int target_width, // for the truncate_str function
screen_width, screen_height, ram_total, ram_used,
pkgs; // full package count
long uptime;
#ifndef _WIN32
struct utsname sys_var;
#endif // _WIN32
#ifndef __APPLE__
#ifdef __linux__
struct sysinfo sys;
#else // __linux__
#ifdef _WIN32
struct _SYSTEM_INFO sys;
#endif // _WIN32
#endif // __linux__
#endif // __APPLE__
#ifndef _WIN32
struct winsize win;
#else // _WIN32
int ws_col, ws_rows;
#endif // _WIN32
};
// Args struct for get_something thread oriented functions
struct thread_varg {
char* buffer;
struct info* user_info;
FILE* cpuinfo;
bool thread_flags[8];
};
// decide what info should be retrieved
struct flags {
bool user, shell, model, kernel, os, cpu, gpu, resolution, ram, pkgs, uptime;
};
void get_sys(struct info*);
void* get_ram(void*);
void* get_gpu(void*);
#ifdef _WIN32
void* get_res();
#else
void* get_res(void*);
#endif
void* get_pkg(void*);
void* get_model(void*);
void* get_ker(void*);
void* get_upt(void*);
// Retrieves system information
void get_info(struct flags, struct info* user_info);
#endif // _FETCH_H_