--- matchbox-panel-0.9.2/applets/mb-applet-system-monitor.c.old 2005-03-20 18:43:31.000000000 +0100 +++ matchbox-panel-0.9.2/applets/mb-applet-system-monitor.c 2005-12-21 10:24:18.000000000 +0100 @@ -37,6 +37,11 @@ # define _(text) (text) #endif +#include +#ifndef KERNEL_VERSION +#define KERNEL_VERSION(a,b,c) (((a) << 16) | ((b) << 8) | (c)) +#endif + #ifdef MB_HAVE_PNG #define IMG_EXT "png" #else @@ -112,71 +117,148 @@ 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) - { - 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; - - msd.mem_percent = (100 * msd.mem_used) / msd.mem_max; - //msd.swap_percent = (100 * msd.swap_used) / msd.swap_max; - - /* memory info changed - update things */ - return 1; - } - /* nothing new */ - return 0; + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + u_int64_t total, mfree, buffers, cached, used, shared, + cache_total, cache_free, cache_used; + + 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); + + 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"); + fscanf (mem, "%*s %*Ld %*s"); + fscanf (mem, "%*s %*Ld %*s"); + fscanf (mem, "%*s %*Ld %*s"); + fscanf (mem, "%*s %*Ld %*s"); + fscanf (mem, "%*s %Ld %*s", &cache_total); + fscanf (mem, "%*s %Ld %*s", &cache_free); + + fclose (mem); + + 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); + + 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; + + msd.mem_percent = (100 * msd.mem_used) / msd.mem_max; + //msd.swap_percent = (100 * msd.swap_used) / msd.swap_max; + + /* memory info changed - update things */ + return 1; + } + /* nothing new */ + return 0; + #else + static u_int64_t total, used, mfree, shared, buffers, cached, + cache_total, cache_used; + + 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; + + msd.mem_percent = (100 * msd.mem_used) / msd.mem_max; + //msd.swap_percent = (100 * msd.swap_used) / msd.swap_max; + + /* memory info changed - update things */ + return 1; + } + /* nothing new */ + return 0; + #endif } - void paint_callback (MBTrayApp *app, Drawable drw ) {