1# -*- tcl -*- 2# # ## ### ##### ######## ############# 3# (C) 2009 Andreas Kupries 4 5# @@ Meta Begin 6# Package tcl::randomseed 1 7# Meta as::author {Andreas Kupries} 8# Meta as::copyright 2009 9# Meta as::license BSD 10# Meta description Generate and combine seed lists for the 11# Meta description random number generator inside of the 12# Meta description tcl::chan::random channel. Sources of 13# Meta description randomness are process id, time in two 14# Meta description granularities, and Tcl's random number 15# Meta description generator. 16# Meta platform tcl 17# Meta require {Tcl 8.5} 18# @@ Meta End 19 20# # ## ### ##### ######## ############# 21 22package require Tcl 8.5 23 24# # ## ### ##### ######## ############# 25 26namespace eval ::tcl {} 27 28proc ::tcl::randomseed {} { 29 set result {} 30 foreach v [list \ 31 [pid] \ 32 [clock seconds] \ 33 [expr {int(256*rand())}] \ 34 [clock clicks -milliseconds]] \ 35 { 36 lappend result [expr {$v % 256}] 37 } 38 return $result 39} 40 41proc ::tcl::combine {a b} { 42 while {[llength $a] < [llength $b]} { 43 lappend a 0 44 } 45 while {[llength $b] < [llength $a]} { 46 lappend b 0 47 } 48 49 set result {} 50 foreach x $a y $b { 51 lappend result [expr {($x ^ $y) % 256}] 52 } 53 return $result 54} 55 56# # ## ### ##### ######## ############# 57package provide tcl::randomseed 1 58return 59