Skip to content

Commit 1366f8e

Browse files
committed
Add random.c
1 parent 7e706eb commit 1366f8e

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

hardware/msp430/cores/msp430/random.c

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/*-
2+
* Copyright (c) 1990, 1993
3+
* The Regents of the University of California. All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions
7+
* are met:
8+
* 1. Redistributions of source code must retain the above copyright
9+
* notice, this list of conditions and the following disclaimer.
10+
* 2. Redistributions in binary form must reproduce the above copyright
11+
* notice, this list of conditions and the following disclaimer in the
12+
* documentation and/or other materials provided with the distribution.
13+
* 3. Neither the name of the University nor the names of its contributors
14+
* may be used to endorse or promote products derived from this software
15+
* without specific prior written permission.
16+
*
17+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27+
* SUCH DAMAGE.
28+
*
29+
* Posix rand_r function added May 1999 by Wes Peters <[email protected]>.
30+
*
31+
* $Id$
32+
*/
33+
34+
/*
35+
* From:
36+
static char sccsid[] = "@(#)rand.c 8.1 (Berkeley) 6/14/93";
37+
*/
38+
#ifndef RANDOM_MAX
39+
#define RANDOM_MAX 0x7FFFFFFF
40+
#endif
41+
42+
#include <stdlib.h>
43+
44+
static long
45+
do_random(unsigned long *ctx)
46+
{
47+
/*
48+
* Compute x = (7^5 * x) mod (2^31 - 1)
49+
* wihout overflowing 31 bits:
50+
* (2^31 - 1) = 127773 * (7^5) + 2836
51+
* From "Random number generators: good ones are hard to find",
52+
* Park and Miller, Communications of the ACM, vol. 31, no. 10,
53+
* October 1988, p. 1195.
54+
*/
55+
long hi, lo, x;
56+
57+
x = *ctx;
58+
/* Can't be initialized with 0, so use another value. */
59+
if (x == 0)
60+
x = 123459876L;
61+
hi = x / 127773L;
62+
lo = x % 127773L;
63+
x = 16807L * lo - 2836L * hi;
64+
if (x < 0)
65+
x += 0x7fffffffL;
66+
return ((*ctx = x) % ((unsigned long)RANDOM_MAX + 1));
67+
}
68+
69+
70+
long
71+
random_r(unsigned long *ctx)
72+
{
73+
return do_random(ctx);
74+
}
75+
76+
77+
static unsigned long next = 1;
78+
79+
long
80+
random(void)
81+
{
82+
return do_random(&next);
83+
}
84+
85+
void
86+
srandom(unsigned long seed)
87+
{
88+
next = seed;
89+
}
90+

0 commit comments

Comments
 (0)