4 *-------------------------------------------------------------------------
7 * Missing rand implementations for Win32
9 *-------------------------------------------------------------------------
14 * Copyright (c) 1993 Martin Birgmeier
15 * All rights reserved.
17 * You may redistribute unmodified or modified versions of this source
18 * code provided that the above copyright notice and this and the
19 * following conditions are retained.
21 * This software is provided ``as is'', and comes with no warranties
22 * of any kind. I shall in no event be liable for anything that happens
23 * to anyone/anything when using this software.
25 #define RAND48_SEED_0 (0x330e)
26 #define RAND48_SEED_1 (0xabcd)
27 #define RAND48_SEED_2 (0x1234)
28 #define RAND48_MULT_0 (0xe66d)
29 #define RAND48_MULT_1 (0xdeec)
30 #define RAND48_MULT_2 (0x0005)
31 #define RAND48_ADD (0x000b)
33 unsigned short _rand48_seed
[3] = {
38 unsigned short _rand48_mult
[3] = {
43 unsigned short _rand48_add
= RAND48_ADD
;
46 _dorand48(unsigned short xseed
[3])
49 unsigned short temp
[2];
51 accu
= (unsigned long) _rand48_mult
[0] * (unsigned long) xseed
[0] +
52 (unsigned long) _rand48_add
;
53 temp
[0] = (unsigned short) accu
; /* lower 16 bits */
54 accu
>>= sizeof(unsigned short) * 8;
55 accu
+= (unsigned long) _rand48_mult
[0] * (unsigned long) xseed
[1] +
56 (unsigned long) _rand48_mult
[1] * (unsigned long) xseed
[0];
57 temp
[1] = (unsigned short) accu
; /* middle 16 bits */
58 accu
>>= sizeof(unsigned short) * 8;
59 accu
+= _rand48_mult
[0] * xseed
[2] + _rand48_mult
[1] * xseed
[1] + _rand48_mult
[2] * xseed
[0];
62 xseed
[2] = (unsigned short) accu
;
68 _dorand48(_rand48_seed
);
69 return ((long) _rand48_seed
[2] << 15) + ((long) _rand48_seed
[1] >> 1);
75 _rand48_seed
[0] = RAND48_SEED_0
;
76 _rand48_seed
[1] = (unsigned short) seed
;
77 _rand48_seed
[2] = (unsigned short) (seed
> 16);
78 _rand48_mult
[0] = RAND48_MULT_0
;
79 _rand48_mult
[1] = RAND48_MULT_1
;
80 _rand48_mult
[2] = RAND48_MULT_2
;
81 _rand48_add
= RAND48_ADD
;