X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/9b2dc253485ef3a0ac34a5e781bc2c856bec463d..6cb5af2bd733cd73da704714c248b6ad2cd2ec09:/slstatus.c diff --git a/slstatus.c b/slstatus.c index 55e638f..0906b9d 100644 --- a/slstatus.c +++ b/slstatus.c @@ -37,6 +37,8 @@ struct arg { const char *args; }; +static unsigned short int delay; + static char *smprintf(const char *, ...); static char *battery_perc(const char *); static char *cpu_perc(void); @@ -139,7 +141,8 @@ cpu_perc(void) fscanf(fp, "%*s %Lf %Lf %Lf %Lf", &a[0], &a[1], &a[2], &a[3]); fclose(fp); - sleep(1); + delay = (UPDATE_INTERVAL - (UPDATE_INTERVAL - 1)); + sleep(delay); fp = fopen("/proc/stat","r"); if (fp == NULL) { @@ -150,6 +153,7 @@ cpu_perc(void) fscanf(fp, "%*s %Lf %Lf %Lf %Lf", &b[0], &b[1], &b[2], &b[3]); fclose(fp); perc = 100 * ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3])); + return smprintf("%d%%", perc); } @@ -175,6 +179,7 @@ disk_free(const char *mountpoint) warn("Could not get filesystem info"); return smprintf(UNKNOWN_STR); } + return smprintf("%f", (float)fs.f_bsize * (float)fs.f_bfree / 1024 / 1024 / 1024); } @@ -190,6 +195,7 @@ disk_perc(const char *mountpoint) } perc = 100 * (1.0f - ((float)fs.f_bfree / (float)fs.f_blocks)); + return smprintf("%d%%", perc); } @@ -232,6 +238,7 @@ entropy(void) fscanf(fp, "%d", &entropy); fclose(fp); + return smprintf("%d", entropy); } @@ -257,6 +264,7 @@ hostname(void) memset(&hostname[strlen(hostname)-1], '\0', sizeof(hostname) - strlen(hostname)); fclose(fp); + return smprintf("%s", hostname); } @@ -272,7 +280,6 @@ ip(const char *interface) return smprintf(UNKNOWN_STR); } - /* get the ip address */ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL) continue; @@ -289,7 +296,6 @@ ip(const char *interface) } } - /* free the address */ freeifaddrs(ifaddr); return smprintf(UNKNOWN_STR); @@ -321,6 +327,7 @@ ram_free(void) fscanf(fp, "MemFree: %ld kB\n", &free); fclose(fp); + return smprintf("%f", (float)free / 1024 / 1024); } @@ -343,6 +350,7 @@ ram_perc(void) fclose(fp); perc = 100 * ((total - free) - (buffers + cached)) / total; + return smprintf("%d%%", perc); } @@ -359,6 +367,7 @@ ram_total(void) fscanf(fp, "MemTotal: %ld kB\n", &total); fclose(fp); + return smprintf("%f", (float)total / 1024 / 1024); } @@ -380,6 +389,7 @@ ram_used(void) fclose(fp); used = total - free - buffers - cached; + return smprintf("%f", (float)used / 1024 / 1024); } @@ -388,7 +398,7 @@ run_command(const char* command) { int good; FILE *fp = popen(command, "r"); - char buffer[64]; + char buffer[64] = ""; if (fp == NULL) { warn("Could not get command output for: %s", command); @@ -405,6 +415,7 @@ run_command(const char* command) } if (good) buffer[strlen(buffer)-1] = '\0'; + return smprintf("%s", buffer); } @@ -421,6 +432,7 @@ temp(const char *file) fscanf(fp, "%d", &temperature); fclose(fp); + return smprintf("%d°C", temperature / 1000); } @@ -444,11 +456,12 @@ username(void) uid_t uid = geteuid(); struct passwd *pw = getpwuid(uid); - if (pw == NULL) - return smprintf("%s", pw->pw_name); + if (pw == NULL) { + warn("Could not get username"); + return smprintf(UNKNOWN_STR); + } - warn("Could not get username"); - return smprintf(UNKNOWN_STR); + return smprintf("%s", pw->pw_name); } static char * @@ -460,24 +473,24 @@ uid(void) static char * vol_perc(const char *snd_card) -{ /* thanks to botika for this function */ +{ /* FIX THIS SHIT! */ long int vol, max, min; snd_mixer_t *handle; snd_mixer_elem_t *elem; snd_mixer_selem_id_t *s_elem; snd_mixer_open(&handle, 0); - snd_mixer_attach(handle, "default"); + snd_mixer_attach(handle, snd_card); snd_mixer_selem_register(handle, NULL, NULL); snd_mixer_load(handle); snd_mixer_selem_id_malloc(&s_elem); - snd_mixer_selem_id_set_name(s_elem, snd_card); + snd_mixer_selem_id_set_name(s_elem, ALSA_CHANNEL); elem = snd_mixer_find_selem(handle, s_elem); if (elem == NULL) { snd_mixer_selem_id_free(s_elem); snd_mixer_close(handle); - perror("alsa error"); + warn("error: ALSA"); return smprintf(UNKNOWN_STR); } @@ -488,7 +501,7 @@ vol_perc(const char *snd_card) snd_mixer_selem_id_free(s_elem); snd_mixer_close(handle); - return smprintf("%d", (vol * 100) / max); + return smprintf("%d", ((uint_fast16_t)(vol * 100) / max)); } static char * @@ -532,6 +545,7 @@ wifi_perc(const char *wificard) } fclose(fp); + return smprintf("%d%%", strength); } @@ -590,7 +604,14 @@ main(void) } XStoreName(dpy, DefaultRootWindow(dpy), status_string); XSync(dpy, False); + /* + * subtract delay time spend in function + * calls from the actual global delay time + */ + sleep(UPDATE_INTERVAL - delay); + delay = 0; } + XCloseDisplay(dpy); return 0;