aboutsummaryrefslogtreecommitdiffstats
path: root/gadgets/gcpubar.c
diff options
context:
space:
mode:
authorgotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2008-01-04 21:57:27 +0000
committergotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2008-01-04 21:57:27 +0000
commited61be747386029fcf009002c5bf02126aebd835 (patch)
tree39c931a580f8b6521e96421fc33537cbe3a49e87 /gadgets/gcpubar.c
parentfacf378ae7400168a95bdfec8126cd251d25a02e (diff)
downloaddzen-ed61be747386029fcf009002c5bf02126aebd835.tar.gz
dzen-ed61be747386029fcf009002c5bf02126aebd835.zip
made dbar functions reusable
gdbar, gcpubar make use of the api git-svn-id: http://dzen.googlecode.com/svn/trunk@190 f2baff5b-bf2c-0410-a398-912abdc3d8b2
Diffstat (limited to 'gadgets/gcpubar.c')
-rw-r--r--gadgets/gcpubar.c218
1 files changed, 51 insertions, 167 deletions
diff --git a/gadgets/gcpubar.c b/gadgets/gcpubar.c
index 37c4117..bd5a09e 100644
--- a/gadgets/gcpubar.c
+++ b/gadgets/gcpubar.c
@@ -1,31 +1,28 @@
/*
- gcpubar - graphical cpu usage bar, to be used with dzen
-
- Copyright (C) 2007 by Robert Manea, <rob dot manea at gmail dot com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+ gcpubar - graphical cpu usage bar, to be used with dzen
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+ Copyright (C) 2007 by Robert Manea, <rob dot manea at gmail dot com>
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
-#include<stdio.h>
-#include<stdlib.h>
-#include<unistd.h>
-#include<string.h>
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+#include "dbar.h"
/* critical % value, color */
#define CPUCRIT 75
@@ -34,12 +31,6 @@ THE SOFTWARE.
#define CPUMED 50
#define MEDCOL "#EBA178"
-#define MAX_GRAPH_VALUES 512
-
-static void pbar (const char *, double, int, int, int, int, int, int, int, int);
-
-enum style { norm, outlined, gauge, vertical, graph };
-
struct cpu_info {
unsigned long long user;
unsigned long long sys;
@@ -47,107 +38,19 @@ struct cpu_info {
unsigned long long iowait;
} ncpu, ocpu;
-char *bg, *fg;
-char graphbuf[MAX_GRAPH_VALUES];
-int graphcnt, mv;
-int gtw = 1;
-
-static void
-pbar(const char *label, double perc, int maxc, int height, int segh, int segb,
- int segw, int print_nl, int mode, int gspacing ) {
- int i, rp, p;
- int ov_s, nv_s, segs, segsa;
- double l;
-
- if(mode == graph || mode == vertical)
- l = perc * ((double)height / 100);
- else
- l = perc * ((mode ? (double)(maxc-2) : (double) maxc) / 100);
-
- l=(int)(l + 0.5) >= (int)l ? l+0.5 : l;
- rp=(int)(perc + 0.5) >= (int)perc ? (int)(perc + 0.5) : (int)perc;
-
- if(mode == outlined)
- printf("%s %3d%% ^ib(1)^fg(%s)^ro(%dx%d)^p(%d)^fg(%s)^r(%dx%d)^p(%d)^ib(0)^fg()%s",
- label ? label : "", rp, bg, maxc, height, -1*(maxc-1),
- (rp>=CPUCRIT) ? CRITCOL : fg, (int)l, height-2, (maxc-1)-(int)l, print_nl ? "\n" : "");
- else if(mode == gauge) {
- graphcnt = graphcnt < 128 &&
- (gspacing == 0 ? graphcnt : graphcnt*gspacing+graphcnt*gtw) < maxc ?
- ++graphcnt : 0;
- graphbuf[graphcnt] = l;
-
- printf("%s", label ? label : "");
- for(i=graphcnt+1; i<128 && (i*gspacing+i*gtw < maxc); ++i) {
- p=100*graphbuf[i]/height;
- p=(int)p+0.5 >= (int)p ? (int)(p+0.5) : (int)p;
- printf("^fg(%s)^p(%d)^r(%dx%d+0-%d)",
- p>=CPUMED ? (p >= CPUCRIT ? CRITCOL : MEDCOL) : fg, gspacing,
- gtw, (int)graphbuf[i], (int)graphbuf[i]+1);
- }
-
- for(i=0; i < graphcnt; ++i) {
- p=100*graphbuf[i]/height;
- p=(int)p+0.5 >= (int)p ? (int)(p+0.5) : (int)p;
- printf("^fg(%s)^p(%d)^r(%dx%d+0-%d)",
- p>=CPUMED ? (p >= CPUCRIT ? CRITCOL : MEDCOL) : fg, gspacing,
- gtw, (int)graphbuf[i], (int)graphbuf[i]+1);
- }
- printf("^fg()%s", print_nl ? "\n" : "");
- }
- else if(mode == vertical) {
- segs = height / (segh + segb);
- segsa = rp * segs / 100;
-
- printf("%s^ib(1)", label ? label : "");
- /* in case of no spacing, we draw just 2 rectangles */
- if(segb == 0) {
- printf("^fg(%s)^r(%dx%d+%d-%d)^fg(%s)^p(-%d)^r(%dx%d+%d-%d)",
- bg,
- segw, height, 0, height+1,
- rp >= CPUMED ? (rp>=CPUCRIT ? CRITCOL : MEDCOL) : fg, segw,
- segw, (int)l, 0, (int)l+1);
- } else {
- for(i=0; i < segs; i++) {
- if(i<segsa)
- printf("^fg(%s)^p(-%d)^r(%dx%d+%d-%d)", rp >= CPUMED ? (rp>=CPUCRIT ? CRITCOL : MEDCOL) : fg, i?segw:0, segw, segh, 0, (segh+segb)*(i+1));
- else
- printf("^fg(%s)^p(-%d)^r(%dx%d+%d-%d)", bg, i?segw:0, segw, segh, 0, (segh+segb)*(i+1));
-
- }
- }
- printf("^ib(0)^fg()%s", print_nl ? "\n" : "");
- }
- else
- printf("%s %3d%% ^fg(%s)^r(%dx%d)^fg(%s)^r(%dx%d)^fg()%s",
- label ? label : "", rp, (rp>=CPUCRIT) ? CRITCOL : fg, (int)l,
- height, bg, maxc-(int)l, height, print_nl ? "\n" : "");
-
-
- fflush(stdout);
-}
-
-int
-main(int argc, char *argv[])
-{
+int main(int argc, char *argv[]) {
int i, t;
double total;
struct cpu_info mcpu;
FILE *statfp;
char buf[256], *ep;
- const char *label = NULL;
+ Dbar dbar;
+
+ int counts = 0;
+ double ival = 1.0;
- /* defaults */
- int mode = 0;
- double ival = 1.0;
- int counts = 0;
- int barwidth = 100;
- int barheight = 10;
- int print_nl = 1;
- int gspacing = 1;
- int segw = 6;
- int segh = 2;
- int segb = 1;
+ dbardefaults(&dbar, graphical);
+ dbar.mode = graphical;
for(i=1; i < argc; i++) {
if(!strncmp(argv[i], "-i", 3)) {
@@ -165,16 +68,16 @@ main(int argc, char *argv[])
if(++i < argc) {
switch(argv[i][0]) {
case 'o':
- mode = outlined;
+ dbar.style = outlined;
break;
case 'g':
- mode = gauge;
+ dbar.style = graph;
+ break;
+ case 'v':
+ dbar.style = vertical;
break;
- case 'v':
- mode = vertical;
- break;
default:
- mode = norm;
+ dbar.style = norm;
break;
}
}
@@ -185,54 +88,46 @@ main(int argc, char *argv[])
}
else if(!strncmp(argv[i], "-gs", 4)) {
if(++i < argc)
- gspacing = atoi(argv[i]);
+ dbar.gs = atoi(argv[i]);
}
else if(!strncmp(argv[i], "-gw", 4)) {
if(++i < argc)
- gtw = atoi(argv[i]);
+ dbar.gw = atoi(argv[i]);
}
else if(!strncmp(argv[i], "-w", 3)) {
if(++i < argc)
- barwidth = atoi(argv[i]);
+ dbar.width = atoi(argv[i]);
}
else if(!strncmp(argv[i], "-h", 3)) {
if(++i < argc)
- barheight = atoi(argv[i]);
+ dbar.height = atoi(argv[i]);
}
else if(!strncmp(argv[i], "-sw", 4)) {
if(++i < argc)
- segw = atoi(argv[i]);
+ dbar.segw = atoi(argv[i]);
}
else if(!strncmp(argv[i], "-sh", 4)) {
if(++i < argc)
- segh = atoi(argv[i]);
+ dbar.segh = atoi(argv[i]);
}
else if(!strncmp(argv[i], "-ss", 4)) {
if(++i < argc)
- segb = atoi(argv[i]);
+ dbar.segb = atoi(argv[i]);
}
else if(!strncmp(argv[i], "-fg", 4)) {
if(++i < argc)
- fg = argv[i];
- else {
- fg = malloc(6);
- strcpy(fg, "white");
- }
+ dbar.fg = argv[i];
}
else if(!strncmp(argv[i], "-bg", 4)) {
if(++i < argc)
- bg = argv[i];
- else {
- bg = malloc(9);
- strcpy(bg, "darkgrey");
- }
+ dbar.bg = argv[i];
}
else if(!strncmp(argv[i], "-l", 3)) {
if(++i < argc)
- label = argv[i];
+ dbar.label = argv[i];
}
else if(!strncmp(argv[i], "-nonl", 6)) {
- print_nl = 0;
+ dbar.pnl = 0;
}
else {
printf("usage: %s [-l <label>] [-i <interval>] [-c <count>] [-fg <color>] [-bg <color>] [-w <pixel>] [-h <pixel>] [-s <o|g|v>] [-sw <pixel>] [-sh <pixel>] [-ss <pixel>] [-gs <pixel>] [-gw <pixel>] [-nonl]\n", argv[0]);
@@ -240,15 +135,6 @@ main(int argc, char *argv[])
}
}
- if(!fg) {
- fg = malloc(6);
- strcpy(fg, "white");
- }
- if(!bg) {
- bg = malloc(9);
- strcpy(bg, "darkgrey");
- }
-
if(!(statfp = fopen("/proc/stat", "r"))) {
printf("%s: error opening '/proc/stat'\n", argv[0]);
return EXIT_FAILURE;
@@ -263,7 +149,7 @@ main(int argc, char *argv[])
double myload;
/* linux >= 2.6 */
if((sscanf(buf, "cpu %llu %llu %llu %llu %llu",
- &ncpu.user, &unice, &ncpu.sys, &ncpu.idle, &ncpu.iowait)) < 5) {
+ &ncpu.user, &unice, &ncpu.sys, &ncpu.idle, &ncpu.iowait)) < 5) {
printf("%s: wrong field count in /proc/stat\n", argv[0]);
return EXIT_FAILURE;
}
@@ -274,11 +160,10 @@ main(int argc, char *argv[])
mcpu.idle = ncpu.idle - ocpu.idle;
mcpu.iowait = ncpu.iowait - ocpu.iowait;
- total = (mcpu.user + mcpu.sys + mcpu.idle + mcpu.iowait) / 100.0;
- myload = (mcpu.user + mcpu.sys + mcpu.iowait) / total;
+ dbar.maxval = mcpu.user + mcpu.sys + mcpu.idle + mcpu.iowait;
+ dbar.val = mcpu.user + mcpu.sys + mcpu.iowait;
- pbar(label, myload, barwidth, barheight, segh, segb, segw,
- print_nl, mode, gspacing);
+ fdbar(&dbar, stdout);
ocpu = ncpu;
}
}
@@ -291,7 +176,6 @@ main(int argc, char *argv[])
else
break;
}
-
- return EXIT_SUCCESS;
-}
+ return EXIT_SUCCESS;
+}