From 50dee34393fabcd8088947afce025624c07efdb5 Mon Sep 17 00:00:00 2001 From: a Date: Sun, 11 Mar 2018 21:27:33 +0100 Subject: [PATCH] . --- doc/Makefile | 33 ++++ img/pic3.png | Bin 6590 -> 0 bytes src/curses.c | 123 -------------- src/ported_or_not_included/cpu_brand.S | 64 ------- src/ported_or_not_included/not_included.c | 267 ------------------------------ 5 files changed, 33 insertions(+), 454 deletions(-) create mode 100644 doc/Makefile delete mode 100644 img/pic3.png delete mode 100644 src/curses.c delete mode 100644 src/ported_or_not_included/cpu_brand.S delete mode 100644 src/ported_or_not_included/not_included.c diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..c03429a --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,33 @@ +# 10/29/2016 + +# This program 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. + +define pandora_snap + -sed -e '15r ../README.md' 'man_template.pdc' | \ + sed -e '15,55d' | pandoc -s -S $(1) - -o pinkybar.$(2) +endef + +man: + $(call pandora_snap,-f markdown -t man,1) + +info: pinkybar.info + +pinkybar.info: + $(call pandora_snap, ,texi) + -sed -i '2i @setfilename pinkybar.info' pinkybar.texi + $(MAKEINFO) --no-validate --no-warn --force pinkybar.texi + +.PHONY: man info pinkybar.info diff --git a/img/pic3.png b/img/pic3.png deleted file mode 100644 index b70d1ba66816d0522afd06d2cbe7b732fc17cc04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6590 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 diff --git a/src/curses.c b/src/curses.c deleted file mode 100644 index 8ab5e03..0000000 --- a/src/curses.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - 09/03/2016 - - This program 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 2 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. - - Compile with: - gcc -Wall -Wextra -O2 curses.c -o pinky_curses -lncurses -*/ - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#define VLA 1000 - -void unuglify(char *); -void sighandler(int num); - -void sighandler(int num) { - (void)num; - curs_set(TRUE); - endwin(); - fprintf(stderr, "\n%s\n", "See you later"); - exit(EXIT_FAILURE); -} - -void unuglify(char *str1) { - WINDOW *win = stdscr; - uint8_t iclr = 0; - char *ptr = str1, cclr[1]; - - wmove(win, 0, 0); - wclrtoeol(win); - - for (; *ptr; ptr++) { - if ('&' == *ptr) { - cclr[0] = *(++ptr); - switch(toupper((unsigned char) *ptr)) { - case 'B': - iclr = COLOR_BLUE; - break; - case 'M': - iclr = COLOR_MAGENTA; - break; - case 'Y': - iclr = COLOR_YELLOW; - break; - default: - waddch(win, (chtype)cclr[0]); - break; - } - wattrset(win, COLOR_PAIR(COLORS + iclr + 8)); /* | A_BOLD */ - } else { - waddch(win, (chtype)*ptr); - } - } - wrefresh(win); -} - -int main(void) { - signal(SIGINT, sighandler); - - WINDOW *win = stdscr; - int16_t color_pair = 1, fg = 1, bg = 1, x = 0, z = 0; - int32_t old_x = 0, old_y = 0, new_y = 0, new_x = 0; - char buf[VLA]; - - initscr(); - noecho(); - nocbreak(); - nodelay(win, TRUE); - nonl(); - intrflush(win, FALSE); - curs_set(FALSE); - - if(FALSE == (has_colors())) { - endwin(); - return EXIT_FAILURE; - } - start_color(); - for (x = 0; x < COLORS; x++) { - for (z = 0; z < COLORS; z++) { - init_pair((int16_t)((x * COLORS) + z), x, z); - } - } - pair_content(color_pair, &fg, &bg); - getmaxyx(win, old_y, old_x); - - while (1) { - getmaxyx(win, new_y, new_x); - if (old_y != new_y || old_x != new_x) { - old_y = new_y; - old_x = new_x; - werase(win); - wrefresh(win); - } - if (NULL != (fgets(buf, VLA, stdin))) { - unuglify(buf); - } - } - endwin(); - return EXIT_SUCCESS; -} diff --git a/src/ported_or_not_included/cpu_brand.S b/src/ported_or_not_included/cpu_brand.S deleted file mode 100644 index 21aabb3..0000000 --- a/src/ported_or_not_included/cpu_brand.S +++ /dev/null @@ -1,64 +0,0 @@ -; source - https://en.wikipedia.org/wiki/CPUID -; used it to port it to pinky-bar - -.section .data - -s0 : .asciz "Processor Brand String: %.48s\n" -err : .asciz "Feature unsupported.\n" - -.section .text - -.global main -.type main,@function -.align 32 -main: - pushq %rbp - movq %rsp, %rbp - subq $48, %rsp - pushq %rbx - - movl $0x80000000, %eax - cpuid - - cmpl $0x80000004, %eax - jl error - - movl $0x80000002, %esi - movq %rsp, %rdi - -.align 16 -get_brand: - movl %esi, %eax - cpuid - - movl %eax, (%rdi) - movl %ebx, 4(%rdi) - movl %ecx, 8(%rdi) - movl %edx, 12(%rdi) - - addl $1, %esi - addq $16, %rdi - cmpl $0x80000004, %esi - jle get_brand - -print_brand: - movq $s0, %rdi - movq %rsp, %rsi - xorb %al, %al - call printf - - jmp end - -.align 16 -error: - movq $err, %rdi - xorb %al, %al - call printf - -.align 16 -end: - popq %rbx - movq %rbp, %rsp - popq %rbp - xorl %eax, %eax - ret diff --git a/src/ported_or_not_included/not_included.c b/src/ported_or_not_included/not_included.c deleted file mode 100644 index 56d0167..0000000 --- a/src/ported_or_not_included/not_included.c +++ /dev/null @@ -1,267 +0,0 @@ -/* "borrowed" from the Hacked Team */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct device_info { - struct { - char vendor[128]; - char model[128]; - char cpu[128]; - unsigned char ncpu; - } hw; - struct { - unsigned int memt; - unsigned int memf; - unsigned int diskt; - unsigned int diskf; - } stat; - struct { - char ac[16]; - unsigned char battery; - } power; - struct { - char ver[128]; - char arch[16]; - char lang[16]; - char tzname[8]; - char tzoff[8]; - } os; - struct { - char name[16]; - unsigned int uid; - unsigned int gid; - char gecos[64]; - char home[64]; - } user; - struct { - char list[1024]; - } mount; -}; - -int main(void); -void device_hw(struct device_info *di); -void device_stat(struct device_info *di); -void device_power(struct device_info *di); -void device_os(struct device_info *di); -void device_user(struct device_info *di); -void device_mount(struct device_info *di); - -int main(void) -{ - struct device_info di; - - memset(&di, 0x00, sizeof(di)); - device_hw(&di); - device_stat(&di); - device_power(&di); - device_os(&di); - device_user(&di); - device_mount(&di); - - printf("Device: %s %s\n", di.hw.vendor, di.hw.model); - printf("Processor: %u x %s\n", di.hw.ncpu, di.hw.cpu); - printf("Memory: %uMB (%u%% used)\n", di.stat.memt, 100 - di.stat.memf * 100 / di.stat.memt); - printf("Disk: %uGB (%u%% used)\n", di.stat.diskt, 100 - di.stat.diskf * 100 / di.stat.diskt); - printf("Power: AC %s - battery %%\n", di.power.ac); - printf("\n"); - printf("OS Version: Linux %s (%s)\n", di.os.ver, di.os.arch); - printf("Locale settings: %s - %s (UTC %s)\n", di.os.lang, di.os.tzname, di.os.tzoff); - printf("\n"); - printf("Mounted filesystems:\n"); - printf("%s\n", di.mount.list); - - return 0; -} - -void device_hw(struct device_info *di) -{ - FILE *fp = NULL; - char buf[128], *ptr = NULL; - - if(!(fp = fopen("/sys/devices/virtual/dmi/id/sys_vendor", "r")) || !fgets(di->hw.vendor, sizeof(di->hw.vendor), fp)) { - strncpy(di->hw.vendor, "(unknown)", sizeof(di->hw.vendor) - 1); - } - if(fp) fclose(fp); - - if(!(fp = fopen("/sys/devices/virtual/dmi/id/product_name", "r")) || !fgets(di->hw.model, sizeof(di->hw.model), fp)) { - di->hw.model[0] = '\n'; - } - if(fp) fclose(fp); - - if(di->hw.vendor[strlen(di->hw.vendor) - 1] == '\n') di->hw.vendor[strlen(di->hw.vendor) - 1] = '\0'; - while(di->hw.vendor[strlen(di->hw.vendor) - 1] == ' ') di->hw.vendor[strlen(di->hw.vendor) - 1] = '\0'; - if(di->hw.model[strlen(di->hw.model) - 1] == '\n') di->hw.model[strlen(di->hw.model) - 1] = '\0'; - while(di->hw.model[strlen(di->hw.model) - 1] == ' ') di->hw.model[strlen(di->hw.model) - 1] = '\0'; - - if(!(fp = fopen("/proc/cpuinfo", "r"))) return; - while(fgets(buf, sizeof(buf), fp)) { - if(!strncasecmp(buf, "model name", strlen("model name"))) { - if((ptr = strstr(buf, ": ") + 2)) strncpy(di->hw.cpu, ptr, sizeof(di->hw.cpu) - 1); - } else if(!strncasecmp(buf, "processor", strlen("processor"))) { - if((ptr = strstr(buf, ": ") + 2)) di->hw.ncpu = atoi(ptr) + 1; - } - } - fclose(fp); - - if((di->hw.cpu[0]) && (di->hw.cpu[strlen(di->hw.cpu) - 1] == '\n')) di->hw.cpu[strlen(di->hw.cpu) - 1] = '\0'; - - return; -} - -void device_stat(struct device_info *di) -{ - FILE *fp = NULL; - struct statvfs s; - char buf[128], *ptr = NULL; - - if((fp = fopen("/proc/meminfo", "r"))) { - while(fgets(buf, sizeof(buf), fp)) { - if(!strncasecmp(buf, "MemTotal:", strlen("MemTotal:"))) { - ptr = buf + strlen("MemTotal:"); - while(*ptr && (*ptr == ' ')) ptr++; - di->stat.memt = atoll(ptr) / 1024; - } else if(!strncasecmp(buf, "MemFree:", strlen("MemFree:"))) { - ptr = buf + strlen("MemFree:"); - while(*ptr && (*ptr == ' ')) ptr++; - di->stat.memf += atoll(ptr) / 1024; - } else if(!strncasecmp(buf, "Cached:", strlen("Cached:"))) { - ptr = buf + strlen("Cached:"); - while(*ptr && (*ptr == ' ')) ptr++; - di->stat.memf += atoll(ptr) / 1024; - } - } - fclose(fp); - } - - if(di->stat.memf > di->stat.memt) di->stat.memf = di->stat.memt; - - if((ptr = getcwd(NULL, 0))) { - if(statvfs(ptr, &s)) return; - di->stat.diskt = (unsigned int)((unsigned long long)s.f_blocks * (unsigned long long)s.f_bsize / (unsigned long long)1073741824); - di->stat.diskf = (unsigned int)((unsigned long long)s.f_bavail * (unsigned long long)s.f_bsize / (unsigned long long)1073741824); - free(ptr); - } - - return; -} - -void device_power(struct device_info *di) -{ - FILE *fp = NULL; - char buf[128], *ptr = NULL; - - strncpy(di->power.ac, "(unavailable)", sizeof(di->power.ac) - 1); - if(!(fp = fopen("/proc/acpi/ac_adapter/ADP1/state", "r"))) return; - while(fgets(buf, sizeof(buf), fp)) { - if(!strncasecmp(buf, "state:", strlen("state:"))) { - ptr = buf + strlen("state:"); - while(*ptr && (*ptr == ' ')) ptr++; - strncpy(di->power.ac, ptr, sizeof(di->power.ac) - 1); - } - } - fclose(fp); - - if(di->power.ac[strlen(di->power.ac) - 1] == '\n') di->power.ac[strlen(di->power.ac) - 1] = '\0'; - - return; -} - -void device_os(struct device_info *di) -{ - FILE *fp = NULL; - struct utsname u; - char buf[128], *ptr = NULL; - time_t t; - struct tm ts; - - do { - strncpy(di->os.ver, "(unknown)", sizeof(di->os.ver) - 1); - - if((fp = fopen("/etc/lsb-release", "r"))) { - while(fgets(buf, sizeof(buf), fp)) { - if(!strncasecmp(buf, "DISTRIB_DESCRIPTION=", strlen("DISTRIB_DESCRIPTION="))) { - ptr = buf + strlen("DISTRIB_DESCRIPTION="); - while(*ptr && ((*ptr == ' ') || (*ptr == '"'))) ptr++; - strncpy(di->os.ver, ptr, sizeof(di->os.ver) - 1); - while((di->os.ver[strlen(di->os.ver) - 1] == '"') || (di->os.ver[strlen(di->os.ver) - 1] == '\n')) di->os.ver[strlen(di->os.ver) - 1] = '\0'; - } - } - } else if((fp = fopen("/etc/slackware-version", "r"))) { - if(fgets(di->os.ver, sizeof(di->os.ver), fp)) break; - } else if((fp = fopen("/etc/redhat-release", "r"))) { - if(fgets(di->os.ver, sizeof(di->os.ver), fp)) break; - } else if((fp = fopen("/etc/gentoo-release", "r"))) { - if(fgets(di->os.ver, sizeof(di->os.ver), fp)) break; - } - } while(0); - if(fp) fclose(fp); - - if(di->os.ver[strlen(di->os.ver) - 1] == '\n') di->os.ver[strlen(di->os.ver) - 1] = '\0'; - - if(!uname(&u)) strncpy(di->os.arch, u.machine, sizeof(di->os.arch) - 1); - - if(!(ptr = getenv("LANG"))) ptr = "(unknown)"; - strncpy(di->os.lang, ptr, sizeof(di->os.lang) - 1); - - t = time(NULL); - localtime_r(&t, &ts); - strftime(di->os.tzname, sizeof(di->os.tzname), "%Z", &ts); - strftime(di->os.tzoff, sizeof(di->os.tzoff), "%z", &ts); - di->os.tzoff[6] = '\0'; - di->os.tzoff[5] = di->os.tzoff[4]; - di->os.tzoff[4] = di->os.tzoff[3]; - di->os.tzoff[3] = ':'; - - return; -} - -void device_user(struct device_info *di) -{ - FILE *fp = NULL; - char buf[128], *name, *gecos, *home, *ptr = NULL; - unsigned int uid; - - di->user.uid = (unsigned int)getuid(); - di->user.gid = (unsigned int)getuid(); - - if(!(fp = fopen("/etc/passwd", "r"))) return; - while(fgets(buf, sizeof(buf), fp)) { - if(!(ptr = strchr(buf, ':')) || !(ptr = strchr(++ptr, ':')) || (atoi(++ptr) != di->user.uid)) continue; - if((gecos = strchr(ptr, ':')) && (gecos = strchr(++gecos, ':'))) *gecos++ = '\0'; - if((home = strchr(gecos, ':'))) *home++ = '\0'; - if((ptr = strchr(home, ':'))) *ptr = '\0'; - printf("%s %s\n", gecos, home); - } - fclose(fp); - - return; -} - -void device_mount(struct device_info *di) -{ - FILE *fp = NULL; - char buf[512], *device = NULL, *mountpoint = NULL, *type = NULL, *ptr = NULL; - - if(!(fp = fopen("/etc/mtab", "r"))) return; - while(fgets(buf, sizeof(buf), fp)) { - device = buf; - if((mountpoint = strchr(device, ' '))) *mountpoint++ = '\0'; - if((type = strchr(mountpoint, ' '))) *type++ = '\0'; - if((ptr = strchr(type, ' '))) *ptr = '\0'; - ptr = &di->mount.list[strlen(di->mount.list)]; - snprintf(ptr, sizeof(di->mount.list) - strlen(di->mount.list), "%s %s (%s)\n", device, mountpoint, type); - } - fclose(fp); - - if(di->mount.list[strlen(di->mount.list) - 1] == '\n') di->mount.list[strlen(di->mount.list) - 1] = '\0'; - - return; -} -- 2.11.0