--- matchbox-panel-0.9.2/applets/mb-applet-system-monitor.c.orig 2006-02-07 20:08:09.000000000 +0200 +++ matchbox-panel-0.9.2/applets/mb-applet-system-monitor.c 2006-02-07 20:53:20.000000000 +0200 @@ -37,6 +37,7 @@ # define _(text) (text) #endif + #ifdef MB_HAVE_PNG #define IMG_EXT "png" #else @@ -66,8 +67,30 @@ MBPixbufImage *ImgIcon = NULL, *ImgIconScaled = NULL, *ImgGraph = NULL; int GraphHeight = 0, GraphWidth = 0; - char *ThemeName; +static int kernelver = 0; + +/* returns 1 if the kernel version is 2.6, 0 otherwise */ +int kernel_version(void) +{ + float v_nr=0; + FILE *version; + + if ((version = fopen("/proc/version", "r")) == NULL) + { + fprintf(stderr, "mb-applet-system-monitor: failed to open /proc/version. Exiting\n"); + exit(1); + } + fscanf(version, "%*s %*s %f", &v_nr); + fclose(version); + + if (v_nr > 2.5) + return 1; + else + return 0; +} + + /* returns current CPU load in percent, 0 to 100 */ int system_cpu(void) @@ -112,71 +135,86 @@ int system_memory(void) { - u_int64_t my_mem_used, my_mem_max; - u_int64_t my_swap_max; - - static int mem_delay = 0; - FILE *mem; - static u_int64_t total, used, mfree, shared, buffers, cached, - cache_total, cache_used; - - /* put this in permanent storage instead of stack */ - static char not_needed[2048]; - - if (mem_delay-- <= 0) { - if ((mem = fopen("/proc/meminfo", "r")) == NULL) + u_int64_t total, mfree, buffers, cached, used, shared, + cache_total, cache_free, cache_used, uneeded = 0; + + u_int64_t my_mem_used, my_mem_max; + u_int64_t my_swap_max; + + static int mem_delay = 0; + FILE *mem; + + /* put this in permanent storage instead of stack */ + static char not_needed[2048]; + + if (mem_delay-- <= 0) + { + if ((mem = fopen("/proc/meminfo", "r")) == NULL) { fprintf(stderr, "mb-applet-system-monitor: failed to open /proc/meminfo. Exiting.\n"); exit(1); - } - - - - fgets(not_needed, 2048, mem); - - /* - total: used: free: shared: buffers: cached: - */ - - fscanf(mem, "%*s %Ld %Ld %Ld %Ld %Ld %Ld", &total, &used, &mfree, - &shared, &buffers, &cached); - - fscanf(mem, "%*s %Ld %Ld", &cache_total, &cache_used); - - fclose(mem); - mem_delay = 25; - - /* calculate it */ - my_mem_max = total; - my_swap_max = cache_total; - - my_mem_used = cache_used + used - cached - buffers; - - /* No swap on ipaq - if (my_mem_used > my_mem_max) { - my_swap_used = my_mem_used - my_mem_max; - my_mem_used = my_mem_max; - } else { - my_swap_used = 0; } - */ - - msd.mem_used = my_mem_used; - msd.mem_max = my_mem_max; - //msd.swap_used = my_swap_used; - //msd.swap_max = my_swap_max; + + fgets(not_needed, 2048, mem); - msd.mem_percent = (100 * msd.mem_used) / msd.mem_max; - //msd.swap_percent = (100 * msd.swap_used) / msd.swap_max; +/*if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)*/ - /* memory info changed - update things */ - return 1; - } - /* nothing new */ - return 0; + if(kernelver) + { + rewind (mem); + + fscanf (mem, "%*s %Ld %*s", &total); + fscanf (mem, "%*s %Ld %*s", &mfree); + fscanf (mem, "%*s %Ld %*s", &buffers); + fscanf (mem, "%*s %Ld %*s", &cached); + fscanf (mem, "%*s %Ld %*s", &shared); + fscanf (mem, "%*s %Ld %*s", &used); + fscanf (mem, "%*s %Ld %*s", &uneeded); + fscanf (mem, "%*s %Ld %*s", &uneeded); + fscanf (mem, "%*s %Ld %*s", &uneeded); + fscanf (mem, "%*s %Ld %*s", &uneeded); + fscanf (mem, "%*s %Ld %*s", &uneeded); + fscanf (mem, "%*s %Ld %*s", &cache_total); + fscanf (mem, "%*s %Ld %*s", &cache_free); + + total = total * 1024; + mfree = mfree * 1024; + buffers = buffers * 1024; + cached = cached * 1024; + used = used * 1024; + shared = shared * 1024; + cache_total = cache_total * 1024; + cache_used = cache_total - (cache_free * 1024); + } +else + { + /* + total: used: free: shared: buffers: cached: + */ + fscanf(mem, "%*s %Ld %Ld %Ld %Ld %Ld %Ld", &total, &used, &mfree, + &shared, &buffers, &cached); + fscanf(mem, "%*s %Ld %Ld", &cache_total, &cache_used); + } + + fclose(mem); + + mem_delay = 25; + + /* calculate it */ + my_mem_max = total; + my_swap_max = cache_total; + my_mem_used = cache_used + used - cached - buffers; + msd.mem_used = my_mem_used; + msd.mem_max = my_mem_max; + msd.mem_percent = (100 * msd.mem_used) / msd.mem_max; + + /* memory info changed - update things */ + return 1; + } + /* nothing new */ + return 0; } - void paint_callback (MBTrayApp *app, Drawable drw ) { @@ -340,6 +378,8 @@ &argc, &argv ); + kernelver = kernel_version(); + msd.samples = 16; if (msd.load) {