Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2:ARM
WindowMaker-applets
wmmon-1.0b2.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File wmmon-1.0b2.patch of Package WindowMaker-applets
--- wmgeneral/wmgeneral.c +++ wmgeneral/wmgeneral.c @@ -12,6 +12,8 @@ --- CHANGES: --- + 10/10/2003 (Simon Law, sfllaw@debian.org) + * changed the parse_rcfile function to use getline instead of fgets. 02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl) * changed the read_rc_file to parse_rcfile, as suggester by Marcelo E. Magallon * debugged the parse_rc file. @@ -21,6 +23,7 @@ */ +#define _GNU_SOURCE #include <stdlib.h> #include <stdio.h> #include <string.h> @@ -83,17 +86,18 @@ void parse_rcfile(const char *filename, rckeys *keys) { char *p; - char temp[128]; + char *line = NULL; + size_t line_size = 0; char *tokens = " :\t\n"; FILE *fp; int i,key; fp = fopen(filename, "r"); if (fp) { - while (fgets(temp, 128, fp)) { + while (getline(&line, &line_size, fp) >= 0) { key = 0; while (key >= 0 && keys[key].label) { - if ((p = strstr(temp, keys[key].label))) { + if ((p = strstr(line, keys[key].label))) { p += strlen(keys[key].label); p += strspn(p, tokens); if ((i = strcspn(p, "#\n"))) p[i] = 0; @@ -270,6 +274,7 @@ unsigned int borderwidth = 1; XClassHint classHint; char *display_name = NULL; + char *geometry = NULL; char *wname = argv[0]; XTextProperty name; @@ -282,7 +287,9 @@ for (i=1; argv[i]; i++) { if (!strcmp(argv[i], "-display")) - display_name = argv[i+1]; + display_name = argv[++i]; + else if (!strcmp(argv[i], "-geometry")) + geometry = argv[++i]; } if (!(display = XOpenDisplay(display_name))) { @@ -307,7 +314,11 @@ fore_pix = GetColor("black"); XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints, - &mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy); + &mysizehints.x, &mysizehints.y, + &mysizehints.width, &mysizehints.height, &dummy); + if (geometry) + XParseGeometry(geometry, &mysizehints.x, &mysizehints.y, + &mysizehints.width, &mysizehints.height); mysizehints.width = 64; mysizehints.height = 64; @@ -364,3 +375,6 @@ XMapWindow(display, win); } + +/* vim: sw=4 ts=4 columns=82 + */ --- wmmon/Makefile +++ wmmon/Makefile @@ -7,7 +7,7 @@ .c.o: - cc -c -O2 -Wall $< -o $*.o + cc -c -O2 -Wall $< -o $*.o $(CFLAGS) wmmon: $(OBJS) cc -o wmmon $^ $(LIBDIR) $(LIBS) --- wmmon/wmmon.c +++ wmmon/wmmon.c @@ -28,6 +28,12 @@ Changes: ---- + 15/05/2004 (Simon Law, sfllaw@debian.org) + * Support disabling of mode-cycling + 23/10/2003 (Simon Law, sfllaw@debian.org) + * Eliminated exploitable static buffers + * Added -geometry support. + * /proc/meminfo support for Linux 2.6 18/05/1998 (Antoine Nulle, warp@xs4all.nl) * MEM/SWAP/UPTIME only updated when visible * Using global file descriptors to reduce file @@ -65,6 +71,7 @@ * First Working Version */ +#define _GNU_SOURCE #include <stdlib.h> #include <stdio.h> #include <time.h> @@ -100,31 +107,28 @@ /* Global Variables */ /********************/ -char *ProgName; int stat_current = 0; /* now global */ +int mode_cycling = 1; /* Allow mode-cycling */ FILE *fp_meminfo; FILE *fp_stat; FILE *fp_loadavg; /* functions */ -void usage(void); +void usage(char*); void printversion(void); void DrawStats(int *, int, int, int, int); void DrawStats_io(int *, int, int, int, int); void wmmon_routine(int, char **); -void main(int argc, char *argv[]) { +int main(int argc, char *argv[]) { int i; + char *name = argv[0]; /* Parse Command Line */ - ProgName = argv[0]; - if (strlen(ProgName) >= 5) - ProgName += (strlen(ProgName) - 5); - for (i=1; i<argc; i++) { char *arg = argv[i]; @@ -132,13 +136,17 @@ switch (arg[1]) { case 'd' : if (strcmp(arg+1, "display")) { - usage(); - exit(1); + usage(name); + return 1; } break; - case 'v' : - printversion(); - exit(0); + case 'g' : + if (strcmp(arg+1, "geometry")) { + usage(name); + return 1; + } + case 'l' : + mode_cycling = 0; break; case 'i' : stat_current = 1; @@ -146,15 +154,20 @@ case 's' : stat_current = 2; break; + case 'v' : + printversion(); + return 0; default: - usage(); - exit(0); - break; + usage(name); + return 1; } } } wmmon_routine(argc, argv); + + exit (0); + } /*******************************************************************************\ @@ -214,8 +227,7 @@ long idle; FILE *fp; - char temp[128]; - char *p; + char *conffile = NULL; int xpm_X = 0, xpm_Y = 0; @@ -246,16 +258,21 @@ if (RIGHT_ACTION) right_action = strdup(RIGHT_ACTION); if (MIDDLE_ACTION) middle_action = strdup(MIDDLE_ACTION); - strcpy(temp, "/etc/wmmonrc"); - parse_rcfile(temp, wmmon_keys); + /* Scan through the .rc files */ + if (asprintf(&conffile, "/etc/wmmonrc") >= 0) { + parse_rcfile(conffile, wmmon_keys); + free(conffile); + } - p = getenv("HOME"); - strcpy(temp, p); - strcat(temp, "/.wmmonrc"); - parse_rcfile(temp, wmmon_keys); - - strcpy(temp, "/etc/wmmonrc.fixed"); - parse_rcfile(temp, wmmon_keys); + if (asprintf(&conffile, "%s/.wmmonrc", getenv("HOME")) >= 0) { + parse_rcfile(conffile, wmmon_keys); + free(conffile); + } + + if (asprintf(&conffile, "/etc/wmmonrc.fixed") >= 0) { + parse_rcfile(conffile, wmmon_keys); + free(conffile); + } stat_online = checksysdevs(); @@ -269,26 +286,36 @@ starttime = time(0); nexttime = starttime + 10; + /* Collect information on each panel */ for (i=0; i<stat_online; i++) { get_statistics(stat_device[i].name, &k, &istat, &idle); stat_device[i].statlast = istat; stat_device[i].idlelast = idle; } - if (stat_current == 0) DrawStats(stat_device[stat_current].his, 54, 40, 5, 58); - if (stat_current == 1) { - DrawStats_io(stat_device[stat_current].his, 54, 40, 5, 58); - } - if (stat_current == 2) { - xpm_X = 64; - setMaskXY(-64, 0); - } else { - xpm_X = 0; - setMaskXY(0, 0); + + /* Set the mask for the current window */ + switch (stat_current) { + case 0: + case 1: + xpm_X = 0; + setMaskXY(0, 0); + break; + case 2: + xpm_X = 64; + setMaskXY(-64, 0); + default: + break; } + + /* Draw statistics */ + if (stat_current == 0) + DrawStats(stat_device[stat_current].his, 54, 40, 5, 58); + if (stat_current == 1) + DrawStats_io(stat_device[stat_current].his, 54, 40, 5, 58); DrawActive(stat_device[stat_current].name); while (1) { - curtime = time(0); + curtime = time(NULL); waitpid(0, NULL, WNOHANG); @@ -377,6 +404,9 @@ if (curtime >= nexttime) { nexttime+=10; + if (curtime > nexttime) /* dont let APM suspends make this crazy */ + nexttime = curtime; + for (i=0; i<stat_online; i++) { if (stat_device[i].his[54]) stat_device[i].his[54] /= stat_device[i].hisaddcnt; @@ -411,7 +441,7 @@ break; case ButtonRelease: i = CheckMouseRegion(Event.xbutton.x, Event.xbutton.y); - if (but_stat == i && but_stat >= 0) { + if (but_stat == i && but_stat >= 0 && mode_cycling) { switch (but_stat) { case 0: switch (Event.xbutton.button) { @@ -430,7 +460,6 @@ } case 1: stat_current++; - printf("current stat is :%d\n", stat_current); if (stat_current == stat_online) stat_current = 0; @@ -499,43 +528,80 @@ void update_stat_mem(stat_dev *st, stat_dev *st2) { - char temp[128]; + static char *line = NULL; + static size_t line_size = 0; + + unsigned long swapfree; unsigned long free, shared, buffers, cached; freopen("/proc/meminfo", "r", fp_meminfo); - while (fgets(temp, 128, fp_meminfo)) { - if (strstr(temp, "Mem:")) { - sscanf(temp, "Mem: %ld %ld %ld %ld %ld %ld", - &st->rt_idle, &st->rt_stat, - &free, &shared, &buffers, &cached); - st->rt_idle >>= 10; - st->rt_stat -= buffers+cached; - st->rt_stat >>= 10; -// break; - } - if (strstr(temp, "Swap:")) { - sscanf(temp, "Swap: %ld %ld", &st2->rt_idle, &st2->rt_stat); - st2->rt_idle >>= 10; - st2->rt_stat >>= 10; - break; + while ((getline(&line, &line_size, fp_meminfo)) > 0) { + /* The original format for the first two lines of /proc/meminfo was + * Mem: total used free shared buffers cached + * Swap: total used free + * + * As of at least 2.5.47 these two lines were removed, so that the + * required information has to come from the rest of the lines. + * On top of that, used is no longer recorded - you have to work + * this out yourself, from total - free. + * + * So, these changes below should work. They should also work with + * older kernels, too, since the new format has been available for + * ages. + */ + if (strstr(line, "MemTotal:")) { + sscanf(line, "MemTotal: %ld", &st->rt_idle); + } + else if (strstr(line, "MemFree:")) { + sscanf(line, "MemFree: %ld", &free); + } + else if (strstr(line, "MemShared:")) { + sscanf(line, "MemShared: %ld", &shared); + } + else if (strstr(line, "Buffers:")) { + sscanf(line, "Buffers: %ld", &buffers); + } + else if (strstr(line, "Cached:")) { + sscanf(line, "Cached: %ld", &cached); + } + else if (strstr(line, "SwapTotal:")) { + sscanf(line, "SwapTotal: %ld", &st2->rt_idle); + } + else if (strstr(line, "SwapFree:")) { + sscanf(line, "SwapFree: %ld", &swapfree); } } + + /* memory use - rt_stat is the amount used, it seems, and this isn't + * recorded in current version of /proc/meminfo (as of 2.5.47), so we + * calculate it from MemTotal - MemFree + */ + st->rt_stat = st->rt_idle - free; + st->rt_stat -= buffers+cached; + /* As with the amount of memory used, it's not recorded any more, so + * we have to calculate it ourselves. + */ + st2->rt_stat = st2->rt_idle - swapfree; } void update_stat_swp(stat_dev *st) { - char temp[128]; + static char *line = NULL; + static size_t line_size = 0; + unsigned long swapfree; fseek(fp_meminfo, 0, SEEK_SET); - while (fgets(temp, 128, fp_meminfo)) { - if (strstr(temp, "Swap:")) { - sscanf(temp, "Swap: %ld %ld", &st->rt_idle, &st->rt_stat); - st->rt_idle >>= 10; - st->rt_stat >>= 10; - break; + while ((getline(&line, &line_size, fp_meminfo)) > 0) { + /* As with update_stat_mem(), the format change to /proc/meminfo has + * forced some changes here. */ + if (strstr(line, "SwapTotal:")) { + sscanf(line, "SwapTotal: %ld", &st->rt_idle); + } + else if (strstr(line, "SwapFree:")) { + sscanf(line, "SwapFree: %ld", &swapfree); } } - + st->rt_stat = st->rt_idle - swapfree; } /*******************************************************************************\ @@ -545,11 +611,11 @@ void get_statistics(char *devname, long *is, long *ds, long *idle) { int i; - char temp[128]; + static char *line = NULL; + static size_t line_size = 0; char *p; char *tokens = " \t\n"; float f; - long maxdiskio=0; *is = 0; *ds = 0; @@ -557,9 +623,9 @@ if (!strncmp(devname, "cpu", 3)) { fseek(fp_stat, 0, SEEK_SET); - while (fgets(temp, 128, fp_stat)) { - if (strstr(temp, "cpu")) { - p = strtok(temp, tokens); + while ((getline(&line, &line_size, fp_stat)) > 0) { + if (strstr(line, "cpu ")) { + p = strtok(line, tokens); /* 1..3, 4 == idle, we don't want idle! */ for (i=0; i<3; i++) { p = strtok(NULL, tokens); @@ -577,17 +643,35 @@ if (!strncmp(devname, "i/o", 3)) { fseek(fp_stat, 0, SEEK_SET); - while (fgets(temp, 128, fp_stat)) { - if (strstr(temp, "disk_rio") || strstr(temp, "disk_wio")) { - p = strtok(temp, tokens); + while ((getline(&line, &line_size, fp_stat)) > 0) { + if (strstr(line, "disk_rio") || strstr(line, "disk_wio")) { + p = strtok(line, tokens); /* 1..4 */ for (i=0; i<4; i++) { p = strtok(NULL, tokens); *ds += atol(p); } } + else if (strstr(line, "disk_io")) { + int val; + unsigned int a, b, c, d, e, h, g; + + p = strtok(line, tokens); + + while ((p = strtok(NULL, tokens))) { + val = sscanf (p, + "(%d,%d):(%d,%d,%d,%d,%d)", + &a, &b, &c, &d, &e, &h, + &g); + + if (val != 7) + continue; + + *ds += d; + *ds += h; + } + } } - if (*ds > maxdiskio) maxdiskio = *ds; } } @@ -715,16 +799,17 @@ |* usage *| \*******************************************************************************/ -void usage(void) { - - fprintf(stderr, "\nwmmon - programming: tijno, (de)bugging & design warp, webhosting: bobby\n\n"); - fprintf(stderr, "usage:\n"); - fprintf(stderr, "\t-display <display name>\n"); - fprintf(stderr, "\t-h\tthis screen\n"); - fprintf(stderr, "\t-v\tprint the version number\n"); - fprintf(stderr, "\t-i\tstartup in DiskIO mode\n"); - fprintf(stderr, "\t-s\tstartup in SysInfo mode\n"); - fprintf(stderr, "\n"); +void usage(char *name) { + printf("Usage: %s [OPTION]...\n", name); + printf("WindowMaker dockapp that displays system information.\n"); + printf("\n"); + printf(" -display DISPLAY contact the DISPLAY X server\n"); + printf(" -geometry GEOMETRY position the clock at GEOMETRY\n"); + printf(" -l locked view - cannot cycle modes\n"); + printf(" -i start in Disk I/O mode\n"); + printf(" -s start in System Info mode\n"); + printf(" -h display this help and exit\n"); + printf(" -v output version information and exit\n"); } /*******************************************************************************\ @@ -733,7 +818,7 @@ void printversion(void) { - if (!strcmp(ProgName, "wmmon")) { - fprintf(stderr, "%s\n", WMMON_VERSION); - } + printf("WMMon version %s\n", WMMON_VERSION); } +/* vim: sw=4 ts=4 columns=82 + */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor