X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utils%2Fyarandom.h;h=5a23e43d27382f42035d2a04e25ed1729eb707ba;hb=06e9a7886a77cad92f9ddbc169d6d199a4d8b76d;hp=53b22fd88d0196d886da4cf270a7fcca65206bbb;hpb=ccbc9f87eb59497b23bd0424ee1ed20ad7c7db54;p=xscreensaver diff --git a/utils/yarandom.h b/utils/yarandom.h index 53b22fd8..5a23e43d 100644 --- a/utils/yarandom.h +++ b/utils/yarandom.h @@ -1,19 +1,64 @@ +/* xscreensaver, Copyright (c) 1997, 1998 by 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. + */ + +#ifndef __YARANDOM_H__ +#define __YARANDOM_H__ + #undef random #undef rand #undef drand48 #undef srandom #undef srand #undef srand48 +#undef frand +#undef RAND_MAX + +#ifdef VMS +# include "vms-gtod.h" +#endif + +extern unsigned int ya_random (void); +extern void ya_rand_init (unsigned int); #define random() ya_random() -#define srandom(i) ya_rand_init(0) +#define RAND_MAX 0x7FFFFFFF -#undef P -#if __STDC__ -# define P(x)x -#else -# define P(x)() -#endif +/*#define srandom(i) ya_rand_init(0)*/ + +/* Define these away to keep people from using the wrong APIs in xscreensaver. + */ +#define rand __ERROR_use_random_not_rand_in_xscreensaver__ +#define drand48 __ERROR_use_frand_not_drand48_in_xscreensaver__ +#define srandom __ERROR_do_not_call_srandom_in_xscreensaver__ +#define srand __ERROR_do_not_call_srand_in_xscreensaver__ +#define srand48 __ERROR_do_not_call_srand48_in_xscreensaver__ +#define ya_rand_init __ERROR_do_not_call_ya_rand_init_in_xscreensaver__ + + +#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)))); \ + 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)))), \ + _frand_tmp_ < 0 ? (-_frand_tmp_) : _frand_tmp_) + +#endif /* not GCC2 */ -extern unsigned int ya_random P((void)); -extern void ya_rand_init P((unsigned int)); +#endif /* __YARANDOM_H__ */