diff options
Diffstat (limited to 'tcllib/modules/virtchannel_base/randseed.tcl')
-rw-r--r-- | tcllib/modules/virtchannel_base/randseed.tcl | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tcllib/modules/virtchannel_base/randseed.tcl b/tcllib/modules/virtchannel_base/randseed.tcl new file mode 100644 index 0000000..48bf96d --- /dev/null +++ b/tcllib/modules/virtchannel_base/randseed.tcl @@ -0,0 +1,58 @@ +# -*- tcl -*- +# # ## ### ##### ######## ############# +# (C) 2009 Andreas Kupries + +# @@ Meta Begin +# Package tcl::randomseed 1 +# Meta as::author {Andreas Kupries} +# Meta as::copyright 2009 +# Meta as::license BSD +# Meta description Generate and combine seed lists for the +# Meta description random number generator inside of the +# Meta description tcl::chan::random channel. Sources of +# Meta description randomness are process id, time in two +# Meta description granularities, and Tcl's random number +# Meta description generator. +# Meta platform tcl +# Meta require {Tcl 8.5} +# @@ Meta End + +# # ## ### ##### ######## ############# + +package require Tcl 8.5 + +# # ## ### ##### ######## ############# + +namespace eval ::tcl {} + +proc ::tcl::randomseed {} { + set result {} + foreach v [list \ + [pid] \ + [clock seconds] \ + [expr {int(256*rand())}] \ + [clock clicks -milliseconds]] \ + { + lappend result [expr {$v % 256}] + } + return $result +} + +proc ::tcl::combine {a b} { + while {[llength $a] < [llength $b]} { + lappend a 0 + } + while {[llength $b] < [llength $a]} { + lappend b 0 + } + + set result {} + foreach x $a y $b { + lappend result [expr {($x ^ $y) % 256}] + } + return $result +} + +# # ## ### ##### ######## ############# +package provide tcl::randomseed 1 +return |