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