--- kcube/kcube.cpp.orig	Thu Feb 13 22:12:49 2003
+++ kcube/kcube.cpp	Wed Feb 25 03:59:17 2004
@@ -33,9 +33,19 @@
 #include <qslider.h>
 
 #include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <nlist.h>
 
 #include "kcube.h"
 
+struct nlist    nl[] = {
+#define X_CP_TIME   0
+    { "_cp_time" },
+    { "" },
+};
+
 extern "C"
 {
 	KPanelApplet* init( QWidget *parent, const QString configFile)
@@ -64,7 +74,7 @@
 
 	// timer
 	cpu_timer = new QTimer();
-	cpu_timer->start(500, false);
+	cpu_timer->start(1000, false);
 	connect (cpu_timer, SIGNAL ( timeout() ), this, SLOT ( cpu_timer_event() ) );
 	draw_timer = new QTimer();
 	draw_timer->start(50, false);
@@ -82,6 +92,7 @@
 	prefform = new PrefForm(this);
 	prefform->setFixedSize( prefform->width(), prefform->height() );
 	loadConfig();
+
 }
 
 Kcube::~Kcube()
@@ -119,14 +130,42 @@
 int Kcube::calc_cpu_total()
 {
 	int 	use_nice = 0, t=0;
-	int 	total, used;
+	long 	total, used;
 	char 	cpuid[6];
-	int 	cpu,nice,system,idle;
+	long 	cpu,nice,system,idle;
+#ifdef Q_OS_BSD4
+    static int name2oid[2] = { 0, 3 };
+    static int oidCpuTime[CTL_MAXNAME + 2];
+    static size_t oidCpuTimeLen = sizeof(oidCpuTime);
+    long cpuTime[CPUSTATES];
+    size_t cpuTimeLen = sizeof(cpuTime);
+    static char *name = "kern.cp_time";
+    static int initialized = 0;
+#endif
 
+#ifdef Q_OS_LINUX
 	FILE *fp;
 	fp = fopen("/proc/stat","rt");
 	fscanf(fp,"%s %d %d %d %d",cpuid,&cpu,&nice,&system,&idle);
 	fclose(fp);
+#endif
+
+#ifdef Q_OS_BSD4
+	if (! initialized) {
+		if (sysctl(name2oid, 2, oidCpuTime, &oidCpuTimeLen, name, strlen(name)) < 0)
+			return 0;
+		oidCpuTimeLen /= sizeof(int);
+		initialized = 1;
+	}
+
+	if (sysctl(oidCpuTime, oidCpuTimeLen, cpuTime, &cpuTimeLen, 0, 0) < 0)
+		return 0;
+
+	idle = cpuTime[CP_IDLE];
+	cpu = cpuTime[CP_USER];
+	nice = cpuTime[CP_NICE];
+	system = cpuTime[CP_SYS];
+#endif
 
 	used 	= cpu + system + nice;
 	total 	= used + idle + (1-use_nice)*nice;
@@ -148,7 +187,7 @@
 	if ( load > prefform->high_color_cpu->text().toInt() ) setColors("high");
 	else setColors("low");
 		
-	draw_timer->changeInterval( 51 - load/2 );
+	draw_timer->changeInterval( 61 - load/2 );
 	label_load->setText( QString("%1%").arg(load) );
 }
 


syntax highlighted by Code2HTML, v. 0.9.1