summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/virtchannel_base/randseed.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/virtchannel_base/randseed.tcl')
-rw-r--r--tcllib/modules/virtchannel_base/randseed.tcl58
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