Posted to tcl by bairui at Tue Sep 08 23:11:59 GMT 2020view pretty
#!/usr/bin/env tclsh
namespace eval myapp {}
proc ::myapp::main {argv0 argv} {
variable reload 0
puts "frame=<[info frame]>"
while {([puts -nonewline "? "] eq "") && ([flush stdout] eq "") && [gets stdin line]} {
switch -- $line {
r {set ::myapp::reload 1 ; break}
default {puts $line}
}
}
if {$reload} {
# Reload the server script and restart the server.
uplevel #0 [list source [info script]]
if {[info commands tailcall] eq {tailcall}} {
puts "tail calling main"
tailcall ::myapp::main $argv0 $argv
} else {
puts "recursing main"
::myapp::main $argv0 $argv
}
}
}
puts "\nLoading script: ::myapp::reload=<[expr {[info exists ::myapp::reload] ? $::myapp::reload : {}}]>"
# If this is the main script...
if {[info exists argv0]
&& ([file tail [info script]] eq [file tail $argv0])} {
# If this is not a reload...
if {![info exists ::myapp::reload] || $::myapp::reload} {
::myapp::main $argv0 $argv
}
}