diff options
| author | Uneven Prankster <unevenprankster@protonmail.com> | 2023-07-25 09:42:54 -0300 |
|---|---|---|
| committer | Uneven Prankster <unevenprankster@protonmail.com> | 2023-07-25 09:42:54 -0300 |
| commit | 7dffe7df840bc0081767fafde90af78ce96bf300 (patch) | |
| tree | e025ba6b444c12d93eaa1c14a297216dde15ba54 /src/rand_sys.c | |
| parent | b6923926a1faa02e2e9341c6e53193fd878718e2 (diff) | |
Everyone loves random
Diffstat (limited to 'src/rand_sys.c')
| -rw-r--r-- | src/rand_sys.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/rand_sys.c b/src/rand_sys.c new file mode 100644 index 0000000..679ac94 --- /dev/null +++ b/src/rand_sys.c @@ -0,0 +1,41 @@ +#include "rand_sys.h" + +#define WIN32_LEAN_AND_MEAN +#define NOSERVICE +#define NOMCX +#define NOIME +#include <windows.h> + +static u32 state[2]; + +void rand_seed(void) +{ + FILETIME t; + GetSystemTimeAsFileTime(&t); + + u32 val = t.dwLowDateTime; + val ^= val >> 16; + val *= 0x85ebca6b; + val ^= val >> 13; + val *= 0xc2b2ae35; + val ^= val >> 16; + + state[0] = val; + state[1] = val ^ 0x49616e42U; +} + +u32 rand_u32(void) +{ + state[0] = (state[0] << 16) + (state[0] >> 16); + state[0] += state[1]; + state[1] += state[0]; + return state[0]; +} + +i32 rand_range(i32 min, i32 max) +{ + u32 range = (u32)(max - min + 1); + u32 num = rand_u32() % range; + + return min + (i32)num; +}
\ No newline at end of file |
