This is random.c in view mode; [Download] [Up]
/*
* Copyright (c) 1983 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
/*
* This is derived from the Berkeley source:
* @(#)random.c 5.5 (Berkeley) 7/6/88
* It was reworked for the GNU C Library by Roland McGrath.
*
* Fixed to be portable to MSDOS by jhallen (changed ints to longs)
*
* jhallen- Made sure functions work if long is larger than 32 bits- it does
* Long is required to be at least 32 bits
* Also made saving and restoring state information far simpler
*/
#include "random.h"
struct state state=
{
{
0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342,
0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb,
0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd,
0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86,
0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7,
0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc,
0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b,
0xf5ad9d0e, 0x8999220b, 0x27fb47b9
},
&state.state[SEP],
&state.state[0]
};
void srandom(x)
{
register long i;
state.state[0]=x;
for(i=1;i!=DEG;++i) state.state[i]=(1103515145*state.state[i-1])+12345;
state.fptr= &state.state[SEP];
state.rptr= &state.state[0];
for(i=0;i!=10*DEG;++i) random();
}
long random()
{
long i=((*state.fptr+=*state.rptr)>>1)&0x7FFFFFFF;
if(++state.fptr==&state.state[DEG]) state.fptr=state.state, ++state.rptr;
else if(++state.rptr==&state.state[DEG]) state.rptr=state.state;
return i;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.