aboutsummaryrefslogtreecommitdiff
path: root/apps/xload/get_rload.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/xload/get_rload.c')
-rw-r--r--apps/xload/get_rload.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/apps/xload/get_rload.c b/apps/xload/get_rload.c
new file mode 100644
index 000000000..9629d01f9
--- /dev/null
+++ b/apps/xload/get_rload.c
@@ -0,0 +1,76 @@
+/* $XFree86: xc/programs/xload/get_rload.c,v 1.4 2002/01/07 20:38:31 dawes Exp $ */
+
+#include <stdio.h>
+#include <X11/Intrinsic.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include "xload.h"
+
+/* Not all OS supports get_rload
+ steal the STUB idea from get_load
+ */
+#if defined(QNX4) || defined(__CYGWIN__)
+#define RLOADSTUB
+#endif
+
+#ifdef RLOADSTUB
+void GetRLoadPoint( w, closure, call_data )
+ Widget w; /* unused */
+ XtPointer closure; /* unused */
+ XtPointer call_data; /* pointer to (double) return value */
+
+{
+ *(double *)call_data = 1.0;
+}
+#else /* RLOADSTUB */
+
+#include <protocols/rwhod.h>
+#ifndef _PATH_RWHODIR
+#define _PATH_RWHODIR "/var/spool/rwho"
+#endif
+
+typedef struct _XLoadResources {
+ Boolean show_label;
+ Boolean use_lights;
+ String remote;
+} XLoadResources;
+
+extern XLoadResources resources ;
+
+#define WHDRSIZE ((int)(sizeof (buf) - sizeof (buf.wd_we)))
+
+void GetRLoadPoint( w, closure, call_data )
+ Widget w; /* unused */
+ XtPointer closure; /* unused */
+ XtPointer call_data; /* pointer to (double) return value */
+
+{
+ int f;
+ static char *fname = NULL;
+ static struct whod buf;
+ int cc;
+
+ *(double *)call_data = 0.0; /* to be on the safe side */
+
+ if (fname == NULL) {
+ if ((fname = malloc(strlen(_PATH_RWHODIR)+strlen("/whod.")+strlen(resources.remote)+1)) == NULL) {
+ fprintf(stderr,"GetRLoadPoint: malloc() failed\n");
+ exit(1);
+ }
+ strcpy(fname,_PATH_RWHODIR);
+ strcat(fname,"/whod.");
+ strcat(fname,resources.remote);
+ }
+ if ((f = open(fname, O_RDONLY, 0)) < 0)
+ return;
+
+ cc = read(f, &buf, sizeof(buf));
+ close(f);
+ if (cc < WHDRSIZE)
+ return;
+
+ *(double *)call_data = buf.wd_loadav[0] / 100.0;
+}
+
+#endif /* RLOADSTUB */