start:-
tk_new([], I),
tcl_eval(I, 'source demo.tcl', _),
tcl_eval(I, 'start', _),
main_main_loop(I,0),
tcl_delete(I).
main_main_loop(I,Num) :-
tk_next_event(I, Event),
(handle(I,Event) ->
NewNum is Num + 1,
tcl_eval(I,[set, loopctr, NewNum],_),
main_main_loop(I,NewNum)
;
true
).
handle(_,exit) :-
write('Terminating demo !'),
nl,
fail.
handle(_,plwrite(Txt)) :-
write(Txt),
nl. |
global loopctr sendstr image1a
proc init_vars {} {
global loopctr sendstr siz
set loopctr 0
set sendstr "Nothing"
}
proc init_screen {} {
wm title . "Tcl/Tk-Prolog demonstration"
init_vars
init_buttons
}
proc start {} {
init_screen
}
proc destroyall {} {
destroy .butt
destroy .graf
}
proc make_entry {wnpt txt cnvar wd} {
frame $wnpt
label $wnpt.tx -text $txt -anchor w
entry $wnpt.en -textvariable $cnvar -width $wd
pack $wnpt.tx -side left -anchor w -expand
1 -fill x
pack $wnpt.en -side right -anchor e
pack $wnpt -side top -expand 1 -fill x
}
proc make_label {wnpt txt1 txt2} {
frame $wnpt
label $wnpt.tx -text $txt1
label $wnpt.en -text $txt2
pack $wnpt.tx -side left -anchor w
pack $wnpt.en -side right -anchor e
pack $wnpt -side top -expand 1 -fill x
}
proc make_button {wnpt txt act} {
button $wnpt -text $txt -command $act
pack $wnpt -side top -expand 1 -fill x
}
proc init_buttons {} {
frame .butt
make_entry .butt.lop "Loop-counter" loopctr
4
make_entry .butt.ent "String" sendstr 20
make_button .butt.str "Send" "sendstr"
make_button .butt.ext "Exit" "prolog_event exit"
pack .butt -side left -anchor nw
}
proc sendstr {} {
global sendstr
prolog_event plwrite($sendstr)
}
proc msg_box {msg} {
toplevel .msg
message .msg.txt -relief sunken -border 2 -width 10c
\
-text $msg
button .msg.bt -relief raised -text "OK" -command
"destroy .msg"
pack .msg.txt .msg.bt -side top
}
proc inputbox {title txt default varname proc} {
global $varname
toplevel .fdlg
wm title .fdlg $title
label .fdlg.txt -text $txt
pack .fdlg.txt -side top
entry .fdlg.inp -textvariable $varname
pack .fdlg.inp -side top -expand 1 -fill x
frame .fdlg.okcanc
button .fdlg.okcanc.ok -text "OK" -command "destroy
.fdlg; $proc"
button .fdlg.okcanc.canc -text "Cancel" -command "destroy
.fdlg"
pack .fdlg.okcanc.ok .fdlg.okcanc.canc -side left
pack .fdlg.okcanc -side bottom
if {$default!=0} {set $varname $default}
focus .fdlg.inp
} |