--- /dev/null
+implementation module RandomExt\r
+\r
+import StdEnvExt\r
+import StdClass, StdInt, StdString\r
+import StdTime\r
+\r
+\r
+:: RandomSeed = RS !Int\r
+\r
+\r
+nullRandomSeed :: RandomSeed\r
+nullRandomSeed\r
+= RS 0\r
+\r
+getNewRandomSeed :: !*env -> (!RandomSeed, !*env) | TimeEnv env\r
+getNewRandomSeed env\r
+# ({hours,minutes,seconds}, env) = getCurrentTime env\r
+= (RS (1+(hours+minutes+seconds) bitand 65535), env)\r
+\r
+random :: !RandomSeed -> (!Int,!RandomSeed)\r
+random (RS seed)\r
+= (newSeed,RS newSeed)\r
+where\r
+ newSeed = if (nextSeed>=0) nextSeed (nextSeed+65537)\r
+ nextSeed = (seed75 bitand 65535)-(seed75>>16)\r
+ seed75 = seed*75\r
+\r
+instance toString RandomSeed where toString (RS r) = toString r\r
+instance fromString RandomSeed where fromString str = RS (fromString str)\r
+instance == RandomSeed where == (RS r1) (RS r2) = r1 == r2\r