proc t {{chap {}}} {
    global lastT
    if {$chap == ""} {
	set chap $lastT
    }
    set lastT $chap
    catch $chap
    test $chap
}
proc s {} {uplevel #0 source test}

proc test {chap} {
    global map catch
    foreach f [glob $chap-*.tcl] {
	set ex [file root $f]
	if {[info exists map($ex)]} {
	    puts "$f is $map($ex)"
	} elseif {[info exists catch($ex)]} {
	    puts $f
	    catch {uplevel #0 [list source $f]} result
	    puts "ERROR: $result"
	} else {
	    puts $f
	    puts [uplevel #0 [list source $f]]
	}
    }
}
# Chap 1
proc 1 {} {
    uplevel #0 {
	set one 1
	set two 2
    }
}
# Chap 3
# construct cgilib.tcl

proc 3 {} {
    uplevel #0 {
	file mkdir /usr/local/lib
	set out [open /usr/local/lib/cgilib.tcl w]
	foreach f {../examples/cgilib.tcl 3-4.tcl 11-3.tcl 11-4.tcl} {
	    set in [open $f]
	    puts -nonewline $out [read $in]
	    close $in
	}
	close $out
	file delete -force cgilib.tcl
	exec ln -s /usr/local/lib/cgilib.tcl
	
	# Set query for newguest.cgi
	
	set env(QUERY_STRING) name=Brent+Welch&url=http%3a%2f%2fwww%2ebeedub%2ecom%2f&html=%3cimg+src%3dhttp%3a%2f%2fwww%2ebeedub%2ecom%2fwelch%2egif%3e
	catch {unset cgi}
    }
}

# Chap 4
proc 4 {} {
    uplevel #0 {
	set s1 hello
	set s2 world
    }
}

# Chap 6
proc 6 {} {
    uplevel #0 {
	set x 32
	set y 38
	set key 0
	set range 1
	set value x
	set count(other) 1
	proc body3 {} {}
	set a A 
	set b B
	proc foo {} {return c}
    }
}

proc 8 {} {
    uplevel #0 {
	catch {unset a}
    }
}

proc 9 {} {
    uplevel #0 {
	set channel [open /etc/passwd]
    }
}

proc 14 {} {
    proc namespace {what body} {
	puts stderr "namespace $what"
	uplevel #0 $body
    }
    proc variable {args} {
	foreach {name value} $args {
	    if {[string length $value] > 0} {
		uplevel #0 [list set $name $value]
	    }
	}
    }
}

proc 15 {} {
    uplevel #0 {
	set prompt "stdin > "
    }
}

proc 17 {} {
    uplevel #0 {
	foreach interp [interp slaves {}] {
	    interp delete $interp
	}
    }
}

proc 19 {} {
    eval destroy [winfo children .]
    catch {interp delete shell}
    source 27-1.tcl
    destroy .f
    set out [open browse.tcl w]
    puts $out "#!/bin/sh"
    puts $out "# \\"
    puts $out {exec wish8.0 "$0" ${1-"$@"}}
    foreach f {19-3.tcl ../examples/browseExtras.tcl 37-2.tcl} {
	set in [open $f]
	puts -nonewline $out [read $in]
	close $in
    }
    catch {exec chmod a+x evalsrv.tcl}
    close $out
    set out [open evalsrv.tcl w]
    puts $out "#!/bin/sh"
    puts $out "# \\"
    puts $out {exec wish8.0 "$0" ${1-"$@"}}
    foreach f {27-1.tcl ../examples/evalExtras.tcl 19-4.tcl 37-3.tcl } {
	set in [open $f]
	puts -nonewline $out [read $in]
	close $in
    }
    close $out
    catch {exec chmod a+x evalsrv.tcl}

}

source map
