aboutsummaryrefslogtreecommitdiff
path: root/src/rand_sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rand_sys.c')
-rw-r--r--src/rand_sys.c41
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