summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'x11-plugins/wmsysmon/files/wmsysmon-0.7.6-s4t4n.patch')
-rw-r--r--x11-plugins/wmsysmon/files/wmsysmon-0.7.6-s4t4n.patch1338
1 files changed, 0 insertions, 1338 deletions
diff --git a/x11-plugins/wmsysmon/files/wmsysmon-0.7.6-s4t4n.patch b/x11-plugins/wmsysmon/files/wmsysmon-0.7.6-s4t4n.patch
deleted file mode 100644
index 7858b559144e..000000000000
--- a/x11-plugins/wmsysmon/files/wmsysmon-0.7.6-s4t4n.patch
+++ /dev/null
@@ -1,1338 +0,0 @@
-diff -Naur wmsysmon-0.7.6-orig/src/Makefile wmsysmon-0.7.6-new/src/Makefile
---- wmsysmon-0.7.6-orig/src/Makefile 2000-07-29 00:17:51.000000000 +0200
-+++ wmsysmon-0.7.6-new/src/Makefile 2004-07-17 17:40:45.815818128 +0200
-@@ -3,11 +3,12 @@
- LIBDIR += -L/usr/X11R6/lib
- LDFLAGS += -lXpm -lXext -lX11 -lm -s
- #CFLAGS = -g #-DMONDEBUG
--CFLAGS += -O3 -m486 -fomit-frame-pointer -I/usr/X11R6/include #-DHI_INTS #undefine HI_INTS if your x86 SMP or alpha
-+CFLAGS += ${GENTOO_CFLAGS} -W -Wall -pedantic -I/usr/X11R6/include #-DHI_INTS #undefine HI_INTS if your x86 SMP or alpha
-
- BIN = wmsysmon
- OBJS = wmgeneral.o \
-- wmsysmon.o
-+ wmsysmon.o \
-+ cpu_linux.o
-
- $(BIN): $(OBJS)
- $(CC) -o $(BIN) $(OBJS) $(LIBDIR) $(LDFLAGS)
-diff -Naur wmsysmon-0.7.6-orig/src/cpu.h wmsysmon-0.7.6-new/src/cpu.h
---- wmsysmon-0.7.6-orig/src/cpu.h 1970-01-01 01:00:00.000000000 +0100
-+++ wmsysmon-0.7.6-new/src/cpu.h 2004-01-02 01:20:19.000000000 +0100
-@@ -0,0 +1,28 @@
-+/*
-+ * cpu.h - header file of the module to get cpu usage
-+ *
-+ * Copyright (c) 2001 Seiichi SATO <ssato@sh.rim.or.jp>
-+ *
-+ * licensed under the GPL
-+ */
-+
-+#ifndef __CPU_H
-+#define __CPU_H
-+
-+/*#ifdef IGNORE_PROC*/
-+#define COMM_LEN 16
-+/*#endif*/
-+#define MAX_PROC 5
-+
-+
-+typedef struct _cpu_options {
-+ int ignore_nice;
-+ int cpu_number;
-+ char *ignore_proc_list[MAX_PROC];
-+ int ignore_procs;
-+} cpu_options;
-+
-+void cpu_init(void);
-+int cpu_get_usage(cpu_options *opts);
-+
-+#endif
-diff -Naur wmsysmon-0.7.6-orig/src/cpu_linux.c wmsysmon-0.7.6-new/src/cpu_linux.c
---- wmsysmon-0.7.6-orig/src/cpu_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ wmsysmon-0.7.6-new/src/cpu_linux.c 2003-09-10 17:19:54.000000000 +0200
-@@ -0,0 +1,182 @@
-+/*
-+ * cpu_linux.c - module to get cpu usage, for GNU/Linux
-+ *
-+ * Copyright (C) 2001, 2002 Seiichi SATO <ssato@sh.rim.or.jp>
-+ *
-+ * licensed under the GPL
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include "cpu.h"
-+
-+#include <dirent.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <linux/limits.h>
-+
-+#ifdef USE_SMP
-+#include <linux/threads.h>
-+#endif
-+
-+static void set_pidlist_from_namelist(int names, char **name_list);
-+static int get_cpuusage_bypid(pid_t pid);
-+
-+static int *pid_list;
-+static int pids;
-+
-+void cpu_init(void)
-+{
-+ /* You don't need initialization under GNU/Linux */
-+ return;
-+}
-+
-+/* returns current cpu usage in percent */
-+int
-+cpu_get_usage(cpu_options *opts)
-+{
-+ static int pre_used, pre_total;
-+ static int pre_ig_used;
-+ int usage;
-+ int cpu, nice, system, idle;
-+ int used = 0, total = 0;
-+ int ig_used = 0;
-+ int i;
-+
-+ FILE *fp;
-+ if (!(fp = fopen("/proc/stat", "r"))) {
-+ perror("can't open /proc/stat");
-+ exit(1);
-+ }
-+
-+ fscanf(fp, "%*s %d %d %d %d", &cpu, &nice, &system, &idle);
-+
-+#ifdef USE_SMP
-+ if (opts->cpu_number >= 0) {
-+ char cpu_name[20];
-+ if (opts->cpu_number > NR_CPUS - 1) {
-+ fprintf (stderr, "MAX CPU number that can be running in SMP is %d\n", NR_CPUS - 1);
-+ exit(1);
-+ }
-+
-+ for (i = 0; i <= opts->cpu_number; i++) {
-+ fscanf(fp, "%s %d %d %d %d", cpu_name, &cpu, &nice, &system, &idle);
-+ if (strncmp(cpu_name, "cpu", 3)){
-+ fprintf (stderr, "can't find cpu%d!\n", opts->cpu_number);
-+ exit (1);
-+ }
-+ }
-+ }
-+#endif /* USE_SMP */
-+
-+ fclose(fp);
-+ used = cpu + system;
-+ if (!opts->ignore_nice)
-+ used += nice;
-+ total = cpu + nice + system + idle;
-+
-+ /* get CPU usage of processes which specified by name with '-p' option */
-+ if (opts->ignore_procs) {
-+ pids = 0;
-+ if (!(pid_list = malloc(sizeof(pid_t)))) {
-+ perror("malloc");
-+ exit(1);
-+ }
-+ set_pidlist_from_namelist(opts->ignore_procs, opts->ignore_proc_list);
-+ for (i = 0; i < pids; i++)
-+ ig_used += get_cpuusage_bypid(pid_list[i]);
-+ free(pid_list);
-+ }
-+
-+ /* calc CPU usage */
-+ if ((pre_total == 0) || !(total - pre_total > 0)) {
-+ usage = 0;
-+ } else if (ig_used - pre_ig_used > 0) {
-+ usage = (100 * (double)(used - pre_used - ig_used + pre_ig_used)) /
-+ (double)(total - pre_total);
-+ } else {
-+ usage = (100 * (double)(used - pre_used)) / (double)(total - pre_total);
-+ }
-+
-+ /* save current values for next calculation */
-+ pre_ig_used = ig_used;
-+ pre_used = used;
-+ pre_total = total;
-+
-+ /* noberasco michele: quick hack
-+ on my machine cpu usage goes over 100, will have to tell
-+ wmcpumon author about this */
-+ if (usage > 100) usage = 100;
-+ /* end of quick hack */
-+
-+ return usage;
-+}
-+
-+/* set pid list table from command names */
-+static void
-+set_pidlist_from_namelist(int names, char **name_list)
-+{
-+ DIR *dir;
-+ struct dirent *de;
-+ FILE *fp;
-+ char path[PATH_MAX + 1];
-+ char comm[COMM_LEN];
-+ pid_t pid;
-+ int i;
-+
-+ if (!(dir = opendir("/proc"))) {
-+ perror("can't open /proc");
-+ exit(1);
-+ }
-+
-+ /* search specified process from all processes */
-+ chdir("/proc");
-+ while ((de = readdir(dir)) != NULL) {
-+ if ((de->d_name[0] != '.') &&
-+ ((de->d_name[0] >= '0') && (de->d_name[0] <= '9'))) {
-+ pid = (pid_t) atoi(de->d_name);
-+ sprintf(path, "%d/stat", pid);
-+ if ((fp = fopen(path, "r")) != NULL) {
-+ fscanf(fp, "%*d (%[^)]", comm);
-+ for (i = 0; i < names; i++) {
-+ if (strcmp(comm, name_list[i]) == 0) {
-+ /* add process id to list */
-+ pids++;
-+ if (!(pid_list=realloc(pid_list, pids*sizeof(pid_t)))){
-+ perror("realloc() failed");
-+ exit(1);
-+ }
-+ pid_list[pids - 1] = pid;
-+ }
-+ }
-+ fclose(fp);
-+ }
-+ }
-+ }
-+ closedir(dir);
-+}
-+
-+static int
-+get_cpuusage_bypid(pid_t pid)
-+{
-+ FILE *fp;
-+ char path[PATH_MAX];
-+ int utime = 0, stime = 0;
-+ int ret = 0;
-+
-+ sprintf(path, "/proc/%d/stat", pid);
-+ if ((fp = fopen(path, "r")) != NULL) {
-+ fscanf(fp, "%*d %*s %*s %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %d %d ",
-+ &utime, &stime);
-+ fclose(fp);
-+ }
-+
-+ ret = utime + stime;
-+ return ret;
-+}
-diff -Naur wmsysmon-0.7.6-orig/src/wmsysmon.c wmsysmon-0.7.6-new/src/wmsysmon.c
---- wmsysmon-0.7.6-orig/src/wmsysmon.c 2000-07-11 13:33:59.000000000 +0200
-+++ wmsysmon-0.7.6-new/src/wmsysmon.c 2004-01-03 19:17:21.000000000 +0100
-@@ -2,21 +2,21 @@
- wmsysmon -- system monitoring dockapp
-
- Copyright (C) 1998-1999 Dave Clark - clarkd@skynet.ca
-- Copyright (C) 2000 Vito Caputo - swivel@gnugeneration.com
-+ Copyright (C) 2000 Vito Caputo - swivel@gnugeneration.com
-
-- wmsysmon is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- wmsysmon is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ wmsysmon is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ wmsysmon is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
- #include <stdlib.h>
-@@ -42,6 +42,7 @@
- #endif
-
- #include "wmgeneral.h"
-+#include "cpu.h"
-
- #ifdef HI_INTS
- #include "wmsysmon-master-alpha.xpm"
-@@ -78,26 +79,32 @@
- #define INT_LITES (1)
- #define INT_METERS (2)
-
--char wmsysmon_mask_bits[64*64];
--int wmsysmon_mask_width = 64;
--int wmsysmon_mask_height = 64;
-+/* for CPU percetage */
-+#define CPUNUM_NONE -1
-+cpu_options cpu_opts;
-+
-+char wmsysmon_mask_bits[64*64];
-+int wmsysmon_mask_width = 64;
-+int wmsysmon_mask_height = 64;
-
--long start_time = 0;
--long start_uptime = 0;
-+long start_time = 0;
-+long start_uptime = 0;
- int counter = 0;
--int Mem_l; /* line in /proc/meminfo "Mem:" is on */
--int Swap_l; /* line in /proc/meminfo "Swap:" is on */
--int intr_l; /* line in /proc/stat "intr" is on */
--int rio_l; /* line in /proc/stat "disk_rio" is on */
--int wio_l; /* line in /proc/stat "disk_wio" is on */
--int page_l; /* line in /proc/stat "page" is on */
--int swap_l; /* line in /proc/stat "swap" is on */
--
--long io_max;
--long io_max_diff;
-+int intr_l; /* line in /proc/stat "intr" is on */
-+int rio_l; /* line in /proc/stat "disk_rio" is on */
-+int wio_l; /* line in /proc/stat "disk_wio" is on */
-+int page_l; /* line in /proc/stat "page" is on */
-+int swap_l; /* line in /proc/stat "swap" is on */
-
- int meter[4][2];
-
-+typedef enum
-+{
-+ IS_2_6 = 0,
-+ IS_OTHER
-+} kernel_versions;
-+kernel_versions kernel_version;
-+
- #ifdef HI_INTS
- long _last_ints[24];
- long _ints[24];
-@@ -120,6 +127,7 @@
- char buf[1024];
- FILE *statfp;
- FILE *memfp;
-+FILE *vmstatfp;
-
- int update_rate = 100000;
-
-@@ -129,6 +137,7 @@
- time_t prevtime;
-
-
-+kernel_versions Get_Kernel_version(void);
- void usage(void);
- void printversion(void);
- void BlitString(char *name, int x, int y);
-@@ -139,9 +148,11 @@
- void DrawUptime(void);
- void DrawStuff( void );
- void DrawMem( void );
-+void DrawCpuPercentage( void );
- void DrawMeter(unsigned int, unsigned int, int, int);
-
--int main(int argc, char *argv[]) {
-+int main(int argc, char *argv[])
-+{
- int i;
- #ifdef PROF
- TAU_PROFILE_TIMER(tautimer, "main()", "int(int, char **)", TAU_DEFAULT);
-@@ -162,52 +173,91 @@
-
- last_ints = _last_ints;
- ints = _ints;
--
-- /* Parse Command Line */
-
-+ /* some defaults for CPU percentage */
-+ cpu_opts.ignore_nice = False;
-+ cpu_opts.cpu_number = CPUNUM_NONE;
-+ cpu_opts.ignore_procs = 0;
-+
-+ kernel_version = Get_Kernel_version();
-+
-+ /* Parse Command Line */
- ProgName = argv[0];
- if (strlen(ProgName) >= 5)
- ProgName += (strlen(ProgName) - 5);
-
-- for (i = 1; i < argc; i++) {
-+ for (i = 1; i < argc; i++)
-+ {
- char *arg = argv[i];
-
-- if (*arg == '-') {
-- switch (arg[1]) {
-- case 'd':
-- if (strcmp(arg + 1, "display")) {
-- usage();
-- exit(1);
-- }
-- break;
-- case 'g':
-- if (strcmp(arg+1, "geometry")) {
-- usage();
-- exit(1);
-- }
-- break;
-- case 'v':
-- printversion();
-- exit(0);
-- break;
-- case 'r':
-- if (argc > (i + 1)) {
-- update_rate = (atoi(argv[i + 1]) * 1000);
-+ if (*arg == '-')
-+ {
-+ switch (arg[1])
-+ {
-+ case 'd':
-+ if (strcmp(arg + 1, "display"))
-+ {
-+ usage();
-+ exit(1);
-+ }
-+ break;
-+ case 'g':
-+ if (strcmp(arg+1, "geometry"))
-+ {
-+ usage();
-+ exit(1);
-+ }
-+ break;
-+ case 'v':
-+ printversion();
-+ exit(0);
-+ break;
-+ case 'r':
-+ if (argc > (i + 1))
-+ {
-+ update_rate = (atoi(argv[i + 1]) * 1000);
-+ i++;
-+ }
-+ break;
-+ case 'l':
-+ int_mode = INT_LITES;
-+ break;
-+ case 'n':
-+ cpu_opts.ignore_nice = True;
-+ break;
-+ case 'p':
-+ if (argc == (i + 1))
-+ {
-+ fprintf(stderr, "Option -p needs an argument!\n");
-+ exit(1);
-+ }
- i++;
-- }
-- break;
-- case 'l':
-- int_mode = INT_LITES;
-- break;
--
-- default:
-- usage();
-- exit(0);
-- break;
-+ if (strlen(argv[i]) >= COMM_LEN)
-+ {
-+ fprintf(stderr, "Command name %s is longer than 15 characters\n", argv[i]);
-+ exit(1);
-+ }
-+ if (cpu_opts.ignore_procs == MAX_PROC)
-+ {
-+ fprintf(stderr, "Maximum number of command names is %d\n", MAX_PROC);
-+ exit(1);
-+ }
-+ cpu_opts.ignore_proc_list[cpu_opts.ignore_procs] = argv[i];
-+ cpu_opts.ignore_procs++;
-+ break;
-+
-+ default:
-+ usage();
-+ exit(0);
-+ break;
- }
- }
- }
-
-+ /* Init CPU percentage stuff */
-+ /* NOT NEEDED ON LINUX */
-+ /* cpu_init(); */
-+
- wmsysmon_routine(argc, argv);
-
- #ifdef PROF
-@@ -225,25 +275,24 @@
- int x = 0;
- #endif
- XEvent Event;
-- int but_stat = -1;
- FILE *fp;
--
-+
- #ifdef PROF
- TAU_PROFILE_TIMER(tautimer, "wmsysmon_routine()", "(int, char **)", TAU_DEFAULT);
- TAU_PROFILE_START(tautimer);
- #endif
-
- createXBMfromXPM(wmsysmon_mask_bits, wmsysmon_master_xpm, wmsysmon_mask_width, wmsysmon_mask_height);
--
-+
- openXwindow(argc, argv, wmsysmon_master_xpm, wmsysmon_mask_bits, wmsysmon_mask_width, wmsysmon_mask_height);
-
-- /* init ints */
-+ /* init ints */
- bzero(&_last_ints, sizeof(_last_ints));
- bzero(&_ints, sizeof(_ints));
- bzero(&int_peaks, sizeof(int_peaks));
-
--
-- /* init uptime */
-+
-+ /* init uptime */
- fp = fopen("/proc/uptime", "r");
- if (fp) {
- fscanf(fp, "%ld", &start_time);
-@@ -253,350 +302,328 @@
-
- statfp = fopen("/proc/stat", "r");
- memfp = fopen("/proc/meminfo", "r");
-+ if (kernel_version == IS_2_6) vmstatfp = fopen("/proc/vmstat", "r");
-+
-
-- /* here we find tags in /proc/stat & /proc/meminfo and note their
-+ /* here we find tags in /proc/stat and note their
- * lines, for faster lookup throughout execution.
- */
-- /* /proc/meminfo */
-- for(i = 0; fgets(buf, 1024, memfp); i++) {
-- if(strstr(buf, "Mem:")) Mem_l = i;
-- else if(strstr(buf, "Swap:")) Swap_l = i;
-- }
--
-- /* /proc/stat */
- for(i = 0; fgets(buf, 1024, statfp); i++) {
-- if(strstr(buf, "disk_wio")) wio_l = i;
-- else if(strstr(buf, "disk_rio")) rio_l = i;
-- else if(strstr(buf, "page")) page_l = i;
-- else if(strstr(buf, "swap")) swap_l = i;
-- else if(strstr(buf, "intr")) intr_l = i;
-+ if (kernel_version == IS_OTHER)
-+ {
-+ if(strstr(buf, "page")) page_l = i;
-+ if(strstr(buf, "swap")) swap_l = i;
-+ }
-+ if(strstr(buf, "intr")) intr_l = i;
- }
-
- #ifdef PROF
- while (x < 1000) {
- #else
-- while(1) {
-+ while(1) {
- #endif
--
-- curtime = time(0);
-
--#if 1
-- DrawUptime();
-- DrawStuff();
-- DrawMem();
-- RedrawWindow();
--#endif
--
-- /* X Events */
-- while (XPending(display)) {
-- XNextEvent(display, &Event);
-- switch (Event.type) {
-- case Expose:
-- DirtyWindow(Event.xexpose.x,
-- Event.xexpose.y,
-- Event.xexpose.width,
-- Event.xexpose.height);
-- break;
-- case DestroyNotify:
-- XCloseDisplay(display);
-- exit(0);
-- break;
-+ curtime = time(0);
-
-- default:
-+#if 1
-+ DrawCpuPercentage();
-+ DrawUptime();
-+ DrawStuff();
-+ DrawMem();
-+ RedrawWindow();
-+#endif
-+
-+ /* X Events */
-+ while (XPending(display)) {
-+ XNextEvent(display, &Event);
-+ switch (Event.type) {
-+ case Expose:
-+ DirtyWindow(Event.xexpose.x,
-+ Event.xexpose.y,
-+ Event.xexpose.width,
-+ Event.xexpose.height);
-+ break;
-+ case DestroyNotify:
-+ XCloseDisplay(display);
-+ exit(0);
-+ break;
- #ifdef MONDEBUG
-- printf("got: %i\n", Event.type);
-+ default:
-+ printf("got: %i\n", Event.type);
- #endif
-+ }
- }
-- }
- #ifdef PROF
-- x++;
-+ x++;
- #endif
-
-- usleep(update_rate);
-- }
-+ usleep(update_rate);
-+ }
- #ifdef PROF
-- TAU_PROFILE_STOP(tautimer);
-+ TAU_PROFILE_STOP(tautimer);
- #endif
--}
-+ }
-
-
--void DrawMeter(unsigned int level, unsigned int peak, int dx, int dy)
--{
-- static unsigned int a;
-+ void DrawMeter(unsigned int level, unsigned int peak, int dx, int dy)
-+ {
-+ static unsigned int a;
- #ifdef PROF
-- TAU_PROFILE_TIMER(tautimer, "DrawMeter()", "(int, unsigned int, int, int)", TAU_DEFAULT);
-- TAU_PROFILE_START(tautimer);
-+ TAU_PROFILE_TIMER(tautimer, "DrawMeter()", "(int, unsigned int, int, int)", TAU_DEFAULT);
-+ TAU_PROFILE_START(tautimer);
- #endif
-
-- /* meters are on a per interruptscale, dictated by the peak, maintain
-- * this peak outside of here, you can use a fixed peak for all ints but
-- * since we're using only 4 lines for our level, the timer interrupt
-- * usually kills the peak for the others so they never move. */
--
-- if(peak) {
-- a = level * 3 / peak;
-- } else a = 0;
-+ /* meters are on a per interruptscale, dictated by the peak, maintain
-+ * this peak outside of here, you can use a fixed peak for all ints but
-+ * since we're using only 4 lines for our level, the timer interrupt
-+ * usually kills the peak for the others so they never move. */
-+
-+ if(peak) {
-+ a = level * 3 / peak;
-+ } else a = 0;
-
- #ifdef MONDEBUG
-- printf("level: %u peak: %u selection: %u\n", level, peak, a);
-- fflush(stdout);
-+ printf("level: %u peak: %u selection: %u\n", level, peak, a);
-+ fflush(stdout);
- #endif
-
-- if(a > 3) a = 3;
-+ if(a > 3) a = 3;
-
-- copyXPMArea(meter[a][0],
-- meter[a][1],
-- VBAR_W,
-- VBAR_H,
-- dx,
-- dy);
-+ copyXPMArea(meter[a][0],
-+ meter[a][1],
-+ VBAR_W,
-+ VBAR_H,
-+ dx,
-+ dy);
- #ifdef PROF
-- TAU_PROFILE_STOP(tautimer);
-+ TAU_PROFILE_STOP(tautimer);
- #endif
--}
-+ }
-
-
-
--void DrawBar(int sx, int sy, int w, int h, float percent, int dx, int dy)
--{
-- static int tx;
-+ void DrawBar(int sx, int sy, int w, int h, float percent, int dx, int dy)
-+ {
-+ static int tx;
- #ifdef PROF
-- TAU_PROFILE_TIMER(tautimer, "DrawBar()", "(int, int, int, int, float, int, int)", TAU_DEFAULT);
-- TAU_PROFILE_START(tautimer);
-+ TAU_PROFILE_TIMER(tautimer, "DrawBar()", "(int, int, int, int, float, int, int)", TAU_DEFAULT);
-+ TAU_PROFILE_START(tautimer);
- #endif
-
-- tx = (float)((float)w * ((float)percent / (float)100.0));
-+ tx = (float)((float)w * ((float)percent / (float)100.0));
-
-- copyXPMArea(sx, sy, tx, h, dx, dy);
-+ copyXPMArea(sx, sy, tx, h, dx, dy);
-
-- copyXPMArea(sx, sy + h + 1, w - tx, h, dx + tx, dy);
-+ copyXPMArea(sx, sy + h + 1, w - tx, h, dx + tx, dy);
-
- #ifdef PROF
-- TAU_PROFILE_STOP(tautimer);
-+ TAU_PROFILE_STOP(tautimer);
- #endif
--}
-+ }
-
-
--void DrawLite(int state, int dx, int dy)
--{
-+ void DrawLite(int state, int dx, int dy)
-+ {
- #ifdef PROF
-- TAU_PROFILE_TIMER(tautimer, "DrawLite()", "(int, int, int)", TAU_DEFAULT);
-- TAU_PROFILE_START(tautimer);
-+ TAU_PROFILE_TIMER(tautimer, "DrawLite()", "(int, int, int)", TAU_DEFAULT);
-+ TAU_PROFILE_START(tautimer);
- #endif
-
-- switch(state) {
-- case B_RED:
-- copyXPMArea(BREDX, BREDY, LITEW, LITEH, dx, dy);
-- break;
-- case B_GREEN:
-- copyXPMArea(BGREENX, BGREENY, LITEW, LITEH, dx, dy);
-- break;
-- default:
-- case B_OFF:
-- copyXPMArea(BOFFX, BOFFY, LITEW, LITEH, dx, dy);
-- break;
-- }
-+ switch(state) {
-+ case B_RED:
-+ copyXPMArea(BREDX, BREDY, LITEW, LITEH, dx, dy);
-+ break;
-+ case B_GREEN:
-+ copyXPMArea(BGREENX, BGREENY, LITEW, LITEH, dx, dy);
-+ break;
-+ default:
-+ case B_OFF:
-+ copyXPMArea(BOFFX, BOFFY, LITEW, LITEH, dx, dy);
-+ break;
-+ }
-
- #ifdef PROF
-- TAU_PROFILE_STOP(tautimer);
-+ TAU_PROFILE_STOP(tautimer);
- #endif
--}
-+ }
-
-
--void DrawUptime(void)
--{
-- static int first = 1;
-- static int old_days = 0, old_hours = 0, old_minutes = 0;
-- static long uptime;
-+ void DrawCpuPercentage(void)
-+ {
-+ int cpupercentage = cpu_get_usage(&cpu_opts);
-+ static int oldcpupercentage = -1;
-+
-+ if (cpupercentage != oldcpupercentage)
-+ {
-+#ifdef HI_INTS
-+ DrawBar(67, 36, 58, 4, cpupercentage, 3, 4);
-+#else
-+ DrawBar(67, 36, 58, 6, cpupercentage, 3, 4);
-+#endif
-+ oldcpupercentage = cpupercentage;
-+ }
-+
-+ }
-+
-+ void DrawUptime(void)
-+ {
-+ static int first = 1;
-+ static int old_days = 0, old_hours = 0, old_minutes = 0;
-+ static long uptime;
- static int i;
-
- #ifdef PROF
-- TAU_PROFILE_TIMER(tautimer, "DrawUptime()", "", TAU_DEFAULT);
-- TAU_PROFILE_START(tautimer);
-+ TAU_PROFILE_TIMER(tautimer, "DrawUptime()", "", TAU_DEFAULT);
-+ TAU_PROFILE_START(tautimer);
- #endif
--
-- uptime = curtime - start_uptime + start_time;
-
-- /* blit minutes */
-- uptime /=60;
-- i = uptime % 60;
-+ uptime = curtime - start_uptime + start_time;
-+
-+ /* blit minutes */
-+ uptime /=60;
-+ i = uptime % 60;
-
-- if(old_minutes != i || first) {
-- old_minutes = i;
-- sprintf(buf, "%02i", i);
-+ if(old_minutes != i || first) {
-+ old_minutes = i;
-+ sprintf(buf, "%02i", i);
- #ifdef HI_INTS
-- BlitString(buf, 45, 29);
-+ BlitString(buf, 45, 29);
- #else
-- BlitString(buf, 45, 37);
-+ BlitString(buf, 45, 37);
- #endif
-- }
-+ }
-
-- /* blit hours */
-- uptime /=60;
-- i = uptime % 24;
-+ /* blit hours */
-+ uptime /=60;
-+ i = uptime % 24;
-
-- if(old_hours != i || first) {
-- old_hours = i;
-- sprintf(buf, "%02i", i);
-+ if(old_hours != i || first) {
-+ old_hours = i;
-+ sprintf(buf, "%02i", i);
- #ifdef HI_INTS
-- BlitString(buf, 29, 29);
-+ BlitString(buf, 29, 29);
- #else
-- BlitString(buf, 29, 37);
-+ BlitString(buf, 29, 37);
- #endif
-- }
-+ }
-
-
-- /* blit days */
-- uptime /= 24;
-- i = uptime;
-- if(old_days != i || first) {
-- old_days = i;
-- sprintf(buf, "%03i", i);
-+ /* blit days */
-+ uptime /= 24;
-+ i = uptime;
-+ if(old_days != i || first) {
-+ old_days = i;
-+ sprintf(buf, "%03i", i);
- #ifdef HI_INTS
-- BlitString(buf, 6, 29);
-+ BlitString(buf, 6, 29);
- #else
-- BlitString(buf, 6, 37);
-+ BlitString(buf, 6, 37);
- #endif
-- }
-+ }
-
-- first = 0;
-+ first = 0;
- #ifdef PROF
-- TAU_PROFILE_STOP(tautimer);
-+ TAU_PROFILE_STOP(tautimer);
- #endif
--}
-+ }
-
-
--void DrawStuff( void )
--{
-- static int io_last = 0, first = 1;
-+ void DrawStuff( void )
-+ {
-+ static int first = 1;
- #ifdef HI_INTS
-- static int int_lites[24] =
-- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-- /* to keep track of on/off status */
-+ static int int_lites[24] =
-+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-+ /* to keep track of on/off status */
- #else
- static int int_lites[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- #endif
-- static int pagein_lite = 0, pageout_lite = 0, swapin_lite = 0, swapout_lite = 0;
-- static char *tok;
-- static char seps[] = {" "};
-- static int i, ents;
--
-- static long io;
-- static long iodiff;
-- static int iopercent;
--
-- static long pageins;
-- static long pageouts;
-- static long swapins;
-- static long swapouts;
-- static long intdiff;
-- static long stage;
-- static long *tints;
--#ifdef PROF
-- TAU_PROFILE_TIMER(tautimer, "DrawStuff()", "", TAU_DEFAULT);
-- TAU_PROFILE_START(tautimer);
--#endif
--
-- stage = io = iodiff = iopercent = pageins = pageouts = swapins = swapouts = 0;
--
-- statfp = freopen("/proc/stat", "r", statfp);
--
--
-- for(i = 0, ents = 0; ents < 5 && fgets(buf, 1024, statfp); i++) {
-- if(i == rio_l) {
-- tok = strtok(buf, seps);
--
-- io += atoi(tok);
-- tok = strtok(NULL, seps);
--
-- io += atoi(tok);
-- tok = strtok(NULL, seps);
--
-- io += atoi(tok);
-- tok = strtok(NULL, seps);
--
-- io += atoi(tok);
-- tok = strtok(NULL, seps);
-- ents++;
-- } else if(i == wio_l) {
-- tok = strtok(buf, seps);
--
-- io += atoi(tok);
-- tok = strtok(NULL, seps);
--
-- io += atoi(tok);
-- tok = strtok(NULL, seps);
--
-- io += atoi(tok);
-- tok = strtok(NULL, seps);
--
-- io += atoi(tok);
-- tok = strtok(NULL, seps);
-- ents++;
-- } else if(i == page_l) {
-- sscanf(buf, "%*s %ld %ld", &pageins, &pageouts);
-- ents++;
-- } else if(i == swap_l) {
-- sscanf(buf, "%*s %ld %ld",
-- &swapins, &swapouts);
-- ents++;
-- } else if(i == intr_l) {
-- sscanf( buf,
-- #ifdef HI_INTS
-- "%*s %*d %ld %ld %ld %ld %ld"
-- "%ld %ld %ld %ld %ld %ld %ld"
-- "%ld %ld %ld %ld %ld %ld %ld"
-- "%ld %ld %ld %ld %ld",
-- &ints[0], &ints[1], &ints[2],
-- &ints[3], &ints[4], &ints[5],
-- &ints[6], &ints[7], &ints[8],
-- &ints[9], &ints[10], &ints[11],
-- &ints[12], &ints[13], &ints[14],
-- &ints[15], &ints[16], &ints[17],
-- &ints[18], &ints[19], &ints[20],
-- &ints[21], &ints[22], &ints[23]);
-- #else
-- "%*s %*d %ld %ld %ld %ld %ld"
-- "%ld %ld %ld %ld %ld %ld %ld"
-- "%ld %ld %ld %ld",
-- &ints[0], &ints[1], &ints[2],
-- &ints[3], &ints[4], &ints[5],
-- &ints[6], &ints[7], &ints[8],
-- &ints[9], &ints[10], &ints[11],
-- &ints[12], &ints[13], &ints[14],
-- &ints[15]);
-- #endif
-- ents++;
-- }
-- }
--
-+ static int pagein_lite = 0, pageout_lite = 0, swapin_lite = 0, swapout_lite = 0;
-+ static int i, ents;
-
-- /* ------------------ IO bar ------------------ */
-- if(io_max == 0) io_max = io;
--
-- if(io > io_max) iodiff = abs(io_max - io);
-- else iodiff = 0;
--
-- io_max = io;
--
--
-- if(io_max_diff !=0) iopercent = ((float) iodiff / (float) io_max_diff) * 100.0;
-- else iopercent = 0;
--
-- if(iodiff > io_max_diff) io_max_diff = iodiff;
--
-- if (iopercent > 100) iopercent = 100;
--
-+ static long pageins;
-+ static long pageouts;
-+ static long swapins;
-+ static long swapouts;
-+ static long intdiff;
-+ static long stage;
-+ static long *tints;
-+#ifdef PROF
-+ TAU_PROFILE_TIMER(tautimer, "DrawStuff()", "", TAU_DEFAULT);
-+ TAU_PROFILE_START(tautimer);
-+#endif
-+
-+ stage = pageins = pageouts = swapins = swapouts = 0;
-+
-+ statfp = freopen("/proc/stat", "r", statfp);
-+
-+ if (kernel_version == IS_2_6)
-+ {
-+ static char *pageins_p=NULL;
-+ static char *pageouts_p;
-+ static char *swapins_p;
-+ static char *swapouts_p;
-+
-+ vmstatfp = freopen("/proc/vmstat", "r", vmstatfp);
-+ fread_unlocked (buf, 1024, 1, vmstatfp);
-+ if (!pageins_p)
-+ {
-+ pageins_p = strstr(buf, "pgpgin" ) + 6;
-+ pageouts_p = strstr(buf, "pgpgout" ) + 7;
-+ swapins_p = strstr(buf, "pswpin" ) + 6;
-+ swapouts_p = strstr(buf, "pswpout" ) + 7;
-+ }
-+ sscanf(pageins_p, "%ld", &pageins );
-+ sscanf(pageouts_p, "%ld", &pageouts );
-+ sscanf(swapins_p, "%ld", &swapins );
-+ sscanf(swapouts_p, "%ld", &swapouts );
-+ }
-
-- if(iopercent != io_last || first) {
-- io_last = iopercent;
--#ifdef HI_INTS
-- DrawBar(67, 36, 58, 4, iopercent, 3, 20);
--#else
-- DrawBar(67, 36, 58, 6, iopercent, 3, 26);
-+ for(i = 0, ents = 0; ents < 3 && fgets(buf, 1024, statfp); i++)
-+ {
-+ if (kernel_version == IS_OTHER)
-+ {
-+ if(i == page_l)
-+ {
-+ sscanf(buf, "%*s %ld %ld", &pageins, &pageouts);
-+ ents++;
-+ }
-+ if(i == swap_l)
-+ {
-+ sscanf(buf, "%*s %ld %ld", &swapins, &swapouts);
-+ ents++;
-+ }
-+ }
-+ if(i == intr_l)
-+ {
-+ sscanf( buf,
-+#ifdef HI_INTS
-+ "%*s %*d %ld %ld %ld %ld %ld"
-+ "%ld %ld %ld %ld %ld %ld %ld"
-+ "%ld %ld %ld %ld %ld %ld %ld"
-+ "%ld %ld %ld %ld %ld",
-+ &ints[0], &ints[1], &ints[2],
-+ &ints[3], &ints[4], &ints[5],
-+ &ints[6], &ints[7], &ints[8],
-+ &ints[9], &ints[10], &ints[11],
-+ &ints[12], &ints[13], &ints[14],
-+ &ints[15], &ints[16], &ints[17],
-+ &ints[18], &ints[19], &ints[20],
-+ &ints[21], &ints[22], &ints[23]);
-+#else
-+ "%*s %*d %ld %ld %ld %ld %ld"
-+ "%ld %ld %ld %ld %ld %ld %ld"
-+ "%ld %ld %ld %ld",
-+ &ints[0], &ints[1], &ints[2],
-+ &ints[3], &ints[4], &ints[5],
-+ &ints[6], &ints[7], &ints[8],
-+ &ints[9], &ints[10], &ints[11],
-+ &ints[12], &ints[13], &ints[14],
-+ &ints[15]);
- #endif
-- }
--
-+ ents++;
-+ }
-+ }
-
- if(int_mode == INT_LITES) {
- /* top 8 ints */
-@@ -654,14 +681,14 @@
- int_peaks[i] = (int_peaks[i] + intdiff) >> 1;
- #ifdef HI_INTS
- DrawMeter(intdiff,
-- int_peaks[i],
-- VBAR_H + (i * VBAR_W) + i,
-- 43);
-+ int_peaks[i],
-+ VBAR_H + (i * VBAR_W) + i,
-+ 43);
- #else
- DrawMeter(intdiff,
-- int_peaks[i],
-- VBAR_H + (i * VBAR_W) + i,
-- 51);
-+ int_peaks[i],
-+ VBAR_H + (i * VBAR_W) + i,
-+ 51);
- #endif
- }
-
-@@ -670,14 +697,14 @@
- int_peaks[i] = (int_peaks[i] + intdiff) >> 1;
- #ifdef HI_INTS
- DrawMeter(intdiff,
-- int_peaks[i],
-- VBAR_H + ((i - 8) * VBAR_W) + (i - 8),
-- 48);
-+ int_peaks[i],
-+ VBAR_H + ((i - 8) * VBAR_W) + (i - 8),
-+ 48);
- #else
- DrawMeter(intdiff,
-- int_peaks[i],
-- VBAR_H + ((i - 8) * VBAR_W) + (i - 8),
-- 56);
-+ int_peaks[i],
-+ VBAR_H + ((i - 8) * VBAR_W) + (i - 8),
-+ 56);
- #endif
- }
-
-@@ -687,9 +714,9 @@
- int_peaks[i] = (int_peaks[i] + intdiff) >> 1;
-
- DrawMeter(intdiff,
-- int_peaks[i],
-- VBAR_H + ((i - 16) * VBAR_W) + (i - 16),
-- 53);
-+ int_peaks[i],
-+ VBAR_H + ((i - 16) * VBAR_W) + (i - 16),
-+ 53);
- }
- #endif
- }
-@@ -782,18 +809,19 @@
-
- void DrawMem(void)
- {
-+ static char *p_mem_tot=NULL, *p_mem_free, *p_mem_buffers, *p_mem_cache;
-+ static char *p_swap_total, *p_swap_free;
-+
- static int last_mem = 0, last_swap = 0, first = 1;
- static long mem_total = 0;
-- static long mem_used = 0;
-+ static long mem_free = 0;
- static long mem_buffers = 0;
- static long mem_cache = 0;
- static long swap_total = 0;
-- static long swap_used = 0;
- static long swap_free = 0;
-
- static int mempercent = 0;
- static int swappercent = 0;
-- static int i, ents;
-
- #ifdef PROF
- TAU_PROFILE_TIMER(tautimer, "DrawMem()", "", TAU_DEFAULT);
-@@ -806,50 +834,52 @@
- counter = 3000000 / update_rate;
-
- memfp = freopen("/proc/meminfo", "r", memfp);
-+ fread_unlocked (buf, 1024, 1, memfp);
-
-- for(i = 0, ents = 0; ents < 2 && fgets(buf, 1024, memfp); i++) {
-- if(i == Mem_l) {
-- sscanf(buf, "%*s %ld %ld %*d %*d %ld %ld",
-- &mem_total,
-- &mem_used,
-- &mem_buffers,
-- &mem_cache);
-- ents++;
-- } else if(i == Swap_l) {
-- sscanf(buf, "%*s %ld %ld %ld",
-- &swap_total,
-- &swap_used,
-- &swap_free);
-- ents++;
-- }
-- }
-+ if (!p_mem_tot)
-+ {
-+ p_mem_tot = strstr(buf, "MemTotal:" ) + 13;
-+ p_mem_free = strstr(buf, "MemFree:" ) + 13;
-+ p_mem_buffers = strstr(buf, "Buffers:" ) + 13;
-+ p_mem_cache = strstr(buf, "Cached:" ) + 13;
-+ p_swap_total = strstr(buf, "SwapTotal:") + 13;
-+ p_swap_free = strstr(buf, "SwapFree:" ) + 13;
-+ }
-+
-+ sscanf(p_mem_tot, "%ld", &mem_total );
-+ sscanf(p_mem_free, "%ld", &mem_free );
-+ sscanf(p_mem_buffers, "%ld", &mem_buffers);
-+ sscanf(p_mem_cache, "%ld", &mem_cache );
-+ sscanf(p_swap_total, "%ld", &swap_total );
-+ sscanf(p_swap_free, "%ld", &swap_free );
-
- /* could speed this up but we'd lose precision, look more into it to see
- * if precision change would be noticable, and if speed diff is significant
- */
-- mempercent = ((float)(mem_used - mem_buffers - mem_cache)
-- /
-- (float)mem_total) * 100;
--
-- swappercent = ((float)(swap_used)
-- /
-- (float)swap_total) * 100;
-+ mempercent = ((float)(mem_total - mem_free - mem_buffers - mem_cache)
-+ /
-+ (float)mem_total) * 100;
-+
-+ if (!swap_total) swappercent = 0;
-+ else swappercent = ((float)(swap_total - swap_free)
-+ /
-+ (float)swap_total) * 100;
-
- if(mempercent != last_mem || first) {
- last_mem = mempercent;
- #ifdef HI_INTS
-- DrawBar(67, 36, 58,4 , mempercent, 3, 4);
-+ DrawBar(67, 36, 54, 4, mempercent, 3, 12);
- #else
-- DrawBar(67, 36, 58, 6, mempercent, 3, 4);
-+ DrawBar(67, 36, 54, 6, mempercent, 3, 15);
- #endif
- }
--
-+
- if(swappercent != last_swap || first) {
- last_swap = swappercent;
- #ifdef HI_INTS
-- DrawBar(67, 36, 58, 4, swappercent, 3, 12);
-+ DrawBar(67, 36, 58, 4, swappercent, 3, 20);
- #else
-- DrawBar(67, 36, 58, 6, swappercent, 3, 15);
-+ DrawBar(67, 36, 58, 6, swappercent, 3, 26);
- #endif
- }
-
-@@ -910,33 +940,35 @@
- TAU_PROFILE_STOP(tautimer);
- #endif
- }
--
-+
-
- void usage(void)
- {
-- fprintf(stderr, "\nwmsysmon - http://www.gnugeneration.com\n");
-- fprintf(stderr, "\n-------------------\n"
-- "|[---------------]| <--- Memory Use %\n"
-- "|[---------------]| <--- Swap Use %\n"
-- "|[---------------]| <--- I/O %\n"
-- "| |\n"
-- "| 000:00:00 | <--- Uptime days:hours:minutes\n"
-- "| |\n"
--#ifdef HI_INTS
-- "| 01234567 UV | <--- 0-N are hardware interrupts 0-23\n"
-- "| 89ABCDEF WX | <--- U,V are Page IN/OUT, W,X are Swap IN/OUT\n"
-- "| GHIJKLMN YZ |\n"
-+ fprintf(stderr, "\nwmsysmon - http://www.gnugeneration.com\n\n");
-+ fprintf(stderr, ".-----------------.\n"
-+ "|[---------------]| <--- CPU Use %\n"
-+ "|[---------------]| <--- Memory Use %\n"
-+ "|[---------------]| <--- Swap Use %\n"
-+ "| |\n"
-+ "| 000:00:00 | <--- Uptime days:hours:minutes\n"
-+ "| |\n"
-+#ifdef HI_INTS
-+ "| 01234567 UV | <--- 0-N are hardware interrupts 0-23\n"
-+ "| 89ABCDEF WX | <--- U,V are Page IN/OUT, W,X are Swap IN/OUT\n"
-+ "| GHIJKLMN YZ |\n"
- #else
-- "| 01234567 WX | <--- 0-F are hardware interrupts 0-15\n"
-- "| 89ABCDEF YZ | <--- W,X are Page IN/OUT, W,X are Swap IN/OUT\n"
-+ "| 01234567 WX | <--- 0-F are hardware interrupts 0-15\n"
-+ "| 89ABCDEF YZ | <--- W,X are Page IN/OUT, Y,Z are Swap IN/OUT\n"
- #endif
-- "-------------------\n");
-+ "°-----------------°\n");
-
- fprintf(stderr, "usage:\n");
- fprintf(stderr, "\t-display <display name>\n");
- fprintf(stderr, "\t-geometry +XPOS+YPOS\tinitial window position\n");
- fprintf(stderr, "\t-r\t\t\tupdate rate in milliseconds (default:300)\n");
- fprintf(stderr, "\t-l\t\t\tblinky lights for interrupts vs. meters(default)\n");
-+ fprintf(stderr, "\t-n\t\t\tignore nice processes for CPU percentage\n");
-+ fprintf(stderr, "\t-p <process name>\tdo not count <process name> in CPU percentage\n");
- fprintf(stderr, "\t-h\t\t\tthis help screen\n");
- fprintf(stderr, "\t-v\t\t\tprint the version number\n");
- fprintf(stderr, "\n");
-@@ -947,3 +979,20 @@
- {
- fprintf(stderr, "wmsysmon v%s\n", WMSYSMON_VERSION);
- }
-+
-+kernel_versions Get_Kernel_version(void)
-+{
-+ FILE *fp = fopen("/proc/version", "r");
-+ char buf[512];
-+
-+ if (!fp) return IS_OTHER;
-+ if (!fgets(buf, 512, fp))
-+ {
-+ fclose(fp);
-+ return IS_OTHER;
-+ }
-+ fclose(fp);
-+
-+ if (strstr(buf, "2.6.")) return IS_2_6;
-+ return IS_OTHER;
-+}