profil-dwmstatus-1.0.c - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
profil-dwmstatus-1.0.c (2489B) | |
--- | |
1 /* made by profil 2011-12-29. | |
2 ** | |
3 ** Compile with: | |
4 ** gcc -Wall -pedantic -std=c99 -lX11 status.c | |
5 */ | |
6 #include <stdio.h> | |
7 #include <stdlib.h> | |
8 #include <unistd.h> | |
9 #include <time.h> | |
10 #include <X11/Xlib.h> | |
11 | |
12 static Display *dpy; | |
13 | |
14 void setstatus(char *str) { | |
15 XStoreName(dpy, DefaultRootWindow(dpy), str); | |
16 XSync(dpy, False); | |
17 } | |
18 | |
19 float getfreq(char *file) { | |
20 FILE *fd; | |
21 char *freq; | |
22 float ret; | |
23 | |
24 freq = malloc(10); | |
25 fd = fopen(file, "r"); | |
26 if(fd == NULL) { | |
27 fprintf(stderr, "Cannot open '%s' for reading.\n", file); | |
28 exit(1); | |
29 } | |
30 | |
31 fgets(freq, 10, fd); | |
32 fclose(fd); | |
33 | |
34 ret = atof(freq)/1000000; | |
35 free(freq); | |
36 return ret; | |
37 } | |
38 | |
39 char *getdatetime() { | |
40 char *buf; | |
41 time_t result; | |
42 struct tm *resulttm; | |
43 | |
44 if((buf = malloc(sizeof(char)*65)) == NULL) { | |
45 fprintf(stderr, "Cannot allocate memory for buf.\n"); | |
46 exit(1); | |
47 } | |
48 result = time(NULL); | |
49 resulttm = localtime(&result); | |
50 if(resulttm == NULL) { | |
51 fprintf(stderr, "Error getting localtime.\n"); | |
52 exit(1); | |
53 } | |
54 if(!strftime(buf, sizeof(char)*65-1, "%a %b %d %H:%M:%S", result… | |
55 fprintf(stderr, "strftime is 0.\n"); | |
56 exit(1); | |
57 } | |
58 | |
59 return buf; | |
60 } | |
61 | |
62 float getbattery() { | |
63 FILE *fd; | |
64 int energy_now, energy_full, voltage_now; | |
65 | |
66 fd = fopen("/sys/class/power_supply/BAT0/energy_now", "r"); | |
67 if(fd == NULL) { | |
68 fprintf(stderr, "Error opening energy_now.\n"); | |
69 return -1; | |
70 } | |
71 fscanf(fd, "%d", &energy_now); | |
72 fclose(fd); | |
73 | |
74 | |
75 fd = fopen("/sys/class/power_supply/BAT0/energy_full", "r"); | |
76 if(fd == NULL) { | |
77 fprintf(stderr, "Error opening energy_full.\n"); | |
78 return -1; | |
79 } | |
80 fscanf(fd, "%d", &energy_full); | |
81 fclose(fd); | |
82 | |
83 | |
84 fd = fopen("/sys/class/power_supply/BAT0/voltage_now", "r"); | |
85 if(fd == NULL) { | |
86 fprintf(stderr, "Error opening voltage_now.\n"); | |
87 return -1; | |
88 } | |
89 fscanf(fd, "%d", &voltage_now); | |
90 fclose(fd); | |
91 | |
92 | |
93 return ((float)energy_now * 1000 / (float)voltage_now) * 100 / (… | |
94 } | |
95 | |
96 int main(void) { | |
97 char *status; | |
98 float cpu0, cpu1; | |
99 char *datetime; | |
100 int bat0; | |
101 | |
102 | |
103 if (!(dpy = XOpenDisplay(NULL))) { | |
104 fprintf(stderr, "Cannot open display.\n"); | |
105 return 1; | |
106 } | |
107 | |
108 if((status = malloc(200)) == NULL) | |
109 exit(1); | |
110 | |
111 | |
112 for (;;sleep(1)) { | |
113 cpu0 = getfreq("/sys/devices/system/cpu/cpu0/cpufreq/sca… | |
114 cpu1 = getfreq("/sys/devices/system/cpu/cpu1/cpufreq/sca… | |
115 datetime = getdatetime(); | |
116 bat0 = getbattery(); | |
117 snprintf(status, 200, "%0.2f, %0.2f | %.2lf%% | %s", cpu… | |
118 | |
119 free(datetime); | |
120 setstatus(status); | |
121 } | |
122 | |
123 free(status); | |
124 XCloseDisplay(dpy); | |
125 | |
126 return 0; | |
127 } | |
128 |