head 1.7; access; symbols; locks mpf:1.7; strict; comment @# @; 1.7 date 92.12.10.22.33.28; author mpf; state Exp; branches; next 1.6; 1.6 date 92.12.10.21.49.27; author mpf; state Exp; branches; next 1.5; 1.5 date 92.11.24.01.07.22; author cwitty; state Exp; branches; next 1.4; 1.4 date 92.11.22.02.11.49; author mpf; state Exp; branches; next 1.3; 1.3 date 92.11.13.08.01.39; author mpf; state Exp; branches; next 1.2; 1.2 date 92.11.13.07.15.28; author mpf; state Exp; branches; next 1.1; 1.1 date 92.11.13.05.56.42; author mpf; state Exp; branches; next ; desc @Tcl script file to initialize gridwars. Right now it just initializes the square demo. @ 1.7 log @Gave up on indenting menu commands. @ text @#!/home/c2/mpf/GridWars/wish -f set home /home/c2/mpf/GridWars signal default int proc showfile {w title file} { catch {destroy $w} toplevel $w -bd 2 -relief raised -class GridWars wm title $w $title wm iconname $w $title button $w.ok -text OK -command "destroy $w" text $w.t -bd 2 -yscrollcommand "$w.s set" -setgrid yes $w.t insert 0.0 [read_file $file] scrollbar $w.s -command "$w.t yview" pack append $w $w.ok {bottom fillx} $w.s {right filly} $w.t {expand fill} } proc tkerror {message} { catch {destroy .error} toplevel .error -bd 2 -relief raised -class "GridWars" wm title .error "Error" wm iconname .error "Error" message .error.msg -text $message button .error.btn -text "OK" -command "destroy .error" pack append .error .error.msg {expand fill} .error.btn {fillx} } set colorColorDefs { {>V<^ DeepSkyBlue1} {PS/\\#\$ SeaGreen1} {GLRA green3} {lra green4 white} {?N~WC orange} {gp magenta} {\[\]\{( cyan} {smj DarkTurquoise} {DE yellow2} {YQ HotPink} {@@ tomato} {{} gray75} } set monoColorDefs { {DEY@@ black black gray25 white} {gp\[\]\{(smj white black gray50 black} {GLRAlra?N~WC white white gray25 black} {>V<^PS/\\#\$ black white} {{} black white} } source $home/file.tcl proc getconf {wid opt} {lindex [$wid config $opt] 4} proc enter.key {wid key} { if {$key!=""} { scan $key %c num if {$num>=32 && $num<127} { $wid cursor put $key $wid cursor turn $key $wid cursor move forward } } } proc go {wid dir} { $wid cursor turn $dir $wid cursor move forward } proc cursor_go {wid x y} { set cs [getconf $wid -cellsize] set x [expr $x/$cs] set y [expr $y/$cs] $wid cursor goto "$x $y" } set paint_sym " " proc paint_color {wid x y} { global paint_sym set cs [getconf $wid -cellsize] set x [expr $x/$cs] set y [expr $y/$cs] $wid poke "$x $y" $paint_sym } proc save_safe {w fn} { if {[regexp .*\.ga2\$ $fn]} { $w saveas $fn } else { $w saveas $fn.ga2 } } proc grid.bindings {wid menu} { bind $wid {go %W south} bind $wid {go %W north} bind $wid {go %W east} bind $wid {go %W west} bind $wid {go %W north} bind $wid {go %W south} bind $wid {go %W east} bind $wid {go %W west} bind $wid exit bind $wid {%W cursor husk create} bind $wid {%W cursor husk destroy} bind $wid "start.running $menu.running.m $wid" bind $wid "stop.running $menu.running.m $wid" bind $wid "%W step; stop.running $menu.running.m $wid" bind $wid {fs "Load at origin" {%W load}} bind $wid {fs "Load randomly" {%W load rand}} bind $wid {fs "Save As..." {save_safe %W}} bind $wid {%W save} bind $wid {%W speed up} bind $wid {%W speed down} bind $wid {%W clear} bind $wid {%W cursor turn north} bind $wid {%W cursor turn south} bind $wid {%W cursor turn west} bind $wid {%W cursor turn east} bind $wid {enter.key %W %A} bind $wid {enter.key %W %A} bind $wid <1> {cursor_go %W %x %y} bind $wid {cursor_go %W %x %y} bind $wid <2> {%W scan mark %x %y} bind $wid {%W scan dragto %x %y} bind $wid <3> {paint_color %W %x %y} bind $wid {paint_color %W %x %y} } proc get_color {wid x y} { global paint_sym set cs [getconf $wid -cellsize] set x [expr $x/$cs] set y [expr $y/$cs] $wid cursor goto "$x $y" set paint_sym [$wid peek "$x $y"] } proc make.palette {wid} { set palchars " >V<^PS/\\#\$GLRAlraC?N~Wgp\[\]\{(smj@@DEYQ!\"%&')*+,-.0123456789:;=BFHIJKMOTUXZ_`bcdefhiknoqtuvwxyz|\}" set width [getconf $wid -viewwidth] set n [clength $palchars] for {set i 0} {$i < $n} {incr i} { $wid poke "[expr $i%$width] [expr $i/$width]" [cindex $palchars $i] } bind $wid <1> {get_color %W %x %y} } #---------------------------------------------------------------------- # The code below creates the main window. #---------------------------------------------------------------------- wm title . "Grid Wars" set cursState on set cellsize 18 set gsize 50x50 set view 35x35 proc start.running {m g} { $g start $m entryconf 0 -state disabled $m entryconf 1 -state normal } proc stop.running {m g} { $g stop $m entryconf 0 -state normal $m entryconf 1 -state disabled } proc make_menus {p g} { frame $p.menu -relief raised -borderwidth 1 menubutton $p.menu.file -text "File" -menu $p.menu.file.m -underline 0 menu $p.menu.file.m $p.menu.file.m add command -label New -accelerator M-Delete \ -command "$g clear" -underline 0 $p.menu.file.m add cascade -label "Load" -accelerator ==> \ -menu $p.menu.file.m.load -underline 0 menu $p.menu.file.m.load $p.menu.file.m.load add command -label "At Origin" \ -accelerator "C-x C-f" \ -command "fs {Load at origin} {$g load}" \ -underline 3 $p.menu.file.m.load add command -label "Randomly" \ -accelerator "C-x C-r" \ -command "fs {Load randomly} {$g load random}" \ -underline 0 $p.menu.file.m add command -label "Save" -accelerator "C-x C-s" \ -command "$g save" -underline 0 $p.menu.file.m add command -label "Save As..." -accelerator "C-x C-w" \ -command "fs {Save As...} {save_safe $g}" -underline 5 $p.menu.file.m add command -label "Quit" -accelerator "C-x C-c" \ -command {exit} -underline 0 menubutton $p.menu.cursor -text "Cursor" -menu $p.menu.cursor.m -underline 0 menu $p.menu.cursor.m $p.menu.cursor.m add check -label "Enable" -variable cursState \ -onvalue on -offvalue off -command "$g cursor \$cursState" \ -underline 0 $p.menu.cursor.m add cascade -label "Turn & Move" -accelerator ==> \ -menu $p.menu.cursor.m.turnmove -underline 7 menu $p.menu.cursor.m.turnmove $p.menu.cursor.m.turnmove add command -label "North" \ -accelerator "C-p,Up" -command "go $g north" -underline 0 $p.menu.cursor.m.turnmove add command -label "South" \ -accelerator "C-n,Down" -command "go $g south" -underline 0 $p.menu.cursor.m.turnmove add command -label "East" \ -accelerator "C-f,Right" -command "go $g east" -underline 0 $p.menu.cursor.m.turnmove add command -label "West" \ -accelerator "C-b,Left" -command "go $g west" -underline 0 $p.menu.cursor.m add cascade -label "Turn" -accelerator ==> \ -menu $p.menu.cursor.m.turn -underline 0 menu $p.menu.cursor.m.turn $p.menu.cursor.m.turn add command -label "North" \ -accelerator "M-p" -command "$g curs turn n" -underline 0 $p.menu.cursor.m.turn add command -label "South" \ -accelerator "M-n" -command "$g curs turn s" -underline 0 $p.menu.cursor.m.turn add command -label "East" \ -accelerator "M-b" -command "$g curs turn e" -underline 0 $p.menu.cursor.m.turn add command -label "West" \ -accelerator "M-f" -command "$g curs turn w" -underline 0 $p.menu.cursor.m add command -label "Create Process" \ -accelerator "M-c" \ -command "$g cursor husk create" -underline 0 $p.menu.cursor.m add command -label "Destroy Process" \ -accelerator "M-d" \ -command "$g cursor husk destroy" -underline 0 menubutton $p.menu.running -text "Running" -menu $p.menu.running.m \ -underline 0 menu $p.menu.running.m $p.menu.running.m add command -label "Run" -accelerator "M-r" \ -command "start.running $p.menu.running.m $g" -underline 0 $p.menu.running.m add command -label "Stop" -accelerator "M-s" \ -command "stop.running $p.menu.running.m $g" -underline 0 \ -state disabled $p.menu.running.m add command -label "Step" -accelerator "M-space" \ -command "$g step; stop.running $p.menu.running.m $g" -underline 2 $p.menu.running.m add command -label "Faster" -accelerator "M-\]" \ -command "$g speed up" -underline 0 $p.menu.running.m add command -label "Slower" -accelerator "M-\[" \ -command "$g speed down" -underline 1 menubutton $p.menu.font -text "Scale" -menu $p.menu.font.m -underline 0 menu $p.menu.font.m $p.menu.font.m add radio -label "1" -command "$g config -cellsize 1" \ -variable cellsize -value 1 $p.menu.font.m add radio -label "2" -command "$g config -cellsize 2"\ -variable cellsize -value 2 $p.menu.font.m add radio -label "3" -command "$g config -cellsize 3"\ -variable cellsize -value 3 $p.menu.font.m add radio -label "4" -command "$g config -cellsize 4"\ -variable cellsize -value 4 $p.menu.font.m add radio -label "6" -command "$g config -font *-6-*"\ -variable cellsize -value 6 $p.menu.font.m add radio -label "10" \ -command "$g config -font *-courier-bold-r-*-10-*"\ -variable cellsize -value 10 $p.menu.font.m add radio -label "13" -command "$g config -font fixed"\ -variable cellsize -value 13 $p.menu.font.m add radio -label "14" \ -command "$g config -font *-courier-bold-r-*-14-*"\ -variable cellsize -value 14 $p.menu.font.m add radio -label "18" \ -command "$g config -font *-courier-bold-r-*-18-*" \ -variable cellsize -value 18 $p.menu.font.m add radio -label "25" \ -command "$g config -font *-courier-bold-r-*-25-*" \ -variable cellsize -value 25 $p.menu.font.m add radio -label "34" \ -command "$g config -font *-courier-bold-r-*-34-*" \ -variable cellsize -value 34 menubutton $p.menu.gsize -text "Grid" -menu $p.menu.gsize.m -underline 0 menu $p.menu.gsize.m $p.menu.gsize.m add radio -label "10x10" -variable gsize -value 10x10 \ -command "$g config -gridwidth 10 -gridheight 10" $p.menu.gsize.m add radio -label "25x25" -variable gsize -value 25x25 \ -command "$g config -gridwidth 25 -gridheight 25" $p.menu.gsize.m add radio -label "50x50" -variable gsize -value 50x50 \ -command "$g config -gridwidth 50 -gridheight 50" $p.menu.gsize.m add radio -label "100x100" -variable gsize \ -value 100x100 \ -command "$g config -gridwidth 100 -gridheight 100" $p.menu.gsize.m add radio -label "200x200" -variable gsize \ -value 200x200 \ -command "$g config -gridwidth 200 -gridheight 200" $p.menu.gsize.m add radio -label "400x400" -variable gsize \ -value 400x400 \ -command {$g config -gridwidth 400 -gridheight 400} $p.menu.gsize.m add radio -label "800x800" -variable gsize \ -value 800x800 \ -command "$g config -gridwidth 800 -gridheight 800" menubutton $p.menu.view -text "View" -menu $p.menu.view.m -underline 0 menu $p.menu.view.m $p.menu.view.m add radio -label "10x10" -variable view -value 10x10 \ -command "$g config -viewwidth 10 -viewheight 10" $p.menu.view.m add radio -label "25x25" -variable view -value 25x25 \ -command "$g config -viewwidth 25 -viewheight 25" $p.menu.view.m add radio -label "35x35" -variable view -value 35x35 \ -command "$g config -viewwidth 35 -viewheight 35" $p.menu.view.m add radio -label "50x50" -variable view -value 50x50 \ -command "$g config -viewwidth 50 -viewheight 50" $p.menu.view.m add radio -label "100x100" -variable view -value 100x100 \ -command "$g config -viewwidth 100 -viewheight 100" $p.menu.view.m add radio -label "200x200" -variable view -value 200x200 \ -command "$g config -viewwidth 200 -viewheight 200" $p.menu.view.m add radio -label "400x400" -variable view -value 400x400 \ -command "$g config -viewwidth 400 -viewheight 400" $p.menu.view.m add radio -label "800x800" -variable view -value 800x800 \ -command "$g config -viewwidth 800 -viewheight 800" menubutton $p.menu.help -text "Help" -menu $p.menu.help.m -underline 0 menu $p.menu.help.m $p.menu.help.m add command -label "User's Manual" \ -command {showfile .man "User's Manual" $home/Manual} -underline 0 $p.menu.help.m add command -label "GRIP Language" \ -command {showfile .lang "GRIP Language" $home/Language} -underline 0 $p.menu.help.m add command -label "Rules for AI Olympics" \ -command {showfile .rules "Rules for AI Olympics" $home/Rules} \ -underline 0 $p.menu.help.m add command -label "GRIP File Format" \ -command {showfile .format "GRIP File Format" $home/Format} \ -underline 5 pack append $p.menu \ $p.menu.file {left} \ $p.menu.cursor {left} \ $p.menu.running {left} \ $p.menu.font {left} \ $p.menu.gsize {left} \ $p.menu.view {left} \ $p.menu.help {left} } make_menus "" .main.grid frame .palette -relief raised -bd 1 grid .palette.grid -gridwidth 2 -gridheight 48 -viewwidth 2 -viewheight 1 \ -font *-courier-bold-r-*-18-* -colorColors $colorColorDefs \ -monoColors $monoColorDefs -cursor on pack append .palette .palette.grid {expand fill} frame .main -relief raised -bd 1 grid .main.grid -cursor on -font *-courier-bold-r-*-18-* \ -gridwidth 50 -gridheight 50 -setgrid on \ -colorColors $colorColorDefs -monoColors $monoColorDefs \ -xscrollcommand ".main.hscroll set" \ -yscrollcommand ".main.vscroll set" scrollbar .main.hscroll -orient horiz -relief sunken \ -command ".main.grid config -xoffset" scrollbar .main.vscroll -orient vert -relief sunken \ -command ".main.grid config -yoffset" pack append .main .main.hscroll {bottom fillx} \ .main.vscroll {right filly} .main.grid {expand fill} pack append . \ .menu {fillx} \ .palette {left filly} \ .main {expand fill} grid.bindings .main.grid .menu tk_bindForTraversal .main.grid tk_menus . .menu.file .menu.cursor .menu.running .menu.font .menu.gsize .menu.view .menu.file.m.load .menu.cursor.m.turnmove .menu.cursor.m.move make.palette .palette.grid @ 1.6 log @First official stable version. Released to world. @ text @d172 2 a173 3 proc addcmd {m l c a {u 0}} { $m add command -label $l -accelerator $a -command $c -underline $u } a174 2 proc make_menus {p g} { frame $p.menu -relief raised -borderwidth 1 d176 19 a194 20 menu $p.menu.file.m addcmd $p.menu.file.m New "$g clear" M-Delete $p.menu.file.m add command -label "New" -accelerator "M-Delete" \ -command "$g clear" -underline 0 $p.menu.file.m add cascade -label "Load" -accelerator ==> \ -menu $p.menu.file.m.load -underline 0 menu $p.menu.file.m.load $p.menu.file.m.load add command -label "At Origin" \ -accelerator "C-x C-f" \ -command "fs {Load at origin} {$g load}" \ -underline 3 $p.menu.file.m.load add command -label "Randomly" \ -accelerator "C-x C-r" \ -command "fs {Load randomly} {$g load random}" \ -underline 0 $p.menu.file.m add command -label "Save" -accelerator "C-x C-s" \ -command "$g save" -underline 0 $p.menu.file.m add command -label "Save As..." -accelerator "C-x C-w" \ -command "fs {Save As...} {save_safe $g}" -underline 5 $p.menu.file.m add command -label "Quit" -accelerator "C-x C-c" \ d196 1 d198 2 a199 2 menu $p.menu.cursor.m $p.menu.cursor.m add check -label "Enable" -variable cursState \ d202 1 a202 1 $p.menu.cursor.m add cascade -label "Turn & Move" -accelerator ==> \ d204 2 a205 2 menu $p.menu.cursor.m.turnmove $p.menu.cursor.m.turnmove add command -label "North" \ d207 7 a213 7 $p.menu.cursor.m.turnmove add command -label "South" \ -accelerator "C-n,Down" -command "go $g south" -underline 0 $p.menu.cursor.m.turnmove add command -label "East" \ -accelerator "C-f,Right" -command "go $g east" -underline 0 $p.menu.cursor.m.turnmove add command -label "West" \ -accelerator "C-b,Left" -command "go $g west" -underline 0 $p.menu.cursor.m add cascade -label "Turn" -accelerator ==> \ d215 4 a218 4 menu $p.menu.cursor.m.turn $p.menu.cursor.m.turn add command -label "North" \ -accelerator "M-p" -command "$g curs turn n" -underline 0 $p.menu.cursor.m.turn add command -label "South" \ d220 1 a220 1 $p.menu.cursor.m.turn add command -label "East" \ d222 1 a222 1 $p.menu.cursor.m.turn add command -label "West" \ d224 1 a224 1 $p.menu.cursor.m add command -label "Create Process" \ d227 1 a227 1 $p.menu.cursor.m add command -label "Destroy Process" \ d230 1 d233 2 a234 2 menu $p.menu.running.m $p.menu.running.m add command -label "Run" -accelerator "M-r" \ d236 1 a236 1 $p.menu.running.m add command -label "Stop" -accelerator "M-s" \ d239 1 a239 1 $p.menu.running.m add command -label "Step" -accelerator "M-space" \ d241 1 a241 1 $p.menu.running.m add command -label "Faster" -accelerator "M-\]" \ d243 1 a243 1 $p.menu.running.m add command -label "Slower" -accelerator "M-\[" \ d245 1 d247 2 a248 2 menu $p.menu.font.m $p.menu.font.m add radio -label "1" -command "$g config -cellsize 1" \ d250 1 a250 1 $p.menu.font.m add radio -label "2" -command "$g config -cellsize 2"\ d252 1 a252 1 $p.menu.font.m add radio -label "3" -command "$g config -cellsize 3"\ d254 1 a254 1 $p.menu.font.m add radio -label "4" -command "$g config -cellsize 4"\ d256 1 a256 1 $p.menu.font.m add radio -label "6" -command "$g config -font *-6-*"\ d258 1 a258 1 $p.menu.font.m add radio -label "10" \ d261 1 a261 1 $p.menu.font.m add radio -label "13" -command "$g config -font fixed"\ d263 1 a263 1 $p.menu.font.m add radio -label "14" \ d266 1 a266 1 $p.menu.font.m add radio -label "18" \ d269 1 a269 1 $p.menu.font.m add radio -label "25" \ d272 1 a272 1 $p.menu.font.m add radio -label "34" \ d275 1 d277 2 a278 2 menu $p.menu.gsize.m $p.menu.gsize.m add radio -label "10x10" -variable gsize -value 10x10 \ d280 1 a280 1 $p.menu.gsize.m add radio -label "25x25" -variable gsize -value 25x25 \ d282 1 a282 1 $p.menu.gsize.m add radio -label "50x50" -variable gsize -value 50x50 \ d284 1 a284 1 $p.menu.gsize.m add radio -label "100x100" -variable gsize \ d287 1 a287 1 $p.menu.gsize.m add radio -label "200x200" -variable gsize \ d290 1 a290 1 $p.menu.gsize.m add radio -label "400x400" -variable gsize \ d293 1 a293 1 $p.menu.gsize.m add radio -label "800x800" -variable gsize \ d296 1 d298 2 a299 2 menu $p.menu.view.m $p.menu.view.m add radio -label "10x10" -variable view -value 10x10 \ d301 1 a301 1 $p.menu.view.m add radio -label "25x25" -variable view -value 25x25 \ d303 1 a303 1 $p.menu.view.m add radio -label "35x35" -variable view -value 35x35 \ d305 1 a305 1 $p.menu.view.m add radio -label "50x50" -variable view -value 50x50 \ d307 1 a307 1 $p.menu.view.m add radio -label "100x100" -variable view -value 100x100 \ d309 1 a309 1 $p.menu.view.m add radio -label "200x200" -variable view -value 200x200 \ d311 1 a311 1 $p.menu.view.m add radio -label "400x400" -variable view -value 400x400 \ d313 1 a313 1 $p.menu.view.m add radio -label "800x800" -variable view -value 800x800 \ d315 1 d317 2 a318 2 menu $p.menu.help.m $p.menu.help.m add command -label "User's Manual" \ d320 1 a320 1 $p.menu.help.m add command -label "GRIP Language" \ d322 1 a322 1 $p.menu.help.m add command -label "Rules for AI Olympics" \ d325 1 a325 1 $p.menu.help.m add command -label "GRIP File Format" \ @ 1.5 log @Started on a file-loader dialog box. @ text @d1 1 a1 1 #!gridwars -f d3 2 d7 35 a41 45 # {GRAYSCALE # {"\{\}()\[\]DEY@@" black} # {"GLRArwlra" gray30} # {"?N~\$gpj" gray45} # {">V<^PSX/\\#" gray60} # {" " gray90} #source fs.tcl #source tmplt.tcl #source misc.tcl #source message.tcl #source bind.tcl #set xfAutoPos 0 #set xfAllowEdit 0 #set xfPathElements /home/on/cwitty/import/xf/elements #set xfGlobalBorderWidth 2 #set xfFSPath [pwd] #set xfFSPattern * #set xfBindHelp #set xfBindSelect1 #set xfFontMessage "*-helvetica-bold-r-normal--20-*" #set xfHasColor [regexp -nocase "color" [winfo screenvisual .]] set curpath [pwd] proc fs {cmd} { global curpath catch {destroy .fs} toplevel .fs scrollbar .fs.scroll -command ".fs.list yview" listbox .fs.list -yscroll ".fs.scroll set" -relief raised -geometry 40x20 -exportselection no button .fs.cancel -text "Cancel" -command "destroy .fs" tk_listboxSingleSelect .fs.list pack append .fs .fs.cancel {bottom fillx} .fs.scroll {right filly} .fs.list {left expand fill} # wm grid .fs 20 20 [expr [winfo reqwidth .fs.list]/20] [expr [winfo reqheight .fs.list]/20] fsinsertdir $curpath bind .fs.list {destroy .fs} bind .fs.list "fsdo {$cmd} %y" } proc fsinsertdir {path} { .fs.list insert end .. foreach i [exec ls -A $path] { .fs.list insert end $i } d44 6 a49 13 proc fsdo {cmd y} { global curpath set file [.fs.list get [.fs.list nearest $y]] if [file isdirectory $curpath/$file] { .fs.list delete 0 end .fs.list select clear set curpath $curpath/$file foreach i [exec ls -a $curpath] { .fs.list insert end $i } } else { eval [concat $cmd $curpath/$file] } d52 2 a54 5 proc set.main.grid {top wid} { $wid config -setgrid on wm maxsize $top [getconf $wid -gridwidth] [getconf $wid -gridheight] wm minsize $top 10 10 } d72 25 a96 1 proc emacs.bindings {wid} { d106 24 d132 7 a138 11 proc grid.bindings {wid} { bind $wid {enter.key %W %A} emacs.bindings $wid bind $wid {%W cursor husk create} bind $wid {%W cursor husk destroy} bind $wid {%W start} bind $wid {%W stop} bind $wid {%W step} bind $wid {fs {%W load}} bind $wid {%W speed up} bind $wid {%W speed down} d141 9 a149 3 grid .palette \ -gridwidth 100 -gridheight 3 \ -viewwidth 1 -viewheight 3 d151 20 a170 1 frame .frame -relief raised -bd 3 d172 3 a174 1 grid .frame.grid -setgrid on -cursor on -font *-courier-*-r-normal-*-18-* d176 160 a335 8 pack append .frame .frame.grid {expand fill} label .title -text "Grid Wars" button .quit -text "Quit" -command exit pack append . .title {fillx} .palette {fillx} \ .frame {expand fill} .quit {fillx} d337 1 a337 1 grid.bindings .frame.grid d339 28 a366 1 set.main.grid . .frame.grid @ 1.4 log @Lotsa changes. @ text @d12 55 d76 6 a81 3 $wid cursor put $key $wid cursor turn $key $wid cursor move forward d109 2 d121 1 a121 1 grid .frame.grid -setgrid on -cursor on @ 1.3 log @Fancied up the square demo a bit. Is cute now. Try mouse buttons, and control-c. @ text @d3 1 a3 1 wm maxsize . 2000 2000 d5 6 a10 8 label .title -text "Square Demo" grid .grid button .qt -text "Quit" -command exit bind .grid {.grid position [expr %x-[.grid size]/2] \ [expr %y-[.grid size]/2]} bind .grid {.grid size [expr [.grid size]-1]} bind .grid {.grid size [expr [.grid size]+1]} bind .grid exit d12 63 a74 1 pack append . .title fillx .grid {expand fill} .qt fillx @ 1.2 log @Changed to use new Grid widget, which is initially identical to the square widget. @ text @d8 5 a12 2 bind .grid {.grid position %x %y} bind .grid control-c exit @ 1.1 log @Initial revision @ text @d6 1 a6 1 square .square d8 2 a9 2 bind .square {.square position %x %y} bind .square control-c exit d11 1 a11 1 pack append . .title fillx .square {expand fill} .qt fillx @