From http://www.jwz.org/xscreensaver/xscreensaver-5.35.tar.gz
[xscreensaver] / hacks / screenhackI.h
1 /* xscreensaver, Copyright (c) 1992-2016 Jamie Zawinski <jwz@jwz.org>
2  *
3  * Permission to use, copy, modify, distribute, and sell this software and its
4  * documentation for any purpose is hereby granted without fee, provided that
5  * the above copyright notice appear in all copies and that both that
6  * copyright notice and this permission notice appear in supporting
7  * documentation.  No representations are made about the suitability of this
8  * software for any purpose.  It is provided "as is" without express or 
9  * implied warranty.
10  */
11
12 /* Found in Don Hopkins' .plan file:
13  *
14  *   The color situation is a total flying circus.  The X approach to
15  *   device independence is to treat everything like a MicroVax framebuffer
16  *   on acid.  A truely portable X application is required to act like the
17  *   persistent customer in the Monty Python ``Cheese Shop'' sketch.  Even
18  *   the simplest applications must answer many difficult questions, like:
19  *
20  *   WHAT IS YOUR DISPLAY?
21  *       display = XOpenDisplay("unix:0");
22  *   WHAT IS YOUR ROOT?
23  *       root = RootWindow(display, DefaultScreen(display));
24  *   AND WHAT IS YOUR WINDOW?
25  *       win = XCreateSimpleWindow(display, root, 0, 0, 256, 256, 1,
26  *                                 BlackPixel(display, DefaultScreen(display)),
27  *                                 WhitePixel(display, DefaultScreen(display)))
28  *   OH ALL RIGHT, YOU CAN GO ON.
29  *
30  *   WHAT IS YOUR DISPLAY?
31  *         display = XOpenDisplay("unix:0");
32  *   WHAT IS YOUR COLORMAP?
33  *         cmap = DefaultColormap(display, DefaultScreen(display));
34  *   AND WHAT IS YOUR FAVORITE COLOR?
35  *         favorite_color = 0; / * Black. * /
36  *         / * Whoops! No, I mean: * /
37  *         favorite_color = BlackPixel(display, DefaultScreen(display));
38  *         / * AAAYYYYEEEEE!! (client dumps core & falls into the chasm) * /
39  *
40  *   WHAT IS YOUR DISPLAY?
41  *         display = XOpenDisplay("unix:0");
42  *   WHAT IS YOUR VISUAL?
43  *         struct XVisualInfo vinfo;
44  *         if (XMatchVisualInfo(display, DefaultScreen(display),
45  *                              8, PseudoColor, &vinfo) != 0)
46  *            visual = vinfo.visual;
47  *   AND WHAT IS THE NET SPEED VELOCITY OF AN XConfigureWindow REQUEST?
48  *         / * Is that a SubStructureRedirectMask or a ResizeRedirectMask? * /
49  *   WHAT?! HOW AM I SUPPOSED TO KNOW THAT?
50  *   AAAAUUUGGGHHH!!!! (server dumps core & falls into the chasm)
51  */
52
53 #ifndef __SCREENHACK_I_H__
54 #define __SCREENHACK_I_H__
55
56 #ifdef HAVE_CONFIG_H
57 # include "config.h"
58 #endif /* HAVE_CONFIG_H */
59
60 #include <stdio.h>
61 #include <stdlib.h>
62 #include <math.h>
63 #include <time.h>
64
65 #ifdef __hpux
66  /* Which of the ten billion standards does values.h belong to?
67     What systems always have it? */
68 # include <values.h>
69 #endif
70
71 #ifdef HAVE_JWXYZ
72 # include "jwxyz.h"
73 #else  /* real X11 */
74 # include <X11/Xlib.h>
75 # include <X11/Xutil.h>
76 # include <X11/Xresource.h>
77 # include <X11/Xos.h>
78 #endif /* !HAVE_JWXYZ */
79
80 #if defined(USE_IPHONE) || defined(HAVE_ANDROID)
81 # define HAVE_MOBILE
82 #endif
83
84 #ifdef HAVE_ANDROID
85  /* So that hacks' debug output shows up in logcat... */
86  extern void Log(const char *fmt, ...);  /* jwxyz-android.c */
87 # define fprintf(S, ...) Log(__VA_ARGS__)
88 #endif
89
90 /* M_PI ought to have been defined in math.h, but... */
91 #ifndef M_PI
92 # define M_PI 3.1415926535
93 #endif
94
95 #ifndef M_PI_2
96 # define M_PI_2 1.5707963267
97 #endif
98
99 #ifndef Button6
100 # define Button6 6
101 # define Button7 7
102 #endif
103
104 #include "yarandom.h"
105 #include "usleep.h"
106 #include "resources.h"
107 #include "hsv.h"
108 #include "colors.h"
109 #include "grabscreen.h"
110 #include "visual.h"
111 #include "fps.h"
112
113 /* Be Posixly correct */
114 #undef  bzero
115 #define bzero  __ERROR_use_memset_not_bzero_in_xscreensaver__
116 #undef  bcopy
117 #define bcopy  __ERROR_use_memcpy_not_bcopy_in_xscreensaver__
118 #undef  ftime
119 #define ftime  __ERROR_use_gettimeofday_not_ftime_in_xscreensaver__
120 #undef  sleep
121 #define sleep  __ERROR_do_not_sleep_in_xscreensaver__
122
123 extern Bool mono_p;
124
125 struct xscreensaver_function_table {
126
127   const char *progclass;
128   const char * const *defaults;
129   const XrmOptionDescRec *options;
130
131   void           (*setup_cb)   (struct xscreensaver_function_table *, void *);
132   void *         setup_arg;
133
134   void *         (*init_cb)    (Display *, Window);
135   unsigned long  (*draw_cb)    (Display *, Window, void *);
136   void           (*reshape_cb) (Display *, Window, void *,
137                                 unsigned int w, unsigned int h);
138   Bool           (*event_cb)   (Display *, Window, void *, XEvent *);
139   void           (*free_cb)    (Display *, Window, void *);
140   void           (*fps_cb)     (Display *, Window, fps_state *, void *);
141
142   Visual *       (*pick_visual_hook) (Screen *);
143   Bool           (*validate_visual_hook) (Screen *, const char *, Visual *);
144
145 };
146
147 extern const char *progname;
148
149 #endif /* __SCREENHACK_I_H__ */