Posted to tcl by bairui at Tue Sep 08 23:11:59 GMT 2020view raw
- #!/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
- }
- }