]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libiberty/random.c
libgfortran: Fix libgfortran.so versioning on Solaris with subdirs
[thirdparty/gcc.git] / libiberty / random.c
index ef00da0a5ae2ffcd4d5ce925a2217c5d5c603d56..cd0b7399e7313287482c25f01a58f4f0a7d006d6 100644 (file)
  * 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
@@ -62,7 +79,7 @@
 
 #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
@@ -209,8 +226,7 @@ static long int *end_ptr = &randtbl[sizeof(randtbl) / sizeof(randtbl[0])];
    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)
@@ -236,13 +252,10 @@ srandom (x)
    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;
@@ -305,14 +318,13 @@ initstate (seed, arg_state, n)
    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;
@@ -360,7 +372,7 @@ setstate (arg_state)
    pointer if the front one has wrapped.  Returns a 31-bit random number.  */
 
 long int
-random ()
+random (void)
 {
   if (rand_type == TYPE_0)
     {