1 /* xscreensaver, Copyright (c) 1992-1995 Jamie Zawinski <jwz@netscape.com>
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
12 /* Found in Don Hopkins' .plan file:
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:
20 * WHAT IS YOUR DISPLAY?
21 * display = XOpenDisplay("unix:0");
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.
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) * /
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)
53 #ifndef _SCREENHACK_H_
54 #define _SCREENHACK_H_
61 /* Which of the ten billion standards does values.h belong to?
62 What systems always have it? */
67 #include <X11/Xresource.h>
72 extern char *progname;
73 extern char *progclass;
74 extern XrmDatabase db;
75 extern XrmOptionDescRec options [];
76 extern int options_size;
77 extern char *defaults [];
79 /* Screw it, we'll just use our own RNG. See xscreensaver/utils/yarandom.c. */
90 extern void screenhack P((Display*,Window));
92 #define usleep screenhack_usleep
94 extern void screenhack_usleep P((unsigned long));
95 extern char *get_string_resource P((char*,char*));
96 extern Bool get_boolean_resource P((char*,char*));
97 extern int get_integer_resource P((char*,char*));
98 extern double get_float_resource P((char*,char*));
99 extern unsigned int get_pixel_resource P((char*,char*,Display*,Colormap));
100 extern unsigned int get_minutes_resource P((char*,char*));
101 extern unsigned int get_seconds_resource P((char*,char*));
103 extern Visual *get_visual_resource P((Display *, char *, char *));
104 extern int get_visual_depth P((Display *, Visual *));
106 extern void hsv_to_rgb P((int,double,double,unsigned short*,
107 unsigned short*,unsigned short*));
108 extern void rgb_to_hsv P((unsigned short,unsigned short,unsigned short,
109 int*,double*,double*));
110 extern void cycle_hue P((XColor*,int));
112 extern void make_color_ramp P((int h1, double s1, double v1,
113 int h2, double s2, double v2,
114 XColor *pixels, int npixels));
116 extern Pixmap grab_screen_image P((Display *dpy, Window window, int root_p));
117 extern void copy_default_colormap_contents P((Display *dpy, Colormap to_cmap,
120 #if defined (__GNUC__) && (__GNUC__ >= 2)
121 /* Implement frand using GCC's statement-expression extension. */
124 ({ double tmp = (((double) random()) / \
125 (((double) ((unsigned int)~0)) / ((double) (f+f)))); \
126 tmp < 0 ? (-tmp) : tmp; })
128 #else /* not GCC2 - implement frand using a global variable.*/
130 static double _frand_tmp_;
132 (_frand_tmp_ = (((double) random()) / \
133 (((double) ((unsigned int)~0)) / ((double) (f+f)))), \
134 _frand_tmp_ < 0 ? (-_frand_tmp_) : _frand_tmp_)
136 #endif /* not GCC2 */
139 #endif /* _SCREENHACK_H_ */