21 text = display->black;
22 light = allocimagemix(display, DPalegreen, DWhite);
23 dark = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DDarkgreen);
39 char buf[400], bar[200];
40 static char lastbar[200];
42 if(n > d || n < 0 || d <= 0)
57 for(; j<Dx(rbar); j++)
61 sprint(bar+j, "%3d%% ", p);
62 for(i=0; bar[i]==lastbar[i] && bar[i]; i++)
64 memset(buf, '\b', strlen(lastbar)-i);
65 strcpy(buf+strlen(lastbar)-i, bar+i);
67 write(1, buf, strlen(buf));
72 if(lastp == p && last == i)
76 sprint(buf, "%3d%%", p);
78 stringbg(screen, addpt(screen->r.min, Pt(Dx(rbar)-30, 4)), text, ZP, display->defaultfont, buf, light, ZP);
84 draw(screen, Rect(rbar.min.x+last, rbar.min.y, rbar.min.x+i, rbar.max.y),
87 draw(screen, Rect(rbar.min.x+i, rbar.min.y, rbar.min.x+last, rbar.max.y),
91 flushimage(display, 1);
100 if(new && getwindow(display, Refnone) < 0)
101 fprint(2,"can't reattach to window");
104 draw(screen, r, light, nil, ZP);
105 p = string(screen, addpt(r.min, Pt(4,4)), text, ZP,
106 display->defaultfont, title);
109 p.y += display->defaultfont->height+4;
111 q = subpt(r.max, Pt(4,4));
114 ptext = Pt(r.max.x-4-stringwidth(display->defaultfont, "100%"), r.min.x+4);
115 border(screen, rbar, -2, dark, ZP);
127 int k, die, parent, child;
135 switch(child = rfork(RFMEM|RFPROC)) {
138 while(!die && (k = eread(Ekeyboard|Emouse, &e))) {
139 if(nokill==0 && k == Ekeyboard && (e.kbdc == Kdel || e.kbdc == Ketx)) {
141 postnote(PNPROC, parent, "interrupt");
148 while(!die && (p = Brdline(b, '\n'))) {
149 p[Blinelen(b)-1] = '\0';
150 if(tokenize(p, f, 2) != 2)
152 n = strtoll(f[0], 0, 0);
153 d = strtoll(f[1], 0, 0);
159 postnote(PNPROC, child, "kill");
166 fprint(2, "usage: aux/statusbar [-kt] [-w minx,miny,maxx,maxy] 'title'\n");
171 main(int argc, char **argv)
200 while(q = strchr(p, ','))
202 Binit(&b, lfd, OREAD);
203 if(textmode || newwin(p) < 0){
205 rbar = Rect(0, 0, 60, 1);
207 if(initdraw(0, 0, title) < 0)
210 einit(Emouse|Ekeyboard);
225 snprint(spec, sizeof(spec), "-r %s", win);
228 if(newwindow(win) < 0){
229 fprint(2, "%s: newwindow: %r", argv0);
232 if((cons = open("/dev/cons", OREAD)) < 0){
234 fprint(2, "%s: can't open /dev/cons: %r", argv0);
239 if((cons = open("/dev/cons", OWRITE)) < 0)