X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utils%2Fyarandom.h;h=a77e34bfe7ddade1763bc4bea2fe88d9ef600a4c;hb=ce3185de9d9705e259f2b60dd4b5509007fa17d4;hp=53b22fd88d0196d886da4cf270a7fcca65206bbb;hpb=ccbc9f87eb59497b23bd0424ee1ed20ad7c7db54;p=xscreensaver diff --git a/utils/yarandom.h b/utils/yarandom.h index 53b22fd8..a77e34bf 100644 --- a/utils/yarandom.h +++ b/utils/yarandom.h @@ -1,19 +1,52 @@ +/* xscreensaver, Copyright (c) 1997 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 + +#ifdef VMS +# include "vms-gtod.h" +#endif #define random() ya_random() #define srandom(i) ya_rand_init(0) -#undef P -#if __STDC__ -# define P(x)x -#else -# define P(x)() -#endif +extern unsigned int ya_random (void); +extern void ya_rand_init (unsigned int); + + +#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__ */