X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fscreenhack.h;h=2e55d8930122a0e53371660c65f787f72f5c56e3;hb=aa75c7476aeaa84cf3abc192b376a8b03c325213;hp=9737f65332cebcda6cd7e08d0b90b45af9de134f;hpb=65740e2a8dea3d6309ae6e8914a0fb79e993ada8;p=xscreensaver diff --git a/hacks/screenhack.h b/hacks/screenhack.h old mode 100755 new mode 100644 index 9737f653..2e55d893 --- a/hacks/screenhack.h +++ b/hacks/screenhack.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992, 1993 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,137 +9,53 @@ * implied warranty. */ -#if 0 - * Found in Don Hopkin`s .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) - * -#endif /* 0 */ - -#ifndef _SCREENHACK_H_ -#define _SCREENHACK_H_ - -#if __STDC__ -#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 []; +#ifndef __SCREENHACK_H__ +#define __SCREENHACK_H__ -#if xxx__STDC__ -# if defined(SVR4) || defined(SYSV) -# ifndef random - extern int rand (void); -# define random() rand() -# endif -# ifndef srandom - extern void srand (unsigned int); -# define srandom(i) srand((unsigned int)(i)) -# endif -# else /* !totally-losing-SYSV */ -# ifndef random - extern long random (void); -# endif -# ifndef srandom - extern void srandom (int); -# endif -# endif /* !totally-losing-SYSV */ -#endif /* __STDC__ */ +#include "screenhackI.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 VMS -#define random rand -#define srandom srand -#endif - -#if __STDC__ -# define P(x)x + 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 P(x)() +# define XSCREENSAVER_LINK(NAME) \ + struct xscreensaver_function_table *xscreensaver_function_table = &NAME; #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(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 -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_) -#undef P -#endif /* _SCREENHACK_H_ */ +#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__ */