# ACTIVESTATE TEAPOT-PKG BEGIN TM -*- tcl -*- # -- Tcl Module # @@ Meta Begin # Package tcl::randomseed 1 # Meta as::build::date 2015-05-25 # Meta as::origin http://sourceforge.net/projects/tcllib # Meta category Reflected/virtual channel support # Meta description Utilities for random channels # Meta license BSD # Meta platform tcl # Meta require {Tcl 8.5} # Meta subject {virtual channel} merge {tip 219} seed random # Meta subject /dev/random {reflected channel} # Meta summary tcl::randomseed # @@ Meta End # ACTIVESTATE TEAPOT-PKG BEGIN REQUIREMENTS package require Tcl 8.5 # ACTIVESTATE TEAPOT-PKG END REQUIREMENTS # ACTIVESTATE TEAPOT-PKG BEGIN DECLARE package provide tcl::randomseed 1 # ACTIVESTATE TEAPOT-PKG END DECLARE # ACTIVESTATE TEAPOT-PKG END TM # -*- 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