* It was reworked for the GNU C Library by Roland McGrath.
*/
+/*
+
+@deftypefn Supplement {long int} random (void)
+@deftypefnx Supplement void srandom (unsigned int @var{seed})
+@deftypefnx Supplement void* initstate (unsigned int @var{seed}, @
+ void *@var{arg_state}, unsigned long @var{n})
+@deftypefnx Supplement void* setstate (void *@var{arg_state})
+
+Random number functions. @code{random} returns a random number in the
+range 0 to @code{LONG_MAX}. @code{srandom} initializes the random
+number generator to some starting point determined by @var{seed}
+(else, the values returned by @code{random} are always the same for each
+run of the program). @code{initstate} and @code{setstate} allow fine-grained
+control over the state of the random number generator.
+
+@end deftypefn
+
+*/
+
#include <errno.h>
#if 0
#define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF for 32-bits*/
#ifdef __STDC__
-# define PTR void *
# ifndef NULL
# define NULL (void *) 0
# endif
#else
-# define PTR char *
# ifndef NULL
# define NULL (void *) 0
# endif
#endif
-long int random ();
+long int random (void);
/* An improved random number generation package. In addition to the standard
rand()/srand() like interface, this package also has a special state info
introduced by the L.C.R.N.G. Note that the initialization of randtbl[]
for default usage relies on values produced by this routine. */
void
-srandom (x)
- unsigned int x;
+srandom (unsigned int x)
{
state[0] = x;
if (rand_type != TYPE_0)
Note: The first thing we do is save the current state, if any, just like
setstate so that it doesn't matter when initstate is called.
Returns a pointer to the old state. */
-PTR
-initstate (seed, arg_state, n)
- unsigned int seed;
- PTR arg_state;
- unsigned long n;
+void *
+initstate (unsigned int seed, void *arg_state, unsigned long n)
{
- PTR ostate = (PTR) &state[-1];
+ void *ostate = (void *) &state[-1];
if (rand_type == TYPE_0)
state[-1] = rand_type;
same state as the current state
Returns a pointer to the old state information. */
-PTR
-setstate (arg_state)
- PTR arg_state;
+void *
+setstate (void *arg_state)
{
register long int *new_state = (long int *) arg_state;
register int type = new_state[0] % MAX_TYPES;
register int rear = new_state[0] / MAX_TYPES;
- PTR ostate = (PTR) &state[-1];
+ void *ostate = (void *) &state[-1];
if (rand_type == TYPE_0)
state[-1] = rand_type;
pointer if the front one has wrapped. Returns a 31-bit random number. */
long int
-random ()
+random (void)
{
if (rand_type == TYPE_0)
{