/* xscreensaver, Copyright (c) 1992-1995 Jamie Zawinski * * 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. */ /* Found in Don Hopkins' .plan file: * * The color situation is a total flying circus. The X approach to * device independence is to treat everything like a MicroVax framebuffer * on acid. A truely portable X application is required to act like the * persistent customer in the Monty Python ``Cheese Shop'' sketch. Even * the simplest applications must answer many difficult questions, like: * * WHAT IS YOUR DISPLAY? * display = XOpenDisplay("unix:0"); * WHAT IS YOUR ROOT? * root = RootWindow(display, DefaultScreen(display)); * AND WHAT IS YOUR WINDOW? * win = XCreateSimpleWindow(display, root, 0, 0, 256, 256, 1, * BlackPixel(display, DefaultScreen(display)), * WhitePixel(display, DefaultScreen(display))) * OH ALL RIGHT, YOU CAN GO ON. * * WHAT IS YOUR DISPLAY? * display = XOpenDisplay("unix:0"); * WHAT IS YOUR COLORMAP? * cmap = DefaultColormap(display, DefaultScreen(display)); * AND WHAT IS YOUR FAVORITE COLOR? * favorite_color = 0; / * Black. * / * / * Whoops! No, I mean: * / * favorite_color = BlackPixel(display, DefaultScreen(display)); * / * AAAYYYYEEEEE!! (client dumps core & falls into the chasm) * / * * WHAT IS YOUR DISPLAY? * display = XOpenDisplay("unix:0"); * WHAT IS YOUR VISUAL? * struct XVisualInfo vinfo; * if (XMatchVisualInfo(display, DefaultScreen(display), * 8, PseudoColor, &vinfo) != 0) * visual = vinfo.visual; * AND WHAT IS THE NET SPEED VELOCITY OF AN XConfigureWindow REQUEST? * / * Is that a SubStructureRedirectMask or a ResizeRedirectMask? * / * WHAT?! HOW AM I SUPPOSED TO KNOW THAT? * AAAAUUUGGGHHH!!!! (server dumps core & falls into the chasm) */ #ifndef _SCREENHACK_H_ #define _SCREENHACK_H_ #if __STDC__ #include #endif #ifdef __hpux /* Which of the ten billion standards does values.h belong to? What systems always have it? */ # include #endif #include #include #include #include "vroot.h" extern Bool mono_p; extern char *progname; extern char *progclass; extern XrmDatabase db; extern XrmOptionDescRec options []; extern int options_size; extern char *defaults []; /* Screw it, we'll just use our own RNG. See xscreensaver/utils/yarandom.c. */ #include "yarandom.h" #undef P #if __STDC__ # define P(x)x #else # define P(x)() #endif extern void screenhack P((Display*,Window)); #define usleep screenhack_usleep extern void screenhack_usleep P((unsigned long)); extern char *get_string_resource P((char*,char*)); extern Bool get_boolean_resource P((char*,char*)); extern int get_integer_resource P((char*,char*)); extern double get_float_resource P((char*,char*)); extern unsigned int get_pixel_resource P((char*,char*,Display*,Colormap)); extern unsigned int get_minutes_resource P((char*,char*)); extern unsigned int get_seconds_resource P((char*,char*)); extern Visual *get_visual_resource P((Display *, char *, char *)); extern int get_visual_depth P((Display *, Visual *)); extern void hsv_to_rgb P((int,double,double,unsigned short*, unsigned short*,unsigned short*)); extern void rgb_to_hsv P((unsigned short,unsigned short,unsigned short, int*,double*,double*)); extern void cycle_hue P((XColor*,int)); extern void make_color_ramp P((int h1, double s1, double v1, int h2, double s2, double v2, XColor *pixels, int npixels)); extern Pixmap grab_screen_image P((Display *dpy, Window window, int root_p)); extern void copy_default_colormap_contents P((Display *dpy, Colormap to_cmap, Visual *to_visual)); #if defined (__GNUC__) && (__GNUC__ >= 2) /* Implement frand using GCC's statement-expression extension. */ # define frand(f) \ ({ double tmp = (((double) random()) / \ (((double) ((unsigned int)~0)) / ((double) (f+f)))); \ tmp < 0 ? (-tmp) : tmp; }) #else /* not GCC2 - implement frand using a global variable.*/ static double _frand_tmp_; # define frand(f) \ (_frand_tmp_ = (((double) random()) / \ (((double) ((unsigned int)~0)) / ((double) (f+f)))), \ _frand_tmp_ < 0 ? (-_frand_tmp_) : _frand_tmp_) #endif /* not GCC2 */ #undef P #endif /* _SCREENHACK_H_ */