X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fscreenhack.h;h=2e55d8930122a0e53371660c65f787f72f5c56e3;hb=aa75c7476aeaa84cf3abc192b376a8b03c325213;hp=bb0344fb7543ec30f007ffef34168f53c20331eb;hpb=ce3185de9d9705e259f2b60dd4b5509007fa17d4;p=xscreensaver diff --git a/hacks/screenhack.h b/hacks/screenhack.h index bb0344fb..2e55d893 100644 --- a/hacks/screenhack.h +++ b/hacks/screenhack.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992-1997 Jamie Zawinski +/* xscreensaver, Copyright (c) 1992-2015 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 @@ -9,90 +9,53 @@ * 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__ -#include +#include "screenhackI.h" -#include "config.h" +/* In an Xlib world, we define two global symbols here: + a struct in `MODULENAME_xscreensaver_function_table', + and a pointer to that in `xscreensaver_function_table'. -#ifdef __hpux - /* Which of the ten billion standards does values.h belong to? - What systems always have it? */ -# include + In a Cocoa/Android world, we only define the prefixed symbol; + the un-prefixed symbol does not exist. + */ +#ifdef HAVE_JWXYZ +# define XSCREENSAVER_LINK(NAME) +#else +# define XSCREENSAVER_LINK(NAME) \ + struct xscreensaver_function_table *xscreensaver_function_table = &NAME; #endif -#include - -#include -#include -#include -/* M_PI ought to have been defined in math.h, but... */ -#ifndef M_PI -# define M_PI 3.1415926535 +#if defined(HAVE_JWXYZ) && !defined(__XLOCKMORE_INTERNAL_H__) + /* this is one enormous kludge... */ +# undef ya_rand_init + static void + xscreensaver_common_setup(struct xscreensaver_function_table *xsft, void *a) + { ya_rand_init(0); } +#else +# define xscreensaver_common_setup 0 #endif -#ifndef M_PI_2 -# define M_PI_2 1.5707963267 -#endif - -#include "yarandom.h" -#include "usleep.h" -#include "resources.h" -#include "hsv.h" -#include "colors.h" -#include "grabscreen.h" -#include "visual.h" - -extern Bool mono_p; -extern char *progname; -extern char *progclass; -extern XrmDatabase db; -extern XrmOptionDescRec options []; -extern char *defaults []; -extern void screenhack (Display*,Window); +#define XSCREENSAVER_MODULE_2(CLASS,NAME,PREFIX) \ + struct xscreensaver_function_table \ + NAME ## _xscreensaver_function_table = { \ + CLASS, \ + PREFIX ## _defaults, \ + PREFIX ## _options, \ + xscreensaver_common_setup, 0, \ + PREFIX ## _init, \ + PREFIX ## _draw, \ + PREFIX ## _reshape, \ + PREFIX ## _event, \ + PREFIX ## _free, \ + 0, 0, 0 }; \ + XSCREENSAVER_LINK (NAME ## _xscreensaver_function_table) + +#define XSCREENSAVER_MODULE(CLASS,PREFIX) \ + XSCREENSAVER_MODULE_2(CLASS,PREFIX,PREFIX) #endif /* __SCREENHACK_H__ */