rivet/rivet-tcl/random.tcl (30 lines of code) (raw):

### ## random [seed | value ] ## ## Generate a random number using only Tcl code. This proc tries to ## emulate what the TclX random function does. If we don't have TclX ## though, this is a decent substitute. ## ## Note: random predates the existence of Tcl's built-in rand() function, ## that is a part of the expr command -- programmers should consider using ## Tcl's built-in rand() function as an alternative to this command. ## ## $Id$ ## ### namespace eval ::rivet { proc random {args} { global _ran if {[llength $args] > 1} { set _ran [lindex $args 1] } else { set period 233280 if {[info exists _ran]} { set _ran [expr { ($_ran*9301 + 49297) % $period }] } else { set _ran [expr { [clock seconds] % $period } ] } return [expr { int($args*($_ran/double($period))) } ] } } }