summaryrefslogtreecommitdiff
path: root/fp2/week2/mart/oldold/old/Random.icl
diff options
context:
space:
mode:
authorMart Lubbers2015-04-24 14:35:17 +0200
committerMart Lubbers2015-04-24 14:35:17 +0200
commita067356625105f50978443d3b0a0a5d8f6391184 (patch)
treed194d49f36232b8e5860ca557c75f11a3ac05afe /fp2/week2/mart/oldold/old/Random.icl
parentupdated practicum files (diff)
rare shit
Diffstat (limited to 'fp2/week2/mart/oldold/old/Random.icl')
-rw-r--r--fp2/week2/mart/oldold/old/Random.icl20
1 files changed, 20 insertions, 0 deletions
diff --git a/fp2/week2/mart/oldold/old/Random.icl b/fp2/week2/mart/oldold/old/Random.icl
new file mode 100644
index 0000000..b6e0768
--- /dev/null
+++ b/fp2/week2/mart/oldold/old/Random.icl
@@ -0,0 +1,20 @@
+implementation module Random
+
+import StdFile, StdList, StdMisc, StdArray, Random
+
+:: RandomSeed :== Int
+
+nullRandomSeed :: RandomSeed
+nullRandomSeed = 0
+
+getNewRandomSeed :: !*env -> (!RandomSeed, !*env) | FileSystem env
+getNewRandomSeed env
+# (ok, src, env) = sfopen "/dev/urandom" FReadData env
+| not ok => abort "could not open /dev/urandom"
+# (bytes, src) = sfreads src 4
+ seed = foldl (\x y->(x<<8)+toInt y) 0 [c \\ c<-:bytes]
+| otherwise => (seed, env)
+
+random :: !RandomSeed -> .(!Int, !RandomSeed)
+random seed = (seed>>16 bitand 0xFFFF, seed*0x08088405+1)
+