/* * Fast and easy way to gather the necessary information for dwm status bar * * Compile with gcc -Wall -lacpi -lcpufreq -o statusbar statusbar.c * * Copyright (c) 2007 T. Klauser */ #define _GNU_SOURCE #include #include #include #include #include #define DATE_STR "%a %Y-%m-%d %H:%M:%S" int main(int argc, char **argv) { time_t today; struct tm tim; char str[25]; unsigned long freq, tmp_freq; double load[3]; global_t g; if (check_acpi_support() == NOT_SUPPORTED) return -1; if (!(init_acpi_batt(&g) == SUCCESS)) return -1; if (!(init_acpi_thermal(&g) == SUCCESS)) return -1; /* 1) Date */ time(&today); tim = *localtime(&today); strftime(str, 25, DATE_STR, &tim); str[25] = '\0'; printf("%s | ", str); /* 2) Battery percentage (only the first battery matters for now) */ read_acpi_batt(0); if (batteries[0].present) printf("%d%% | ", batteries[0].percentage); /* 3) Temperature */ printf("%d C | ", g.temperature); /* 4) Current CPU frequency */ freq = cpufreq_get_freq_kernel(0); if (!freq) return -1; /* Taken from cpufrequtils */ if (freq > 1000000) { tmp_freq = freq % 10000; if (tmp_freq >= 5000) freq += 10000; printf("%u.%02u G", ((unsigned int) freq / 1000000), ((unsigned int) (freq % 1000000) / 10000)); } else if (freq > 100000) { tmp_freq = freq % 1000; if (tmp_freq >= 500) freq += 1000; printf("%u M", ((unsigned int) freq / 1000)); } else if (freq > 1000) { tmp_freq = freq % 100; if (tmp_freq >= 50) freq += 100; printf("%u.%01u M", ((unsigned int) freq / 1000), ((unsigned int) (freq % 1000) / 100)); } else printf("%lu k", freq); printf("Hz | "); /* 5) Load average */ if (getloadavg(load, 3) < 0) return -1; printf("%.02f %.02f %.02f\n", load[0], load[1], load[2]); return 0; }