108905f0fd6fdade85859ec0d57d36e4f7c59cea
[xscreensaver] / driver / test-apm.c
1 /* test-apm.c --- playing with the APM library.
2  * xscreensaver, Copyright (c) 1999 Jamie Zawinski <jwz@jwz.org>
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that
7  * copyright notice and this permission notice appear in supporting
8  * documentation.  No representations are made about the suitability of this
9  * software for any purpose.  It is provided "as is" without express or 
10  * implied warranty.
11  */
12
13 #ifdef HAVE_CONFIG_H
14 # include "config.h"
15 #endif
16
17 #include <stdlib.h>
18 #ifdef HAVE_UNISTD_H
19 # include <unistd.h>
20 #endif
21
22 #include <stdio.h>
23 #include <sys/time.h>
24
25 #include <X11/Xlib.h>
26 #include <X11/Intrinsic.h>
27
28 #include <apm.h>
29
30 #define countof(x) (sizeof((x))/sizeof(*(x)))
31
32
33 char *progname = 0;
34 char *progclass = "XScreenSaver";
35
36 static const char *
37 blurb (void)
38 {
39   static char buf[255];
40   time_t now = time ((time_t *) 0);
41   char *ct = (char *) ctime (&now);
42   int n = strlen(progname);
43   if (n > 100) n = 99;
44   strncpy(buf, progname, n);
45   buf[n++] = ':';
46   buf[n++] = ' ';
47   strncpy(buf+n, ct+11, 8);
48   strcpy(buf+n+9, ": ");
49   return buf;
50 }
51
52 static void
53 apm_cb (XtPointer closure, int *fd, XtInputId *id)
54 {
55   apm_event_t events[100];
56   int n, i;
57   while ((n = apm_get_events (*fd, 0, events, countof(events)))
58          > 0)
59     for (i = 0; i < n; i++)
60       {
61         fprintf (stderr, "%s: APM event 0x%x: %s.\n", blurb(),
62                  events[i], apm_event_name (events[i]));
63 #if 0
64         switch (events[i])
65           {
66           case APM_SYS_STANDBY:
67           case APM_USER_STANDBY:
68           case APM_SYS_SUSPEND:
69           case APM_USER_SUSPEND:
70           case APM_CRITICAL_SUSPEND:
71             break;
72           }
73 #endif
74       }
75 }
76
77 int
78 main (int argc, char **argv)
79 {
80   XtAppContext app;
81   Widget toplevel_shell = XtAppInitialize (&app, progclass, 0, 0,
82                                            &argc, argv, 0, 0, 0);
83   Display *dpy = XtDisplay (toplevel_shell);
84   int fd;
85   XtInputId id;
86   XtGetApplicationNameAndClass (dpy, &progname, &progclass);
87
88   fd = apm_open ();
89   if (fd <= 0)
90     {
91       fprintf (stderr, "%s: couldn't initialize APM.\n", blurb());
92       exit (1);
93     }
94
95   id = XtAppAddInput(app, fd,
96                      (XtPointer) (XtInputReadMask | XtInputWriteMask),
97                      apm_cb, 0);
98   XtAppMainLoop (app);
99   exit (0);
100 }