From 3b1918496ea4b20ec61287ffbb9e1573e950fdcc Mon Sep 17 00:00:00 2001 From: gotmor Date: Wed, 1 Aug 2007 19:15:37 +0000 Subject: release 0.7.5 fixed memory leak added in-text commands: ^tw() ^c() ^p() added gadgets: kittscanner gdbar gcpubar git-svn-id: http://dzen.googlecode.com/svn/trunk@149 f2baff5b-bf2c-0410-a398-912abdc3d8b2 --- gadgets/Makefile | 22 +++++- gadgets/README.gcpubar | 29 ++++++++ gadgets/README.gdbar | 29 ++++++++ gadgets/README.kittscanner | 14 ++++ gadgets/gcpubar.c | 182 +++++++++++++++++++++++++++++++++++++++++++++ gadgets/gdbar.c | 154 ++++++++++++++++++++++++++++++++++++++ gadgets/kittscanner.sh | 70 +++++++++++++++++ 7 files changed, 498 insertions(+), 2 deletions(-) create mode 100644 gadgets/README.gcpubar create mode 100644 gadgets/README.gdbar create mode 100644 gadgets/README.kittscanner create mode 100644 gadgets/gcpubar.c create mode 100644 gadgets/gdbar.c create mode 100755 gadgets/kittscanner.sh (limited to 'gadgets') diff --git a/gadgets/Makefile b/gadgets/Makefile index 36081bc..6ea8d3e 100644 --- a/gadgets/Makefile +++ b/gadgets/Makefile @@ -3,10 +3,10 @@ include config.mk -SRC = dbar.c textwidth.c +SRC = dbar.c gdbar.c gcpubar.c textwidth.c OBJ = ${SRC:.c=.o} -all: options dbar textwidth +all: options dbar gdbar gcpubar textwidth options: @echo dzen2 gadgets build options: @@ -26,6 +26,16 @@ dbar: ${OBJ} @${LD} -o $@ dbar.o ${LDFLAGS} @strip $@ +gdbar: ${OBJ} + @echo LD $@ + @${LD} -o $@ gdbar.o ${LDFLAGS} -L${X11LIB} -lX11 + @strip $@ + +gcpubar: ${OBJ} + @echo LD $@ + @${LD} -o $@ gcpubar.o ${LDFLAGS} -L${X11LIB} + @strip $@ + textwidth: ${OBJ} @echo LD $@ @${LD} -o $@ textwidth.o ${LDFLAGS} -L${X11LIB} -lX11 @@ -34,6 +44,8 @@ textwidth: ${OBJ} clean: @echo cleaning @rm -f ${OBJ} dbar + @rm -f ${OBJ} gdbar + @rm -f ${OBJ} gcpubar @rm -f ${OBJ} textwidth install: all @@ -41,12 +53,18 @@ install: all @mkdir -p ${DESTDIR}${PREFIX}/bin @cp -f dbar ${DESTDIR}${PREFIX}/bin @chmod 755 ${DESTDIR}${PREFIX}/bin/dbar + @cp -f gdbar ${DESTDIR}${PREFIX}/bin + @chmod 755 ${DESTDIR}${PREFIX}/bin/gdbar + @cp -f gcpubar ${DESTDIR}${PREFIX}/bin + @chmod 755 ${DESTDIR}${PREFIX}/bin/gcpubar @cp -f textwidth ${DESTDIR}${PREFIX}/bin @chmod 755 ${DESTDIR}${PREFIX}/bin/textwidth uninstall: @echo removing executable file from ${DESTDIR}${PREFIX}/bin @rm -f ${DESTDIR}${PREFIX}/bin/dbar + @rm -f ${DESTDIR}${PREFIX}/bin/gdbar + @rm -f ${DESTDIR}${PREFIX}/bin/gcpubar @rm -f ${DESTDIR}${PREFIX}/bin/textwidth .PHONY: all options clean install uninstall diff --git a/gadgets/README.gcpubar b/gadgets/README.gcpubar new file mode 100644 index 0000000..e8f86aa --- /dev/null +++ b/gadgets/README.gcpubar @@ -0,0 +1,29 @@ +==================================== + gcpubar, (c) 20007 by Robert Manea +==================================== + +gcpubar is a CPU utilization meter for Linux. It relies on the existence +of the "/proc/stat" file and generateѕ fully graphical meters viewable with +dzen >= 0.7.0. + +Command line options: +--------------------- + + + -i : Update interval in seconds (default: 1) + You can use positive values + less than 1 for intervals + shorter than a second + + -c : Terminate after diplaying (default: infite) + argument to '-c' values + + -w : Width of the meter in pixels (default: 100) + + -h : Height of the meter in pixels (default: 10) + + -fg : Meter foreground color (default: white) + + -bg : Meter background color (default: darkgrey) + + diff --git a/gadgets/README.gdbar b/gadgets/README.gdbar new file mode 100644 index 0000000..d3374b8 --- /dev/null +++ b/gadgets/README.gdbar @@ -0,0 +1,29 @@ +================================= + gdbar, (c) 2007 by Robert Manea +================================= + +gdbar is an application that generates fully graphical progress meters, +from some values you supply to it. + +It has the same input semantics as dbar (see README.dbar). In contrast +to dbar, gdbar draws fully graphical meters which are only useful in +combination with dzen >= 0.7.0. + +Options: +-------- + + -fg : foreground color of the meter (default: white) + -bg : background color of the meter (default: darkgrey) + -max : Value to be considered 100% (default: 100) + -min : Value to be considered 0% (default: 0 ) + -w : Size in pixels to be + considered 100% in the meter (default: 80 ) + -h : bar height + -l : label to be prepended to + the bar (default: '' ) + -nonl: no new line, don't put + '\n' at the end of the bar (default: do print '\n') + + +See README.dbar for further details! + diff --git a/gadgets/README.kittscanner b/gadgets/README.kittscanner new file mode 100644 index 0000000..37da5bc --- /dev/null +++ b/gadgets/README.kittscanner @@ -0,0 +1,14 @@ +======================================== + kitt-scanner, (c) 2007 by Robert Manea +======================================== + +This is just a fun gadget and wants to show what can be done with dzen +other than just displaying text ;). + +It implements sort of a KITT (Knight Rider, TV series) scanner in shell +script. + +There are some setting that you can tweak to your likings, see +"kitt-scanner.sh" for further details. + + diff --git a/gadgets/gcpubar.c b/gadgets/gcpubar.c new file mode 100644 index 0000000..f65569c --- /dev/null +++ b/gadgets/gcpubar.c @@ -0,0 +1,182 @@ +/* + gcpubar - graphical cpu usage bar, to be used with dzen + + Copyright (C) 2007 by Robert Manea, + +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: + +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 +#include +#include +#include + +/* critical % value */ +#define CPUCRIT 75 +/* bar color for critical values */ +#define CRITCOL "red" + +static void pbar (double, int, int); + +struct cpu_info { + unsigned long long user; + unsigned long long sys; + unsigned long long idle; + unsigned long long iowait; +} ncpu, ocpu; + +char *bg, *fg; + +static void +pbar(double perc, int maxc, int height) { + int i, rp; + double l; + + l = perc * ((double)maxc / 100); + if((int)(l + 0.5) >= (int)l) + l = l + 0.5; + + if((int)(perc + 0.5) >= (int)perc) + rp = (int)(perc + 0.5); + else + rp = (int)perc; + + printf("CPU: %3d%% ^fg(%s)^r(%dx%d)^fg(%s)^r(%dx%d)\n", rp, + (rp>=CPUCRIT) ? CRITCOL : fg, (int)l, height, + bg, maxc-(int)l, height); + + fflush(stdout); +} + +int +main(int argc, char *argv[]) +{ + int i, t; + double total; + struct cpu_info mcpu; + FILE *statfp; + char buf[256], *ep; + + /* defaults */ + double ival=1.0; + int counts = 0; + int barwidth=100; + int barheight=10; + char *myfont = NULL; + + for(i=1; i < argc; i++) { + if(!strncmp(argv[i], "-i", 3)) { + if(i+1 < argc) { + ival = strtod(argv[i+1], &ep); + if(*ep) { + fprintf(stderr, "%s: '-i' Invalid interval value\n", argv[0]); + return EXIT_FAILURE; + } + else + i++; + } + } + else if(!strncmp(argv[i], "-c", 3)) { + if(++i < argc) + counts = atoi(argv[i]); + } + else if(!strncmp(argv[i], "-w", 3)) { + if(++i < argc) + barwidth = atoi(argv[i]); + } + else if(!strncmp(argv[i], "-h", 3)) { + if(++i < argc) + barheight = atoi(argv[i]); + } + else if(!strncmp(argv[i], "-fg", 4)) { + if(++i < argc) + fg = argv[i]; + else { + fg = malloc(6); + strcpy(fg, "white"); + } + } + else if(!strncmp(argv[i], "-bg", 4)) { + if(++i < argc) + bg = argv[i]; + else { + bg = malloc(9); + strcpy(bg, "darkgrey"); + } + } + else { + printf("usage: %s [-i ] [-c ] [-fg ] [-bg ] [-w ] [-h ]\n", argv[0]); + return EXIT_FAILURE; + } + } + + 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; + } + + t = counts > 0 ? counts : 1; + while(t) { + rewind(statfp); + while(fgets(buf, sizeof buf, statfp)) { + if(!strncmp(buf, "cpu ", 4)) { + unsigned long long unice; + double myload; + /* linux >= 2.6 */ + if((sscanf(buf, "cpu %llu %llu %llu %llu %llu", + &ncpu.user, &unice, &ncpu.sys, &ncpu.idle, &ncpu.iowait)) < 5) { + printf("%s: wrong field count in /proc/stat\n", argv[0]); + return EXIT_FAILURE; + } + ncpu.user += unice; + + mcpu.user = ncpu.user - ocpu.user; + mcpu.sys = ncpu.sys - ocpu.sys; + 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; + + pbar(myload, barwidth, barheight); + ocpu = ncpu; + } + } + if((counts > 0) && (t-1 > 0)) { + --t; + usleep((unsigned long)(ival * 1000000.0)); + } + else if((counts == 0) && (t == 1)) + usleep((unsigned long)(ival * 1000000.0)); + else + break; + } + + return EXIT_SUCCESS; +} + diff --git a/gadgets/gdbar.c b/gadgets/gdbar.c new file mode 100644 index 0000000..4138770 --- /dev/null +++ b/gadgets/gdbar.c @@ -0,0 +1,154 @@ +/* + gdbar - graphical percentage meter, to be used with dzen + + Copyright (c) 2007 by Robert Manea + +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: + +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 +#include +#include +#include +#include + +#define MAXLEN 512 + +static void pbar (const char *, double, int, int, int); + +char *bg, *fg; + + +static void +pbar(const char* label, double perc, int maxc, int height, int pnl) { + int i, rp; + double l; + + + l = perc * ((double)maxc / 100); + if((int)(l + 0.5) >= (int)l) + l = l + 0.5; + + if((int)(perc + 0.5) >= (int)perc) + rp = (int)(perc + 0.5); + else + rp = (int)perc; + + printf("%s %3d%% ^fg(%s)^r(%dx%d)^fg(%s)^r(%dx%d)%s", + label ? label : "", rp, + fg, (int)l, height, + bg, maxc-(int)l, height, + pnl ? "\n" : ""); +} + + int +main(int argc, char *argv[]) +{ + int i, nv; + double val; + char aval[MAXLEN], *endptr; + + /* defaults */ + int barwidth = 80; + int barheight = 10; + double minval = 0; + double maxval = 100.0; + int print_nl = 1; + const char *label = NULL; + + + for(i=1; i < argc; i++) { + if(!strncmp(argv[i], "-w", 3)) { + if(++i < argc) + barwidth = atoi(argv[i]); + } + else if(!strncmp(argv[i], "-h", 3)) { + if(++i < argc) + barheight = atoi(argv[i]); + } + else if(!strncmp(argv[i], "-fg", 4)) { + if(++i < argc) + fg = argv[i]; + else { + fg = malloc(6); + strcpy(fg, "white"); + } + } + else if(!strncmp(argv[i], "-bg", 4)) { + if(++i < argc) + bg = argv[i]; + else { + bg = malloc(9); + strcpy(bg, "darkgrey"); + } + } + else if(!strncmp(argv[i], "-max", 5)) { + if(++i < argc) { + maxval = strtod(argv[i], &endptr); + if(*endptr) { + fprintf(stderr, "dbar: '%s' incorrect number format", argv[i]); + return EXIT_FAILURE; + } + } + } + else if(!strncmp(argv[i], "-min", 5)) { + if(++i < argc) { + minval = strtod(argv[i], &endptr); + if(*endptr) { + fprintf(stderr, "dbar: '%s' incorrect number format", argv[i]); + return EXIT_FAILURE; + } + } + } + else if(!strncmp(argv[i], "-l", 3)) { + if(++i < argc) + label = argv[i]; + } + else if(!strncmp(argv[i], "-nonl", 6)) { + print_nl = 0; + } + else { + fprintf(stderr, "usage: dbar [-w ] [-h ] [-fg ] [-bg ] [-min ] [-max ] [-l ] [-nonl]\n"); + return EXIT_FAILURE; + } + } + + if(!fg) { + fg = malloc(6); + strcpy(fg, "white"); + } + if(!bg) { + bg = malloc(9); + strcpy(bg, "darkgrey"); + } + + while(fgets(aval, MAXLEN, stdin)) { + nv = sscanf(aval, "%lf %lf %lf", &val, &minval, &maxval); + if(nv == 2) { + maxval = minval; + minval = 0; + } + + pbar(label, (100*(val-minval))/(maxval-minval), barwidth, barheight, print_nl); + } + + return EXIT_SUCCESS; +} + diff --git a/gadgets/kittscanner.sh b/gadgets/kittscanner.sh new file mode 100755 index 0000000..0a99e64 --- /dev/null +++ b/gadgets/kittscanner.sh @@ -0,0 +1,70 @@ +#!/bin/sh +# +# (c) 2007 by Robert Manea +# +# KITT Scanner for dzen - a man, a car, a dzen +# + + +#---[ KITT configuration ]---------------------------------------------- + +SCANNER_LEDS=17 +LED_SPACING=3 +LED_WIDTH=25 +LED_HEIGHT=10 + +INACTIVE_LED_COLOR=darkred +ACTIVE_LED_COLOR=red +BG=black + +SLEEP=0.1 + +DZEN=/usr/local/bin/dzen2 +DZENOPTS="-bg $BG -fg $INACTIVE_LED_COLOR" + +#----------------------------------------------------------------------- + +DFG="^fg(${INACTIVE_LED_COLOR})" +LFG="^fg(${ACTIVE_LED_COLOR})" + +RECT="^r(${LED_WIDTH}x${LED_HEIGHT})" + +i=; j=1; SIGN='+' + +nr_list_leds() { + l=1 + lnr=$1 + + while [ $l -le $lnr ]; do + NRLIST=${NRLIST}' '${l} + l=`expr $l + 1` + done + + echo $NRLIST +} + +while :; do + for i in `nr_list_leds $SCANNER_LEDS`; do + if [ "$i" -eq "$j" ]; then + KBAR=${KBAR}"^p(${LED_SPACING})"${LFG}${RECT}${DFG} + else + KBAR=${KBAR}"^p(${LED_SPACING})"${RECT} + fi + + done + + echo $KBAR; KBAR= + + if [ $SIGN = '+' ] && [ $j -ge $SCANNER_LEDS ]; then + j=$SCANNER_LEDS + SIGN='-' + fi + if [ $SIGN = '-' ] && [ $j -eq 1 ]; then + j=1 + SIGN='+' + fi + + j=`expr $j $SIGN 1` + + sleep $SLEEP; +done | $DZEN $DZENOPTS -- cgit v1.2.3-54-g00ecf