ref: a4c1f8359d8e4aadf881585ecb137cf6d4904ce2
dir: /patches/stats.patch/
9a10,154
> static char *
> readall(int f, int *osz)
> {
> int bufsz, sz, n;
> char *s;
>
> bufsz = 1023;
> s = nil;
> for(sz = 0;; sz += n){
> if(bufsz-sz < 1024){
> bufsz *= 2;
> s = realloc(s, bufsz);
> }
> if((n = readn(f, s+sz, bufsz-sz-1)) < 1)
> break;
> }
> if(n < 0 || sz < 1){
> free(s);
> return nil;
> }
> s[sz] = 0;
> *osz = sz;
>
> return s;
> }
>
> enum {
> Colrioback,
>
> /* the following group has to be in order, they are used by libframe */
> Colback,
> Colhigh,
> Colbord,
> Coltext,
> Colhtext,
>
> Coltitle,
> Colltitle,
> Colhold,
> Collhold,
> Colpalehold,
> Colpaletext,
> Colsize,
>
> /* menuhit */
> Colmenubar,
> Colmenuback,
> Colmenuhigh,
> Colmenubord,
> Colmenutext,
> Colmenuhtext,
>
> Numcolors
> };
>
> typedef struct Color Color;
>
> struct Color {
> char *id;
> union {
> u32int rgb;
> char *path;
> };
> int flags;
> };
>
> static Color theme[Numcolors] = {
> [Colrioback] = {"rioback", {0x777777}, 0},
> [Colback] = {"back", {0xffffff}, 0},
> [Colhigh] = {"high", {0xcccccc}, 0},
> [Colbord] = {"border", {0x999999}, 0},
> [Coltext] = {"text", {DBlack>>8}, 0},
> [Colhtext] = {"htext", {DBlack>>8}, 0},
> [Coltitle] = {"title", {DGreygreen>>8}, 0},
> [Colltitle] = {"ltitle", {DPalegreygreen>>8}, 0},
> [Colhold] = {"hold", {DMedblue>>8}, 0},
> [Collhold] = {"lhold", {DGreyblue>>8}, 0},
> [Colpalehold] = {"palehold", {DPalegreyblue>>8}, 0},
> [Colpaletext] = {"paletext", {0x666666}, 0},
> [Colsize] = {"size", {DRed>>8}, 0},
> [Colmenubar] = {"menubar", {DDarkgreen>>8}, 1},
> [Colmenuback] = {"menuback", {0xeaffea}, 1},
> [Colmenuhigh] = {"menuhigh", {DDarkgreen>>8}, 1},
> [Colmenubord] = {"menubord", {DMedgreen>>8}, 1},
> [Colmenutext] = {"menutext", {DBlack>>8}, 1},
> [Colmenuhtext] = {"menuhtext", {0xeaffea}, 1},
> };
>
> u32int
> color2rgb(Color c, int scale)
> {
> return ((((c.rgb >> 16) & 0xff) / scale) << 24) |
> ((((c.rgb >> 8) & 0xff) / scale) << 16) |
> (((c.rgb & 0xff) / scale) << 8) |
> 0xff;
> }
>
> void
> themeload(char *s, int n)
> {
> int i;
> char *t, *a[2], *e;
> Image *newc;
> u32int rgb;
>
> if((t = malloc(n+1)) == nil)
> return;
> memmove(t, s, n);
> t[n] = 0;
>
> for(s = t; s != nil && *s; s = e){
> if((e = strchr(s, '\n')) != nil)
> *e++ = 0;
> if(tokenize(s, a, 2) == 2){
> for(i = 0; i < nelem(theme); i++) {
> if(strcmp(theme[i].id, a[0]) == 0) {
> rgb = strtoul(a[1], nil, 16);
> if((newc = allocimage(display, Rect(0, 0, 1, 1), RGB24, 1, rgb<<8 | 0xff)) != nil) {
> theme[i].rgb = rgb;
> }
> break;
> }
> }
> }
> }
> free(t);
> }
>
> char *
> themestring(int *n)
> {
> char *s, *t, *e;
> int i;
>
> if((t = malloc(512)) != nil){
> s = t;
> e = s+512;
> for(i = 0; i < nelem(theme); i++)
> s = seprint(s, e, "%s\t%06ux\n", theme[i].id, theme[i].rgb);
> *n = s - t;
> }
>
> return t;
> }
>
29c174
< /* /dev/swap */
---
> /* old /dev/swap */
34,35c179
< Reclaim,
< Maxreclaim,
---
>
52d195
<
74c217
< uvlong devswap[10];
---
> uvlong devswap[8];
125d267
< Mreclaim,
150d291
< "add reclaim ",
174d314
< reclaimval(Machine*, uvlong*, uvlong*, int),
200d339
< reclaimval,
214c353
< char argchars[] = "8bcdeEfiIkmlnprstwz";
---
> char argchars[] = "8bcdeEfiIkmlnpstwz";
222,224c361
< int sleeptime = 1000;
< int batteryperiod = 1000;
< int tempperiod = 1000;
---
> int sleeptime = 1000;
227a365,366
> Image *stext;
>
278c417
< cols[i][0] = allocimagemix(display, c0, DWhite);
---
> cols[i][0] = allocimagemix(display, c0, DBlack);
287c426
< mkcol(0, 0xFFAAAAFF, 0xFFAAAAFF, 0xBB5D5DFF);
---
> mkcol(0, color2rgb(theme[Coltitle], 1), color2rgb(theme[Colhold], 1), color2rgb(theme[Collhold], 1));
289c428
< mkcol(1, DPalebluegreen, DPalegreygreen, DPurpleblue);
---
> mkcol(1, color2rgb(theme[Coltitle], 1), color2rgb(theme[Colhold], 1), color2rgb(theme[Collhold], 1));
291c430
< mkcol(2, DPaleyellow, DDarkyellow, DYellowgreen);
---
> mkcol(2, color2rgb(theme[Coltitle], 1), color2rgb(theme[Colhold], 1), color2rgb(theme[Collhold], 1));
293c432
< mkcol(3, DPalegreen, DMedgreen, DDarkgreen);
---
> mkcol(3, color2rgb(theme[Coltitle], 1), color2rgb(theme[Colhold], 1), color2rgb(theme[Collhold], 1));
295c434
< mkcol(4, 0x00AAFFFF, 0x00AAFFFF, 0x0088CCFF);
---
> mkcol(4, color2rgb(theme[Coltitle], 1), color2rgb(theme[Colhold], 1), color2rgb(theme[Collhold], 1));
297,299c436,438
< cols[5][0] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0xEEEEEEFF);
< cols[5][1] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0xCCCCCCFF);
< cols[5][2] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x888888FF);
---
> cols[5][0] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, color2rgb(theme[Colhigh], 1));
> cols[5][1] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, color2rgb(theme[Coltext], 1));
> cols[5][2] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, color2rgb(theme[Collhold], 1));
342c481
< runestring(screen, p, display->black, ZP, font, r);
---
> runestring(screen, p, stext, ZP, font, r);
442c581
< string(screen, g->overtmp->r.min, display->black, ZP, font, buf);
---
> string(screen, g->overtmp->r.min, stext, ZP, font, buf);
476,477d614
< static int xxx = 0;
<
481a619,622
> a[0] = a[3];
> a[1] = a[4];
> a[2] = a[5];
> a[3] = a[6];
483,499c624,625
< a[Mem] = a[3];
< a[Maxmem] = a[4];
< a[Swap] = a[5];
< a[Maxswap] = a[6];
<
< a[Reclaim] = 0;
< a[Maxreclaim] = 0;
< if(m->bufp = strstr(m->buf, "reclaim")){
< while(m->bufp > m->buf && m->bufp[-1] != '\n')
< m->bufp--;
< a[Reclaim] = strtoull(m->bufp, &m->bufp, 10);
< while(*m->bufp++ == '/')
< a[Maxreclaim] = strtoull(m->bufp, &m->bufp, 10);
< }
<
< a[Kern] = 0;
< a[Maxkern] = 0;
---
> a[4] = 0;
> a[5] = 0;
503c629
< a[Kern] = strtoull(m->bufp, &m->bufp, 10);
---
> a[4] = strtoull(m->bufp, &m->bufp, 10);
505c631
< a[Maxkern] = strtoull(m->bufp, &m->bufp, 10);
---
> a[5] = strtoull(m->bufp, &m->bufp, 10);
508,509c634,635
< a[Draw] = 0;
< a[Maxdraw] = 0;
---
> a[6] = 0;
> a[7] = 0;
513c639
< a[Draw] = strtoull(m->bufp, &m->bufp, 10);
---
> a[6] = strtoull(m->bufp, &m->bufp, 10);
515c641
< a[Maxdraw] = strtoull(m->bufp, &m->bufp, 10);
---
> a[7] = strtoull(m->bufp, &m->bufp, 10);
521,527c647,650
< a[Reclaim] = 0;
< a[Maxreclaim] = 0;
< a[Kern] = 0;
< a[Maxkern] = 0;
< a[Draw] = 0;
< a[Maxdraw] = 0;
<
---
> a[4] = 0;
> a[5] = 0;
> a[6] = 0;
> a[7] = 0;
625c748
< snprint(buf, sizeof buf, "%s/mnt/pm/battery", mpt);
---
> snprint(buf, sizeof buf, "%s/mnt/acpi/battery", mpt);
630d752
< batteryperiod = 10000;
642,643c764
< tempperiod = 5000;
< snprint(buf, sizeof buf, "%s/mnt/pm/cputemp", mpt);
---
> snprint(buf, sizeof buf, "%s/mnt/acpi/cputemp", mpt);
665c786
< return init | present[Mmem] | present[Mswap] | present[Mreclaim] | present[Mkern] | present[Mdraw];
---
> return init | present[Mmem] | present[Mswap] | present[Mkern] | present[Mdraw];
686,693c807
< static uint step = 0;
<
< if(++step*sleeptime >= batteryperiod){
< step = 0;
< return init | present[Mbattery];
< }
<
< return 0;
---
> return init | present[Mbattery];
705,712c819
< static uint step = 0;
<
< if(++step*sleeptime >= tempperiod){
< step = 0;
< return init | present[Mtemp];
< }
<
< return 0;
---
> return init | present[Mtemp];
758,763c865,868
< if(needbattery(init)){
< if(loadbuf(m, &m->batteryfd) && readnums(m, nelem(m->batterystats), a, 0))
< memmove(m->batterystats, a, sizeof(m->batterystats));
< else if(loadbuf(m, &m->bitsybatfd) && readnums(m, 1, a, 0))
< memmove(m->batterystats, a, sizeof(m->batterystats));
< }
---
> if(needbattery(init) && loadbuf(m, &m->batteryfd) && readnums(m, nelem(m->batterystats), a, 0))
> memmove(m->batterystats, a, sizeof(m->batterystats));
> if(needbattery(init) && loadbuf(m, &m->bitsybatfd) && readnums(m, 1, a, 0))
> memmove(m->batterystats, a, sizeof(m->batterystats));
792,800d896
< reclaimval(Machine *m, uvlong *v, uvlong *vmax, int)
< {
< *v = m->devswap[Reclaim];
< *vmax = m->devswap[Maxreclaim];
< if(*vmax == 0)
< *vmax = 1;
< }
<
< void
899c995
< etherval(Machine *m, uvlong *v, uvlong *vmax, int)
---
> etherval(Machine *m, uvlong *v, uvlong *vmax, int init)
902c998,1000
< *vmax = sleeptime;
---
> *vmax = sleeptime*m->nproc;
> if(init)
> *vmax = sleeptime;
906c1004
< etherinval(Machine *m, uvlong *v, uvlong *vmax, int)
---
> etherinval(Machine *m, uvlong *v, uvlong *vmax, int init)
909c1007,1009
< *vmax = sleeptime;
---
> *vmax = sleeptime*m->nproc;
> if(init)
> *vmax = sleeptime;
913c1013
< etheroutval(Machine *m, uvlong *v, uvlong *vmax, int)
---
> etheroutval(Machine *m, uvlong *v, uvlong *vmax, int init)
916c1016,1018
< *vmax = sleeptime;
---
> *vmax = sleeptime*m->nproc;
> if(init)
> *vmax = sleeptime;
920c1022
< ethererrval(Machine *m, uvlong *v, uvlong *vmax, int)
---
> ethererrval(Machine *m, uvlong *v, uvlong *vmax, int init)
926,927c1028,1031
< *v += m->netetherstats[i]-m->prevetherstats[i];
< *vmax = (sleeptime/1000)*10;
---
> *v += m->netetherstats[i];
> *vmax = (sleeptime/1000)*10*m->nproc;
> if(init)
> *vmax = (sleeptime/1000)*10;
962c1066
< *vmax = 100;
---
> *vmax = sleeptime;
967c1071
< *v = l;
---
> *v = (l-20)*27;
1109c1213
< draw(screen, screen->r, display->white, nil, ZP);
---
> draw(screen, screen->r, display->black, nil, ZP);
1119c1223
< draw(screen, Rect(x, y-1, screen->r.max.x, y), display->black, nil, ZP);
---
> draw(screen, Rect(x, y-1, screen->r.max.x, y), stext, nil, ZP);
1128c1232
< draw(screen, Rect(x-1, starty-1, x, screen->r.max.y), display->black, nil, ZP);
---
> draw(screen, Rect(x-1, starty-1, x, screen->r.max.y), stext, nil, ZP);
1138c1242
< string(screen, Pt(x+Labspace, screen->r.min.y + Labspace), display->black, ZP, font, buf);
---
> string(screen, Pt(x+Labspace, screen->r.min.y + Labspace), stext, ZP, font, buf);
1146c1250
< if(wid < dx-10){
---
> if(wid < (maxx-startx)-30){
1149c1253
< draw(screen, Rect(maxx, starty, maxx+1, screen->r.max.y), display->black, nil, ZP);
---
> draw(screen, Rect(maxx, starty, maxx+1, screen->r.max.y), stext, nil, ZP);
1161c1265
< draw(screen, Rect(maxx+1, ly, maxx+1+Lx, ly+1), display->black, nil, ZP);
---
> draw(screen, Rect(maxx+1, ly, maxx+1+Lx, ly+1), stext, nil, ZP);
1163c1267
< string(screen, Pt(maxx+1+Lx, ly), display->black, ZP, font, labs[k]);
---
> string(screen, Pt(maxx+1+Lx, ly), stext, ZP, font, labs[k]);
1171,1173c1275,1277
< machr = Rect(startx+i*dx, starty, startx+(i+1)*dx - 1, screen->r.max.y);
< if(i == nmach-1)
< machr.max.x = maxx;
---
> machr = Rect(startx+i*dx, starty, maxx, screen->r.max.y);
> if(i < nmach-1)
> machr.max.x = startx+(i+1)*dx - 1;
1199,1200d1302
< if(vmax == 0)
< vmax = 1;
1375,1377d1476
< case 'r':
< addgraph(Mreclaim);
< break;
1412a1512,1524
>
> // load theme
> int sz, f;
> char *s;
>
> if((f = open("/dev/theme", OREAD|OCEXEC)) >= 0){
> if((s = readall(f, &sz)) != nil)
> themeload(s, sz);
> free(s);
> close(f);
> }
>
> stext = allocimage(display, Rect(0,0,1,1), CMAP8, 1, color2rgb(theme[Coltitle], 1));
1429,1430d1540
< if(vmax == 0)
< vmax = 1;