System call sys_getchar () was improved; stdin is correspond with 0. fd and stdout...
[ZeXOS.git] / libc / stdlib / rand.c
blob3980dd269e1f26878a8845fb87dcb633aa4f0332
1 /*
2 * ZeX/OS
3 * Copyright (C) 2008 Tomas 'ZeXx86' Jedrzejek (zexx86@gmail.com)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 /* magic number */
21 #define RAND_MAX 0x7fffffff
23 static unsigned long next = 1;
26 static int do_rand (unsigned long *ctx)
28 return ((*ctx = *ctx * 1103515245 + 12345) % ((unsigned long) RAND_MAX + 1));
31 int rand_r (unsigned int *ctx)
33 unsigned long val = (unsigned long) *ctx;
34 *ctx = do_rand (&val);
36 return (int) *ctx;
39 int rand ()
41 return do_rand (&next);
44 void srand (unsigned int seed)
46 next = seed;