49 lines
572 B
C
49 lines
572 B
C
#include <windows.h>
|
|
#include <port1632.h>
|
|
#include "../scrsave.h"
|
|
|
|
WORD rand(void);
|
|
|
|
static LONG a = 1234567;
|
|
|
|
|
|
|
|
VOID APIENTRY SeedRand(LONG l)
|
|
{
|
|
a = l;
|
|
}
|
|
|
|
|
|
SHORT APIENTRY WRand(w)
|
|
UINT w;
|
|
{
|
|
WORD x = rand() & 0x7fff;
|
|
|
|
if (w == 0)
|
|
return 0;
|
|
return x % w;
|
|
}
|
|
|
|
#define m 100000000L
|
|
#define m1 10000L
|
|
#define b 31415821L
|
|
|
|
|
|
LONG mult(LONG p, LONG q)
|
|
{
|
|
LONG p1, p0, q1, q0;
|
|
|
|
p1 = p / m1;
|
|
p0 = p % m1;
|
|
q1 = q / m1;
|
|
q0 = q & m1;
|
|
return (((p0 * q1 + p1 * q0) % m1) * m1 + p0 * q0) % m;
|
|
}
|
|
|
|
|
|
WORD rand()
|
|
{
|
|
a = (mult(a, b) + 1) % m;
|
|
return (WORD) (a >> 8);
|
|
}
|