.menubar.tools add command -label "Debugger..." -command popupDebugger

set g_last_debug_cmd "puts \"Hello world\""

proc popupDebugger {} {
    global g_last_debug_cmd

    set wi .debugger
    catch { destroy $wi }
    toplevel $wi

    wm transient $wi .
    wm resizable $wi 300 200
    wm title $wi "CORE Debugger"
   
    frame $wi.dbg -borderwidth 4
    label $wi.dbg.label1 \
	-text "Enter TCL/Tk commands below, press Run to evaluate:"
    text $wi.dbg.cmd -bg white -width 100 -height 3

    pack $wi.dbg.label1 $wi.dbg.cmd -side top -anchor w -padx 4 -pady 4
    pack $wi.dbg -side top 

    $wi.dbg.cmd insert end "$g_last_debug_cmd"

    frame $wi.btn
    # evaluate debugging commands entered into the text box below
    button $wi.btn.exec -text "Run" -command {
	global g_last_debug_cmd
	set wi .debugger
	set i 1
	set g_last_debug_cmd ""
	while { 1 } {
	    set cmd [$wi.dbg.cmd get $i.0 $i.end]
	    set g_last_debug_cmd "$g_last_debug_cmd$cmd\n"
	    if { $cmd == "" } { break }
	    catch { eval $cmd } output
	    puts $output
	    incr i
	}
    }
    button $wi.btn.close -text "Close" -command "destroy .debugger"

    pack $wi.btn.exec $wi.btn.close -side left -padx 4 -pady 4
    pack $wi.btn -side bottom
}