#| -*-Scheme-*-
-$Id: random.scm,v 14.18 1999/01/02 06:11:34 cph Exp $
+$Id: random.scm,v 14.19 1999/08/09 19:08:50 cph Exp $
Copyright (c) 1993-1999 Massachusetts Institute of Technology
(let ((state (if (default-object? state) #f state)))
(if (or (eq? #t state) (int:integer? state))
(initial-random-state
- (congruential-rng (+ (real-time-clock) 123456789)))
+ (congruential-rng
+ ;; Use good random source if available
+ (if (file-exists? "/dev/urandom")
+ (call-with-input-file "/dev/urandom"
+ (lambda (port)
+ (let* ((b1 (char->integer (read-char port)))
+ (b2 (char->integer (read-char port)))
+ (b3 (char->integer (read-char port)))
+ (b4 (char->integer (read-char port))))
+ (+ (* b1 #x1000000)
+ (* b2 #x10000)
+ (* b3 #x100)
+ b4))))
+ (+ (real-time-clock) 123456789))))
(copy-random-state
(guarantee-random-state state 'MAKE-RANDOM-STATE)))))