--- ray/src/common/urand.c 1991/08/12 13:07:02 1.7 +++ ray/src/common/urand.c 2003/06/07 12:50:21 2.7 @@ -1,35 +1,43 @@ -/* Copyright (c) 1991 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: urand.c,v 2.7 2003/06/07 12:50:21 schorsch Exp $"; #endif - /* * Anticorrelated random function due to Christophe Schlick */ +#include "copyright.h" + +#include + +#include "standard.h" #include "random.h" -#define NULL 0 +#undef initurand -extern char *malloc(); +#define MAXORDER (8*sizeof(unsigned short)) -short *urperm; /* urand() permutation */ +unsigned short *urperm = NULL; /* urand() permutation */ int urmask; /* bits used in permutation */ - +int initurand(size) /* initialize urand() for size entries */ int size; { int order, n; register int i, offset; - size--; + if (urperm != NULL) + free((void *)urperm); + if (--size <= 0) { + urperm = NULL; + urmask = 0; + return(0); + } for (i = 1; size >>= 1; i++) ; - order = i; + order = i>MAXORDER ? MAXORDER : i; urmask = (1<