Introduction
Introduction Statistics Contact Development Disclaimer Help
uptime.c - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
uptime.c (2446B)
---
1 #define _BSD_SOURCE
2 #define _GNU_SOURCE
3 #include <unistd.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <stdarg.h>
7 #include <string.h>
8 #include <strings.h>
9 #include <sys/time.h>
10 #include <sys/sysinfo.h>
11 #include <time.h>
12 #include <sys/types.h>
13 #include <dirent.h>
14 #include <sys/statvfs.h>
15
16
17 #include <X11/Xlib.h>
18
19 char *tzparis = "Europe/Paris";
20
21 static Display *dpy;
22
23 char *
24 smprintf(char *fmt, ...)
25 {
26 va_list fmtargs;
27 char *buf = NULL;
28
29 va_start(fmtargs, fmt);
30 if (vasprintf(&buf, fmt, fmtargs) == -1){
31 fprintf(stderr, "malloc vasprintf\n");
32 exit(1);
33 }
34 va_end(fmtargs);
35
36 return buf;
37 }
38
39 void
40 settz(char *tzname)
41 {
42 setenv("TZ", tzname, 1);
43 }
44
45 char *
46 mktimes(char *fmt, char *tzname)
47 {
48 char buf[129];
49 time_t tim;
50 struct tm *timtm;
51
52 memset(buf, 0, sizeof(buf));
53 settz(tzname);
54 tim = time(NULL);
55 timtm = localtime(&tim);
56 if (timtm == NULL) {
57 perror("localtime");
58 exit(1);
59 }
60
61 if (!strftime(buf, sizeof(buf)-1, fmt, timtm)) {
62 fprintf(stderr, "strftime == 0\n");
63 exit(1);
64 }
65
66 return smprintf(buf);
67 }
68
69 void
70 setstatus(char *str)
71 {
72 XStoreName(dpy, DefaultRootWindow(dpy), str);
73 XSync(dpy, False);
74 }
75
76 char *
77 loadavg(void)
78 {
79 double avgs[3];
80
81 if (getloadavg(avgs, 3) < 0) {
82 perror("getloadavg");
83 exit(1);
84 }
85
86 return smprintf("%.2f %.2f %.2f", avgs[0], avgs[1], avgs[2]);
87 }
88
89
90 char *
91 up() {
92 struct sysinfo info;
93 int h,m = 0;
94 sysinfo(&info);
95 h = info.uptime/3600;
96 m = (info.uptime - h*3600 )/60;
97 return smprintf("%dh%dm",h,m);
98 }
99
100
101 int runevery(time_t *ltime, int sec){
102 /* return 1 if sec elapsed since last run
103 * else return 0
104 */
105 time_t now = time(NULL);
106
107 if ( difftime(now, *ltime ) >= sec)
108 {
109 *ltime = now;
110 return(1);
111 }
112 else
113 return(0);
114 }
115
116 int
117 main(void)
118 {
119 char *status = NULL;
120 char *tmprs = NULL;
121 char *avgs = NULL;
122 time_t count60 = 0;
123 char *uptm = NULL;
124
125 if (!(dpy = XOpenDisplay(NULL))) {
126 fprintf(stderr, "dwmstatus: cannot open display.\n");
127 return 1;
128 }
129
130 for (;;sleep(1)) {
131 /* checks every minutes */
132 if ( runevery(&count60, 60) )
133 {
134 free(tmprs);
135 free(uptm);
136 tmprs = mktimes("%d/%m/%y %H:%M", tzparis);
137 uptm = up();
138 }
139 /* checks every second */
140 avgs = loadavg();
141
142 status = smprintf("%s | Up:%s | %s",
143 avgs, uptm, tmprs);
144 setstatus(status);
145 free(avgs);
146 free(status);
147 }
148
149 XCloseDisplay(dpy);
150
151 return 0;
152 }
153
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.