summaryrefslogtreecommitdiffstats
path: root/driver/test-apm.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/test-apm.c')
-rw-r--r--driver/test-apm.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/driver/test-apm.c b/driver/test-apm.c
new file mode 100644
index 0000000..6b87c7e
--- /dev/null
+++ b/driver/test-apm.c
@@ -0,0 +1,101 @@
+/* test-apm.c --- playing with the APM library.
+ * xscreensaver, Copyright (c) 1999 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include <time.h>
+#include <sys/time.h>
+
+#include <X11/Xlib.h>
+#include <X11/Intrinsic.h>
+
+#include <apm.h>
+
+#define countof(x) (sizeof((x))/sizeof(*(x)))
+
+
+char *progname = 0;
+char *progclass = "XScreenSaver";
+
+static const char *
+blurb (void)
+{
+ static char buf[255];
+ time_t now = time ((time_t *) 0);
+ char *ct = (char *) ctime (&now);
+ int n = strlen(progname);
+ if (n > 100) n = 99;
+ strncpy(buf, progname, n);
+ buf[n++] = ':';
+ buf[n++] = ' ';
+ strncpy(buf+n, ct+11, 8);
+ strcpy(buf+n+9, ": ");
+ return buf;
+}
+
+static void
+apm_cb (XtPointer closure, int *fd, XtInputId *id)
+{
+ apm_event_t events[100];
+ int n, i;
+ while ((n = apm_get_events (*fd, 0, events, countof(events)))
+ > 0)
+ for (i = 0; i < n; i++)
+ {
+ fprintf (stderr, "%s: APM event 0x%x: %s.\n", blurb(),
+ events[i], apm_event_name (events[i]));
+#if 0
+ switch (events[i])
+ {
+ case APM_SYS_STANDBY:
+ case APM_USER_STANDBY:
+ case APM_SYS_SUSPEND:
+ case APM_USER_SUSPEND:
+ case APM_CRITICAL_SUSPEND:
+ break;
+ }
+#endif
+ }
+}
+
+int
+main (int argc, char **argv)
+{
+ XtAppContext app;
+ Widget toplevel_shell = XtAppInitialize (&app, progclass, 0, 0,
+ &argc, argv, 0, 0, 0);
+ Display *dpy = XtDisplay (toplevel_shell);
+ int fd;
+ XtInputId id;
+ XtGetApplicationNameAndClass (dpy, &progname, &progclass);
+
+ fd = apm_open ();
+ if (fd <= 0)
+ {
+ fprintf (stderr, "%s: couldn't initialize APM.\n", blurb());
+ exit (1);
+ }
+
+ id = XtAppAddInput(app, fd,
+ (XtPointer) (XtInputReadMask | XtInputWriteMask),
+ apm_cb, 0);
+ XtAppMainLoop (app);
+ exit (0);
+}