--- 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) {