From 690b2dc4fac75d74f73f083f6e7b201b002e5def Mon Sep 17 00:00:00 2001 From: Julian Noble Date: Tue, 3 Feb 2026 22:40:51 +1100 Subject: [PATCH] tidy vfs src/vfs/_vfscommon.vfs --- .../BWman/ArrowButton.html | 0 .../BWman/BWidget.html | 0 .../BWman/Button.html | 0 .../BWman/ButtonBox.html | 0 .../BWman/ComboBox.html | 0 .../BWman/Dialog.html | 0 .../BWman/DragSite.html | 0 .../BWman/DropSite.html | 0 .../BWman/DynamicHelp.html | 0 .../BWman/Entry.html | 0 .../BWman/Label.html | 0 .../BWman/LabelEntry.html | 0 .../BWman/LabelFrame.html | 0 .../BWman/ListBox.html | 0 .../BWman/MainFrame.html | 0 .../BWman/MessageDlg.html | 0 .../BWman/NoteBook.html | 0 .../BWman/PagesManager.html | 0 .../BWman/PanedWindow.html | 0 .../BWman/PanelFrame.html | 0 .../BWman/PasswdDlg.html | 0 .../BWman/ProgressBar.html | 0 .../BWman/ProgressDlg.html | 0 .../BWman/ScrollView.html | 0 .../BWman/ScrollableFrame.html | 0 .../BWman/ScrolledWindow.html | 0 .../BWman/SelectColor.html | 5 +- .../BWman/SelectFont.html | 0 .../BWman/Separator.html | 0 .../BWman/SpinBox.html | 0 .../BWman/StatusBar.html | 0 .../BWman/TitleFrame.html | 0 .../BWman/Tree.html | 11 +- .../BWman/Widget.html | 0 .../BWman/contents.html | 0 .../BWman/index.html | 0 .../BWman/navtree.html | 0 .../BWman/options.htm | 0 .../CHANGES.txt | 0 .../ChangeLog | 41 ++ .../LICENSE.txt | 0 .../README.txt | 0 .../arrow.tcl | 0 .../bitmap.tcl | 0 .../button.tcl | 4 +- .../buttonbox.tcl | 2 +- .../color.tcl | 83 +-- .../combobox.tcl | 10 +- .../demo/basic.tcl | 5 +- .../demo/bwidget.xbm | 0 .../demo/demo.tcl | 3 +- .../demo/dnd.tcl | 0 .../demo/manager.tcl | 18 +- .../demo/select.tcl | 0 .../demo/tmpldlg.tcl | 8 +- .../demo/tree.tcl | 4 +- .../demo/x1.xbm | 0 .../dialog.tcl | 0 .../dragsite.tcl | 0 .../dropsite.tcl | 6 +- .../dynhelp.tcl | 6 +- .../entry.tcl | 6 +- .../{BWidget1.9.16 => BWidget1.10.1}/font.tcl | 3 + .../images/bold.gif | Bin .../images/copy.gif | Bin .../images/cut.gif | Bin .../images/dragfile.gif | Bin .../images/dragicon.gif | Bin .../images/error.gif | Bin .../images/file.gif | Bin .../images/folder.gif | Bin .../images/hourglass.gif | Bin .../images/info.gif | Bin .../images/italic.gif | Bin .../images/minus.xbm | 0 .../images/new.gif | Bin .../images/opcopy.xbm | 0 .../images/open.gif | Bin .../images/openfold.gif | Bin .../images/oplink.xbm | 0 .../images/opmove.xbm | 0 .../images/overstrike.gif | Bin .../images/palette.gif | Bin .../images/passwd.gif | Bin .../images/paste.gif | Bin .../images/plus.xbm | 0 .../images/print.gif | Bin .../images/question.gif | Bin .../images/redo.gif | Bin .../images/save.gif | Bin .../images/target.xbm | 0 .../images/underline.gif | Bin .../images/undo.gif | Bin .../images/warning.gif | Bin .../{BWidget1.9.16 => BWidget1.10.1}/init.tcl | 0 .../label.tcl | 2 +- .../labelentry.tcl | 0 .../labelframe.tcl | 4 +- .../lang/da.rc | 0 .../lang/de.rc | 0 .../lang/en.rc | 0 .../lang/es.rc | 0 .../lang/fr.rc | 0 .../lang/hu.rc | 0 .../lang/nl.rc | 0 .../lang/no.rc | 0 .../lang/pl.rc | 0 .../listbox.tcl | 12 +- .../mainframe.tcl | 0 .../messagedlg.tcl | 0 .../notebook.tcl | 6 +- .../pagesmgr.tcl | 2 +- .../panedw.tcl | 0 .../panelframe.tcl | 492 +++++++++--------- .../passwddlg.tcl | 0 .../pkgIndex.tcl | 6 +- .../progressbar.tcl | 8 +- .../progressdlg.tcl | 0 .../scrollframe.tcl | 0 .../scrollview.tcl | 0 .../scrollw.tcl | 0 .../separator.tcl | 0 .../spinbox.tcl | 2 +- .../statusbar.tcl | 2 +- .../tests/entry.test | 0 .../titleframe.tcl | 0 .../{BWidget1.9.16 => BWidget1.10.1}/tree.tcl | 37 +- .../utils.tcl | 6 +- .../widget.tcl | 0 .../wizard.tcl | 0 .../xpm2image.tcl | 0 .../lib/app-shellspy/shellspy.tcl | 23 +- .../_vfscommon.vfs/modules/punk/args-0.2.1.tm | 108 ++-- .../_vfscommon.vfs/modules/punk/repl-0.1.2.tm | 312 ++++++----- .../modules/shellfilter-0.2.1.tm | 8 + .../_vfscommon.vfs/modules/shellrun-0.1.1.tm | 2 +- src/vfs/_vfscommon.vfs/modules/test/backup.tm | Bin 41364 -> 0 bytes .../modules/test/runalltests.tcl | 99 ++++ .../modules/test/tomlish-1.1.1.tm.x | Bin 46279 -> 0 bytes .../modules/test/tomlish-1.1.5.tm.x | Bin 51527 -> 0 bytes 140 files changed, 808 insertions(+), 538 deletions(-) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/ArrowButton.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/BWidget.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/Button.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/ButtonBox.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/ComboBox.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/Dialog.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/DragSite.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/DropSite.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/DynamicHelp.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/Entry.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/Label.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/LabelEntry.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/LabelFrame.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/ListBox.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/MainFrame.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/MessageDlg.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/NoteBook.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/PagesManager.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/PanedWindow.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/PanelFrame.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/PasswdDlg.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/ProgressBar.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/ProgressDlg.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/ScrollView.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/ScrollableFrame.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/ScrolledWindow.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/SelectColor.html (96%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/SelectFont.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/Separator.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/SpinBox.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/StatusBar.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/TitleFrame.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/Tree.html (98%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/Widget.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/contents.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/index.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/navtree.html (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/BWman/options.htm (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/CHANGES.txt (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/ChangeLog (98%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/LICENSE.txt (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/README.txt (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/arrow.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/bitmap.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/button.tcl (98%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/buttonbox.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/color.tcl (92%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/combobox.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/demo/basic.tcl (98%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/demo/bwidget.xbm (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/demo/demo.tcl (98%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/demo/dnd.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/demo/manager.tcl (91%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/demo/select.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/demo/tmpldlg.tcl (97%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/demo/tree.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/demo/x1.xbm (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/dialog.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/dragsite.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/dropsite.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/dynhelp.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/entry.tcl (98%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/font.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/bold.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/copy.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/cut.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/dragfile.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/dragicon.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/error.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/file.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/folder.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/hourglass.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/info.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/italic.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/minus.xbm (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/new.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/opcopy.xbm (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/open.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/openfold.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/oplink.xbm (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/opmove.xbm (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/overstrike.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/palette.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/passwd.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/paste.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/plus.xbm (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/print.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/question.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/redo.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/save.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/target.xbm (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/underline.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/undo.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/images/warning.gif (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/init.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/label.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/labelentry.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/labelframe.tcl (98%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/lang/da.rc (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/lang/de.rc (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/lang/en.rc (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/lang/es.rc (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/lang/fr.rc (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/lang/hu.rc (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/lang/nl.rc (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/lang/no.rc (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/lang/pl.rc (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/listbox.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/mainframe.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/messagedlg.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/notebook.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/pagesmgr.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/panedw.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/panelframe.tcl (95%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/passwddlg.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/pkgIndex.tcl (96%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/progressbar.tcl (96%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/progressdlg.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/scrollframe.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/scrollview.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/scrollw.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/separator.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/spinbox.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/statusbar.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/tests/entry.test (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/titleframe.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/tree.tcl (98%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/utils.tcl (99%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/widget.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/wizard.tcl (100%) rename src/vfs/_vfscommon.vfs/lib/{BWidget1.9.16 => BWidget1.10.1}/xpm2image.tcl (100%) delete mode 100644 src/vfs/_vfscommon.vfs/modules/test/backup.tm create mode 100644 src/vfs/_vfscommon.vfs/modules/test/runalltests.tcl delete mode 100644 src/vfs/_vfscommon.vfs/modules/test/tomlish-1.1.1.tm.x delete mode 100644 src/vfs/_vfscommon.vfs/modules/test/tomlish-1.1.5.tm.x diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ArrowButton.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ArrowButton.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ArrowButton.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ArrowButton.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/BWidget.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/BWidget.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/BWidget.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/BWidget.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Button.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Button.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Button.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Button.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ButtonBox.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ButtonBox.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ButtonBox.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ButtonBox.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ComboBox.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ComboBox.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ComboBox.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ComboBox.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Dialog.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Dialog.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Dialog.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Dialog.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/DragSite.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/DragSite.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/DragSite.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/DragSite.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/DropSite.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/DropSite.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/DropSite.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/DropSite.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/DynamicHelp.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/DynamicHelp.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/DynamicHelp.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/DynamicHelp.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Entry.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Entry.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Entry.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Entry.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Label.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Label.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Label.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Label.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/LabelEntry.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/LabelEntry.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/LabelEntry.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/LabelEntry.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/LabelFrame.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/LabelFrame.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/LabelFrame.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/LabelFrame.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ListBox.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ListBox.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ListBox.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ListBox.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/MainFrame.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/MainFrame.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/MainFrame.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/MainFrame.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/MessageDlg.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/MessageDlg.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/MessageDlg.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/MessageDlg.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/NoteBook.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/NoteBook.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/NoteBook.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/NoteBook.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/PagesManager.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/PagesManager.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/PagesManager.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/PagesManager.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/PanedWindow.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/PanedWindow.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/PanedWindow.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/PanedWindow.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/PanelFrame.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/PanelFrame.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/PanelFrame.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/PanelFrame.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/PasswdDlg.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/PasswdDlg.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/PasswdDlg.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/PasswdDlg.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ProgressBar.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ProgressBar.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ProgressBar.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ProgressBar.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ProgressDlg.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ProgressDlg.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ProgressDlg.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ProgressDlg.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ScrollView.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ScrollView.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ScrollView.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ScrollView.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ScrollableFrame.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ScrollableFrame.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ScrollableFrame.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ScrollableFrame.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ScrolledWindow.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ScrolledWindow.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/ScrolledWindow.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/ScrolledWindow.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/SelectColor.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/SelectColor.html similarity index 96% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/SelectColor.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/SelectColor.html index e61044d1..87bf7529 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/SelectColor.html +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/SelectColor.html @@ -125,7 +125,7 @@ Title of the Dialog toplevel. -
-type (read-only)
+
-type (only on widget creation)
Specifies the type of the SelectColor widget. Must be dialog or @@ -135,7 +135,8 @@ return an empty string if cancel button is pressed or if dialog is destroyed, and the selected color if ok button is pressed. In all cases, dialog is destroyed.
If type option is popup, SelectColor::create creates a small, popup dialog with a small set of -predefined colors and a button to activate a full color dialog. +predefined colors and a button to activate a full color dialog.
+The widget commands dialog and menu below are synonymes for those operation modes.
diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/SelectFont.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/SelectFont.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/SelectFont.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/SelectFont.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Separator.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Separator.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Separator.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Separator.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/SpinBox.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/SpinBox.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/SpinBox.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/SpinBox.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/StatusBar.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/StatusBar.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/StatusBar.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/StatusBar.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/TitleFrame.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/TitleFrame.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/TitleFrame.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/TitleFrame.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Tree.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Tree.html similarity index 98% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Tree.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Tree.html index 7b547edd..4da88748 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Tree.html +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Tree.html @@ -486,9 +486,14 @@ Specifies the desired width for the tree in units of 8 pixels. NODE NAMES

Certain special characters in node names are automatically substituted -by the tree during operation. These characters are & | ^ !. -They are all substituted with a _ character. This is only to -avoid errors because the characters are special to the tree widget. +by the tree during operation. These characters are & | ^ ! :. +They are internally substituted by non printable characters \1 to \5. +This is only to avoid errors because the characters are special to the tree widget. +In consequence, the characters \1 to \5 are not unique in node names and should be avoided. +

+

Note: until BWidget 1.9.16, a double colon ("::") was substituded by \5 and the +single colon (":") lead to an error. This change is incompatible in the sense, that +the generated node name changed between the versions.

WIDGET COMMAND
diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Widget.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Widget.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/Widget.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/Widget.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/contents.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/contents.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/contents.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/contents.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/index.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/index.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/index.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/index.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/navtree.html b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/navtree.html similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/navtree.html rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/navtree.html diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/options.htm b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/options.htm similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/BWman/options.htm rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/BWman/options.htm diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/CHANGES.txt b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/CHANGES.txt similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/CHANGES.txt rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/CHANGES.txt diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/ChangeLog b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/ChangeLog similarity index 98% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/ChangeLog rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/ChangeLog index 09f8757a..392194a6 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/ChangeLog +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/ChangeLog @@ -1,3 +1,44 @@ +2024-10-27 Harald Oehlmann + + **** BWidget 1.10.1 tagged **** + +2024-10-15 Harald Oehlmann + * Fix Tk9 compatibilty of statusbar.tcl. + Thanks to Paul Obermeier. + Ticket [7eb06c3a3a] + +2024-10-15 Harald Oehlmann + + **** BWidget 1.10.0 tagged **** + +2024-10-14 Harald Oehlmann + * TCL/Tk 9 patch provided by Emiliano. Ticket [b78ac94ee6] + +2023-05-22 Harald Oehlmann + * color.tcl: Bugfix in color chooser. + Displayed color box got gray (instead yellow) after the + following action: manually enter #ff0, click on far right + pannel for intensity. + In addition, add limited support for manual entry of named + colors. + Thanks to Steve from https://sourceforge.net/projects/scidvspc/ + for bug report and contribution. Ticket [4f9a4205f0] + +2023-05-22 Harald Oehlmann + TCL9.0/Tk8.7 compatibility issues found by Paul Obermeier. + https://wiki.tcl-lang.org/page/Porting+extensions+to+Tcl+9 + * dropsite.tcl: Replaced "$tcl_platform" with "$::tcl_platform" + in namespaces. + * widget.tcl: Replaced "package require Tcl 8.1.1" with + "package require Tcl 8.1.1-". + Ticket [1bee17b353] + +2023-05-22 Harald Oehlmann + tree.tcl: Bug: node names with leading colons gave error. + The node name solution was changed, that ":" is now + substituded by "\5", and not "::". Ticket [d075175ade]. + Thanks to Rolf Ade for the ticket. + 2022-12-25 Harald Oehlmann **** BWidget 1.9.16 tagged **** diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/LICENSE.txt b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/LICENSE.txt similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/LICENSE.txt rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/LICENSE.txt diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/README.txt b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/README.txt similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/README.txt rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/README.txt diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/arrow.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/arrow.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/arrow.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/arrow.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/bitmap.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/bitmap.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/bitmap.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/bitmap.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/button.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/button.tcl similarity index 98% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/button.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/button.tcl index cb365cf8..d6591dde 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/button.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/button.tcl @@ -20,6 +20,8 @@ namespace eval Button { Widget::define Button button DynamicHelp + # Using namespace variable without variable may set global variables + # Fixed in TCL 9, so no correction here set remove [list -command -relief -text -textvariable -underline -state] if {[info tclversion] > 8.3} { lappend remove -repeatdelay -repeatinterval @@ -129,7 +131,7 @@ proc Button::create { path args } { # ---------------------------------------------------------------------------- proc Button::configure { path args } { set oldunder [$path:cmd cget -underline] - if { $oldunder != -1 } { + if { $oldunder > -1 } { set oldaccel1 [string tolower [string index [$path:cmd cget -text] $oldunder]] set oldaccel2 [string toupper $oldaccel1] } else { diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/buttonbox.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/buttonbox.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/buttonbox.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/buttonbox.tcl index 9fefc2a3..b5f36a0e 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/buttonbox.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/buttonbox.tcl @@ -415,5 +415,5 @@ proc ButtonBox::_destroy { path } { variable $path upvar 0 $path data Widget::destroy $path - unset data + unset -nocomplain data } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/color.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/color.tcl similarity index 92% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/color.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/color.tcl index bb6dcb60..5489acbd 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/color.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/color.tcl @@ -23,6 +23,8 @@ namespace eval SelectColor { \#ffffff \#ffffff \#ffffff \#ffffff \#ffffff } + # Namespace variables overwrite global variables in TCL8 + # Not changed here, as fixed in TCL9 if {[string equal $::tcl_platform(platform) "unix"]} { set useTkDialogue 0 } else { @@ -418,7 +420,7 @@ proc SelectColor::dialog {path args} { # (2) ::SelectColor::_entryColor is modified (except by the user typing in # the entry widget) - trace add variable ::SelectColor::_unsavedSelection write ::SelectColor::_SetEntryValue + trace add variable _unsavedSelection write ::SelectColor::_SetEntryValue $top add -text [lindex [BWidget::getname ok] 0] $top add -text [lindex [BWidget::getname cancel] 0] @@ -436,7 +438,7 @@ proc SelectColor::dialog {path args} { set color "" } - trace remove variable ::SelectColor::_unsavedSelection write ::SelectColor::_SetEntryValue + trace remove variable _unsavedSelection write ::SelectColor::_SetEntryValue destroy $top return $color @@ -502,7 +504,7 @@ proc SelectColor::_select_rgb {count} { # Display selected color in entry widget (via trace on # ::SelectColor::_unsavedSelection), and notify caller. - set ::SelectColor::_unsavedSelection $bg + set _unsavedSelection $bg _userCommand $bg } } @@ -520,7 +522,7 @@ proc SelectColor::_set_rgb {rgb} { # Display selected color in entry widget (via trace on # ::SelectColor::_unsavedSelection), and notify caller. - set ::SelectColor::_unsavedSelection $rgb + set _unsavedSelection $rgb _userCommand $rgb set user [expr {$_selection-[llength $_baseColors]}] if {$user >= 0} { @@ -808,7 +810,10 @@ proc SelectColor::_SetEntryValue {argVarName var2 op} { variable _entryColor variable _unsavedSelection - if {[string equal $argVarName ::SelectColor::_unsavedSelection] && + # get the full qualified name + set fqname [uplevel 1 [list namespace which -variable $argVarName]] + + if {[string equal $fqname ::SelectColor::_unsavedSelection] && [string equal $var2 {}] && [string equal $op "write"]} { # OK } else { @@ -817,10 +822,10 @@ proc SelectColor::_SetEntryValue {argVarName var2 op} { \"$argVarName\", \"$var2\", \"$op\"" } - set col24bit [::SelectColor::_24BitRgb [set $argVarName]] + set col24bit [_24BitRgb [set $fqname]] if {[_ValidateColorEntry forced $col24bit]} { - set ::SelectColor::_entryColor $col24bit + set _entryColor $col24bit } else { # Value is invalid, and if written to _entryColor this would disable # validation. @@ -871,31 +876,46 @@ proc SelectColor::_ValidateColorEntry {percentV percentP} { variable _unsavedSelection set result [regexp -- {^#[0-9a-fA-F]*$} $percentP] - set lenny [string length $percentP] - if {$result} { - if {[string equal $percentV "forced"]} { - # Validation only. Don't want a loop. - } elseif {[string equal $percentV "key"]} { - # Copy to GUI if a valid color. - if {($lenny - 1) % 3 || $lenny == 1} { - # Not a valid color, which needs 3n+1 characters, n > 0 - } else { - after idle [list SelectColor::_SetWithoutTrace $percentP] - } - } elseif {[string equal $percentV "focusout"]} { - # If the color is valid it will already have been copied to the GUI - # and to _userCommand by the "key" validation above. - # - # The code below only needs to reset the value in the entry widget. - # Remove an invalid value, convert a valid one to 24-bit. - # Ignore $percentP, just fire the trace on _unsavedSelection. - set color $_unsavedSelection - after idle [list set ::SelectColor::_unsavedSelection $color] + # Check for a valid rgb color, which needs 3n+1 characters, n > 0 + set lenny [string length $percentP] + set entryincomplete [expr {($lenny - 1) % 3 || $lenny == 1}] + } else { + # Check for named colors + set result [regexp -- {^[a-zA-Z0-9 ]*$} $percentP] + # We do not accept the key stroke + if {!$result} { + return 0 + } + # Check for complete named color + set entryincomplete [catch {winfo rgb . $percentP} rgblist] + if {!$entryincomplete} { + set red [expr {[lindex $rgblist 0]/0x100}] + set green [expr {[lindex $rgblist 1]/0x100}] + set blue [expr {[lindex $rgblist 2]/0x100}] + set percentP [format "#%02X%02X%02X" $red $green $blue] } } - return $result + if {[string equal $percentV "forced"]} { + # Validation only. Don't want a loop. + } elseif {[string equal $percentV "key"]} { + # Copy to GUI if a valid color. + if {!$entryincomplete} { + after idle [list SelectColor::_SetWithoutTrace $percentP] + } + } elseif {[string equal $percentV "focusout"]} { + # If the color is valid it will already have been copied to the GUI + # and to _userCommand by the "key" validation above. + # + # The code below only needs to reset the value in the entry widget. + # Remove an invalid value, convert a valid one to 24-bit. + # Ignore $percentP, just fire the trace on _unsavedSelection. + set color $_unsavedSelection + after idle [list set SelectColor::_unsavedSelection $color] + } + + return 1 } @@ -908,11 +928,14 @@ proc SelectColor::_ValidateColorEntry {percentV percentP} { # ------------------------------------------------------------------------------ proc SelectColor::_SetWithoutTrace {value} { - trace remove variable ::SelectColor::_unsavedSelection write ::SelectColor::_SetEntryValue + variable _hsv + variable _unsavedSelection + + trace remove variable _unsavedSelection write ::SelectColor::_SetEntryValue _set_rgb $value set _hsv [eval rgbToHsv [winfo rgb . $value]] _set_hue_sat [lindex $_hsv 0] [lindex $_hsv 1] _set_value [lindex $_hsv 2] - trace add variable ::SelectColor::_unsavedSelection write ::SelectColor::_SetEntryValue + trace add variable _unsavedSelection write ::SelectColor::_SetEntryValue return } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/combobox.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/combobox.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/combobox.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/combobox.tcl index d754e060..88a47a3b 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/combobox.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/combobox.tcl @@ -19,7 +19,7 @@ # ---------------------------------------------------------------------------- # ComboBox uses the 8.3 -listvariable listbox option -package require Tk 8.3 +package require Tk 8.3 9 namespace eval ComboBox { Widget::define ComboBox combobox ArrowButton Entry ListBox @@ -171,7 +171,7 @@ proc ComboBox::create { path args } { Widget::configure $path [list -bwlistbox $bw] } - set ComboBox::_index($path) -1 + set ::ComboBox::_index($path) -1 return [Widget::create ComboBox $path] } @@ -515,7 +515,7 @@ proc ComboBox::_create_popup { path } { wm withdraw $shell wm overrideredirect $shell 1 # these commands cause the combobox to behave strangely on OS X - if {! $Widget::_aqua } { + if {! $::Widget::_aqua } { update idle wm transient $shell [winfo toplevel $path] catch { wm attributes $shell -topmost 1 } @@ -703,7 +703,7 @@ proc ComboBox::_mapliste { path } { wm deiconify $path.shell raise $path.shell BWidget::focus set $listb - if {! $Widget::_aqua } { + if {! $::Widget::_aqua } { BWidget::grab global $path } } @@ -717,7 +717,7 @@ proc ComboBox::_unmapliste { path {refocus 1} } { if {[winfo exists $path.shell] && \ ( [string equal [wm state $path.shell] "normal"] || [string equal [wm state $path.shell] "zoomed"] ) } { - if {! $Widget::_aqua } { + if {! $::Widget::_aqua } { BWidget::grab release $path BWidget::focus release $path.shell.listb $refocus # Update now because otherwise [focus -force...] makes the app hang! diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/basic.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/basic.tcl similarity index 98% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/basic.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/basic.tcl index cbda19d2..02564d27 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/basic.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/basic.tcl @@ -184,14 +184,15 @@ proc DemoBasic::_barmcmd { value but arr1 arr2 } { proc DemoBasic::_butcmd { reason } { variable count variable id + variable var catch {after cancel $id} if { $reason == "arm" } { incr count - set DemoBasic::var(butcmd) "$reason command called ($count)" + set var(butcmd) "$reason command called ($count)" } else { set count 0 - set DemoBasic::var(butcmd) "$reason command called" + set var(butcmd) "$reason command called" } set id [after 500 {set DemoBasic::var(butcmd) ""}] } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/bwidget.xbm b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/bwidget.xbm similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/bwidget.xbm rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/bwidget.xbm diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/demo.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/demo.tcl similarity index 98% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/demo.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/demo.tcl index c242c662..a6e708ad 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/demo.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/demo.tcl @@ -1,6 +1,7 @@ #!/bin/sh # The next line is executed by /bin/sh, but not tcl \ exec wish "$0" ${1+"$@"} +package require Tk namespace eval Demo { variable _wfont @@ -123,7 +124,7 @@ proc Demo::create { } { set font [$_wfont cget -font] pack $_wfont -side left -anchor w - $mainframe addindicator -text "BWidget [package version BWidget]" + $mainframe addindicator -text "BWidget [package provide BWidget]" $mainframe addindicator -textvariable tk_patchLevel # NoteBook creation diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/dnd.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/dnd.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/dnd.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/dnd.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/manager.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/manager.tcl similarity index 91% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/manager.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/manager.tcl index ffddcc3c..2beac26d 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/manager.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/manager.tcl @@ -106,15 +106,15 @@ proc DemoManager::_show_progress { } { variable _status if { $_progress } { - set Demo::status "Compute in progress..." - set Demo::prgindic 0 - $Demo::mainframe showstatusbar progression + set ::Demo::status "Compute in progress..." + set ::Demo::prgindic 0 + $::Demo::mainframe showstatusbar progression if { $_afterid == "" } { set _afterid [after 30 DemoManager::_update_progress] } } else { - set Demo::status "" - $Demo::mainframe showstatusbar status + set ::Demo::status "" + $::Demo::mainframe showstatusbar status set _afterid "" } } @@ -125,13 +125,13 @@ proc DemoManager::_update_progress { } { variable _afterid if { $_progress } { - if { $Demo::prgindic < 100 } { - incr Demo::prgindic 5 + if { $::Demo::prgindic < 100 } { + incr ::Demo::prgindic 5 set _afterid [after 30 DemoManager::_update_progress] } else { set _progress 0 - $Demo::mainframe showstatusbar status - set Demo::status "Done" + $::Demo::mainframe showstatusbar status + set ::Demo::status "Done" set _afterid "" after 500 {set Demo::status ""} } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/select.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/select.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/select.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/select.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/tmpldlg.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/tmpldlg.tcl similarity index 97% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/tmpldlg.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/tmpldlg.tcl index fa005841..203543e0 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/tmpldlg.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/tmpldlg.tcl @@ -180,7 +180,7 @@ proc DemoDlg::_show_msgdlg { } { proc DemoDlg::_show_fontdlg { } { - set font [SelectFont .fontdlg -parent . -font $Demo::font] + set font [SelectFont .fontdlg -parent . -font $::Demo::font] if { $font != "" } { Demo::update_font $font } @@ -188,8 +188,8 @@ proc DemoDlg::_show_fontdlg { } { proc DemoDlg::_show_progdlg { } { - set DemoDlg::progmsg "Compute in progress..." - set DemoDlg::progval 0 + set ::DemoDlg::progmsg "Compute in progress..." + set ::DemoDlg::progval 0 ProgressDlg .progress -parent . -title "Wait..." \ -type infinite \ @@ -204,7 +204,7 @@ proc DemoDlg::_show_progdlg { } { proc DemoDlg::_update_progdlg { } { if { [winfo exists .progress] } { - set DemoDlg::progval 2 + set ::DemoDlg::progval 2 after 20 DemoDlg::_update_progdlg } } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/tree.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/tree.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/tree.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/tree.tcl index 97d8d975..3ec036d2 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/tree.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/tree.tcl @@ -84,12 +84,12 @@ proc DemoTree::create { nb } { proc DemoTree::init { tree list args } { - global tcl_platform + global tcl_platform env variable count set count 0 if { $tcl_platform(platform) == "unix" } { - set rootdir [glob "~"] + set rootdir [glob $env(HOME)] } else { set rootdir "c:\\" } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/x1.xbm b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/x1.xbm similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/demo/x1.xbm rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/demo/x1.xbm diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dialog.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dialog.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dialog.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dialog.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dragsite.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dragsite.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dragsite.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dragsite.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dropsite.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dropsite.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dropsite.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dropsite.tcl index 8d4fbf32..39652b13 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dropsite.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dropsite.tcl @@ -55,7 +55,7 @@ namespace eval DropSite { ops,link 1 } - if { $tcl_platform(platform) == "unix" } { + if { $::tcl_platform(platform) == "unix" } { set _tabops(mod,alt) 8 } else { set _tabops(mod,alt) 16 @@ -73,7 +73,7 @@ namespace eval DropSite { bind DragTop {DropSite::_update_operation [expr %s | 1]} bind DragTop {DropSite::_update_operation [expr %s | 4]} bind DragTop {DropSite::_update_operation [expr %s | 4]} - if { $tcl_platform(platform) == "unix" } { + if { $::tcl_platform(platform) == "unix" } { bind DragTop {DropSite::_update_operation [expr %s | 8]} bind DragTop {DropSite::_update_operation [expr %s | 8]} } else { @@ -85,7 +85,7 @@ namespace eval DropSite { bind DragTop {DropSite::_update_operation [expr %s & ~1]} bind DragTop {DropSite::_update_operation [expr %s & ~4]} bind DragTop {DropSite::_update_operation [expr %s & ~4]} - if { $tcl_platform(platform) == "unix" } { + if { $::tcl_platform(platform) == "unix" } { bind DragTop {DropSite::_update_operation [expr %s & ~8]} bind DragTop {DropSite::_update_operation [expr %s & ~8]} } else { diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dynhelp.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dynhelp.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dynhelp.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dynhelp.tcl index d7146b66..f1bc68b3 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/dynhelp.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/dynhelp.tcl @@ -19,9 +19,11 @@ namespace eval DynamicHelp { Widget::define DynamicHelp dynhelp -classonly + # Namespace variables overwrite global variables in TCL8 + # Not changed here, as fixed in TCL9 if {$::tcl_version >= 8.5} { set fontdefault TkTooltipFont - } elseif {$Widget::_aqua} { + } elseif {$::Widget::_aqua} { set fontdefault {helvetica 11} } else { set fontdefault {helvetica 8} @@ -670,7 +672,7 @@ proc DynamicHelp::_show_help { path w x y } { -screen [winfo screen $w] wm withdraw $_top - if { $Widget::_aqua } { + if { $::Widget::_aqua } { ::tk::unsupported::MacWindowStyle style $_top help none } else { wm overrideredirect $_top 1 diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/entry.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/entry.tcl similarity index 98% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/entry.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/entry.tcl index c874d191..8b133ea8 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/entry.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/entry.tcl @@ -31,6 +31,8 @@ namespace eval Entry { -disabledforeground -disabledbackground } } + # Namespace variables overwrite global variables in TCL8 + # Not changed here, as fixed in TCL9 set declare [list \ [list -state Enum normal 0 [list normal disabled]] \ [list -text String "" 0] \ @@ -72,6 +74,8 @@ namespace eval Entry { COLOR {move {}} } + # Namespace variables overwrite global variables in TCL8 + # Not changed here, as fixed in TCL9 if {[Widget::theme]} { foreach event [bind TEntry] { bind BwEntry $event [bind TEntry $event] @@ -179,7 +183,7 @@ proc Entry::create { path args } { proc Entry::configure { path args } { # Cheat by setting the -text value to the current contents of the entry # This might be better hidden behind a function in ::Widget. - set Widget::Entry::${path}:opt(-text) [$path:cmd get] + set ::Widget::Entry::${path}:opt(-text) [$path:cmd get] set res [Widget::configure $path $args] diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/font.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/font.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/font.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/font.tcl index 97c3c5de..b61a258b 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/font.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/font.tcl @@ -42,6 +42,9 @@ namespace eval SelectFont { # Set up preset lists of fonts, so the user can avoid the painfully slow # loadfont process if desired. + + # Namespace variables overwrite global variables in TCL8 + # Not changed here, as fixed in TCL9 if { [string equal $::tcl_platform(platform) "windows"] } { set presetVariable [list \ 7x14 \ diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/bold.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/bold.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/bold.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/bold.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/copy.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/copy.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/copy.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/copy.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/cut.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/cut.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/cut.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/cut.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/dragfile.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/dragfile.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/dragfile.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/dragfile.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/dragicon.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/dragicon.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/dragicon.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/dragicon.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/error.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/error.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/error.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/error.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/file.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/file.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/file.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/file.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/folder.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/folder.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/folder.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/folder.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/hourglass.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/hourglass.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/hourglass.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/hourglass.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/info.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/info.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/info.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/info.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/italic.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/italic.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/italic.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/italic.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/minus.xbm b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/minus.xbm similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/minus.xbm rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/minus.xbm diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/new.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/new.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/new.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/new.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/opcopy.xbm b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/opcopy.xbm similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/opcopy.xbm rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/opcopy.xbm diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/open.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/open.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/open.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/open.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/openfold.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/openfold.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/openfold.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/openfold.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/oplink.xbm b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/oplink.xbm similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/oplink.xbm rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/oplink.xbm diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/opmove.xbm b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/opmove.xbm similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/opmove.xbm rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/opmove.xbm diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/overstrike.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/overstrike.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/overstrike.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/overstrike.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/palette.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/palette.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/palette.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/palette.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/passwd.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/passwd.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/passwd.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/passwd.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/paste.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/paste.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/paste.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/paste.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/plus.xbm b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/plus.xbm similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/plus.xbm rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/plus.xbm diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/print.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/print.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/print.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/print.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/question.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/question.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/question.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/question.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/redo.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/redo.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/redo.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/redo.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/save.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/save.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/save.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/save.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/target.xbm b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/target.xbm similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/target.xbm rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/target.xbm diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/underline.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/underline.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/underline.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/underline.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/undo.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/undo.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/undo.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/undo.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/warning.gif b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/warning.gif similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/images/warning.gif rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/images/warning.gif diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/init.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/init.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/init.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/init.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/label.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/label.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/label.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/label.tcl index cf5fc0cb..f4407430 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/label.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/label.tcl @@ -124,7 +124,7 @@ proc Label::create { path args } { # ------------------------------------------------------------------------------ proc Label::configure { path args } { set oldunder [$path.l cget -underline] - if { $oldunder != -1 } { + if { $oldunder > -1 } { set oldaccel [string tolower [string index [$path.l cget -text] $oldunder]] } else { set oldaccel "" diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/labelentry.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/labelentry.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/labelentry.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/labelentry.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/labelframe.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/labelframe.tcl similarity index 98% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/labelframe.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/labelframe.tcl index 3c816233..4c524748 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/labelframe.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/labelframe.tcl @@ -114,10 +114,10 @@ proc LabelFrame::align { args } { set wlist {} foreach wl $args { foreach w $wl { - if { ![info exists Widget::_class($w)] } { + if { ![info exists ::Widget::_class($w)] } { continue } - set class $Widget::_class($w) + set class $::Widget::_class($w) if { [string equal $class "LabelFrame"] } { set textopt -text set widthopt -width diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/da.rc b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/da.rc similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/da.rc rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/da.rc diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/de.rc b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/de.rc similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/de.rc rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/de.rc diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/en.rc b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/en.rc similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/en.rc rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/en.rc diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/es.rc b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/es.rc similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/es.rc rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/es.rc diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/fr.rc b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/fr.rc similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/fr.rc rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/fr.rc diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/hu.rc b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/hu.rc similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/hu.rc rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/hu.rc diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/nl.rc b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/nl.rc similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/nl.rc rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/nl.rc diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/no.rc b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/no.rc similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/no.rc rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/no.rc diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/pl.rc b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/pl.rc similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/lang/pl.rc rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/lang/pl.rc diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/listbox.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/listbox.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/listbox.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/listbox.tcl index ff63ba30..fc8ac1e4 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/listbox.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/listbox.tcl @@ -802,11 +802,12 @@ proc ListBox::edit { path item text {verifycmd ""} {clickres 0} {select 1}} { -selectforeground [Widget::getoption $path -selectforeground] \ -selectbackground $sbg \ -font [_getoption $path $item -font] \ - -textvariable ListBox::_edit(text)] + -textvariable ::ListBox::_edit(text)] pack $ent -ipadx 8 -anchor w set idw [$path.c create window $x $y -window $frame -anchor w] - trace variable ListBox::_edit(text) w [list ListBox::_update_edit_size $path $ent $idw $wmax] + trace add variable _edit(text) write \ + [list ::ListBox::_update_edit_size $path $ent $idw $wmax] tkwait visibility $ent grab $frame BWidget::focus set $ent @@ -833,7 +834,8 @@ proc ListBox::edit { path item text {verifycmd ""} {clickres 0} {select 1}} { set ok 1 } } - trace vdelete ListBox::_edit(text) w [list ListBox::_update_edit_size $path $ent $idw $wmax] + trace remove variable _edit(text) write \ + [list ListBox::_update_edit_size $path $ent $idw $wmax] grab release $frame BWidget::focus release $ent destroy $frame @@ -909,6 +911,10 @@ proc ListBox::_destroy { path } { variable $path upvar 0 $path data + if { ![info exists data] && [string match ".#BWidget.#Class*" $path] } { + # this is a proxy win to query xrdb + return + } if { $data(upd,afterid) != "" } { after cancel $data(upd,afterid) } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/mainframe.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/mainframe.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/mainframe.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/mainframe.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/messagedlg.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/messagedlg.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/messagedlg.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/messagedlg.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/notebook.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/notebook.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/notebook.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/notebook.tcl index fec3f297..9ac7a6ef 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/notebook.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/notebook.tcl @@ -461,11 +461,15 @@ proc NoteBook::_destroy { path } { variable $path upvar 0 $path data + if { ![info exists data] && [string match ".#BWidget.#Class*" $path] } { + # this is a proxy win to query xrdb + return + } foreach page $data(pages) { Widget::destroy $path.f$page } Widget::destroy $path - unset data + unset -nocomplain data } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/pagesmgr.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/pagesmgr.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/pagesmgr.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/pagesmgr.tcl index 5d328b58..58e0e13f 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/pagesmgr.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/pagesmgr.tcl @@ -20,7 +20,7 @@ # - PagesManager::_draw_area # - PagesManager::_realize # ------------------------------------------------------------------------------ -package require Tcl 8.1.1 +package require Tcl 8.1.1 9 namespace eval PagesManager { Widget::define PagesManager pagesmgr diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/panedw.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/panedw.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/panedw.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/panedw.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/panelframe.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/panelframe.tcl similarity index 95% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/panelframe.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/panelframe.tcl index fb8bc193..e9f93487 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/panelframe.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/panelframe.tcl @@ -1,246 +1,246 @@ -# ---------------------------------------------------------------------------- -# panelframe.tcl -# Create PanelFrame widgets. -# A PanelFrame is a boxed frame that allows you to place items -# in the label area (liked combined frame+toolbar). It uses the -# highlight colors the default frame color. -# $Id: panelframe.tcl,v 1.1 2004/09/09 22:17:51 hobbs Exp $ -# ---------------------------------------------------------------------------- -# Index of commands: -# - PanelFrame::create -# - PanelFrame::configure -# - PanelFrame::cget -# - PanelFrame::getframe -# - PanelFrame::add -# - PanelFrame::remove -# - PanelFrame::items -# ---------------------------------------------------------------------------- - -namespace eval PanelFrame { - Widget::define PanelFrame panelframe - - Widget::declare PanelFrame { - {-background TkResource "" 0 frame} - {-borderwidth TkResource 1 0 frame} - {-relief TkResource flat 0 frame} - {-panelbackground TkResource "" 0 {entry -selectbackground}} - {-panelforeground TkResource "" 0 {entry -selectforeground}} - {-width Int 0 0} - {-height Int 0 0} - {-font TkResource "" 0 label} - {-text String "" 0} - {-textvariable String "" 0} - {-ipad String 1 0} - {-bg Synonym -background} - {-bd Synonym -borderwidth} - } - # Should we have automatic state handling? - #{-state TkResource "" 0 label} - - Widget::addmap PanelFrame "" :cmd { - -panelbackground -background - -width {} -height {} -borderwidth {} -relief {} - } - Widget::addmap PanelFrame "" .title { - -panelbackground -background - } - Widget::addmap PanelFrame "" .title.text { - -panelbackground -background - -panelforeground -foreground - -text {} -textvariable {} -font {} - } - Widget::addmap PanelFrame "" .frame { - -background {} - } - - if {0} { - # This would be code to have an automated close button - #{-closebutton Boolean 0 0} - Widget::addmap PanelFrame "" .title.close { - -panelbackground -background - -panelforeground -foreground - } - variable HaveMarlett \ - [expr {[lsearch -exact [font families] "Marlett"] != -1}] - - variable imgdata { - #define close_width 16 - #define close_height 16 - static char close_bits[] = { - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x08, - 0x38, 0x1c, 0x70, 0x0e, - 0xe0, 0x07, 0xc0, 0x03, - 0xc0, 0x03, 0xe0, 0x07, - 0x70, 0x0e, 0x38, 0x1c, - 0x10, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00}; - } - # We use the same -foreground as the default -panelbackground - image create bitmap ::PanelFrame::X -data $imgdata \ - -foreground [lindex $Widget::PanelFrame::opt(-panelbackground) 1] - } - - bind PanelFrame [list Widget::destroy %W] -} - - -# ---------------------------------------------------------------------------- -# Command PanelFrame::create -# ---------------------------------------------------------------------------- -proc PanelFrame::create { path args } { - variable HaveMarlett - - Widget::init PanelFrame $path $args - - set lblopts [list -bd 0 -highlightthickness 0] - set outer [eval [list frame $path -class PanelFrame] \ - [Widget::subcget $path :cmd]] - set title [eval [list frame $path.title] \ - [Widget::subcget $path .title]] - set tlbl [eval [list label $path.title.text] $lblopts -anchor w \ - [Widget::subcget $path .title.text]] - set inner [eval [list frame $path.frame] \ - [Widget::subcget $path .frame]] - - foreach {ipadx ipady} [_padval [Widget::cget $path -ipad]] { break } - - if {0} { - set btnopts [list -padx 0 -pady 0 -relief flat -overrelief raised \ - -bd 1 -highlightthickness 0] - set clbl [eval [list button $path.title.close] $btnopts \ - [Widget::subcget $path .title.close]] - set close [Widget::cget $path -closebutton] - if {$HaveMarlett} { - $clbl configure -font "Marlett -14" -text \u0072 - } else { - $clbl configure -image ::PanelFrame::X - } - if {$close} { - pack $path.title.close -side right -padx $ipadx -pady $ipady - } - } - - grid $path.title -row 0 -column 0 -sticky ew - grid $path.frame -row 1 -column 0 -sticky news - grid columnconfigure $path 0 -weight 1 - grid rowconfigure $path 1 -weight 1 - - pack $path.title.text -side left -fill x -anchor w \ - -padx $ipadx -pady $ipady - - return [Widget::create PanelFrame $path] -} - - -# ---------------------------------------------------------------------------- -# Command PanelFrame::configure -# ---------------------------------------------------------------------------- -proc PanelFrame::configure { path args } { - set res [Widget::configure $path $args] - - if {[Widget::hasChanged $path -ipad ipad]} { - } - - return $res -} - - -# ---------------------------------------------------------------------------- -# Command PanelFrame::cget -# ---------------------------------------------------------------------------- -proc PanelFrame::cget { path option } { - return [Widget::cget $path $option] -} - -# ---------------------------------------------------------------------------- -# Command PanelFrame::getframe -# ---------------------------------------------------------------------------- -proc PanelFrame::getframe { path } { - return $path.frame -} - -# ------------------------------------------------------------------------ -# Command PanelFrame::add -# ------------------------------------------------------------------------ -proc PanelFrame::add {path w args} { - variable _widget - - array set opts [list \ - -side right \ - -fill none \ - -expand 0 \ - -pad [Widget::cget $path -ipad] \ - ] - foreach {key val} $args { - if {[info exists opts($key)]} { - set opts($key) $val - } else { - set msg "unknown option \"$key\", must be one of: " - append msg [join [lsort [array names opts]] {, }] - return -code error $msg - } - } - foreach {ipadx ipady} [_padval $opts(-pad)] { break } - - set f $path.title - - lappend _widget($path,items) $w - pack $w -in $f -padx $ipadx -pady $ipady -side $opts(-side) \ - -fill $opts(-fill) -expand $opts(-expand) - - return $w -} - -# ------------------------------------------------------------------------ -# Command PanelFrame::remove -# ------------------------------------------------------------------------ -proc PanelFrame::remove {path args} { - variable _widget - - set destroy [string equal [lindex $args 0] "-destroy"] - if {$destroy} { - set args [lrange $args 1 end] - } - foreach w $args { - set idx [lsearch -exact $_widget($path,items) $w] - if {$idx == -1} { - # ignore unknown - continue - } - if {$destroy} { - destroy $w - } elseif {[winfo exists $w]} { - pack forget $w - } - set _widget($path,items) [lreplace $_widget($path,items) $idx $idx] - } -} - -# ------------------------------------------------------------------------ -# Command PanelFrame::delete -# ------------------------------------------------------------------------ -proc PanelFrame::delete {path args} { - return [PanelFrame::remove $path -destroy $args] -} - -# ------------------------------------------------------------------------ -# Command PanelFrame::items -# ------------------------------------------------------------------------ -proc PanelFrame::items {path} { - variable _widget - return $_widget($path,items) -} - -proc PanelFrame::_padval {padval} { - set len [llength $padval] - foreach {a b} $padval { break } - if {$len == 0 || $len > 2} { - return -code error \ - "invalid pad value \"$padval\", must be 1 or 2 pixel values" - } elseif {$len == 1} { - return [list $a $a] - } elseif {$len == 2} { - return $padval - } -} +# ---------------------------------------------------------------------------- +# panelframe.tcl +# Create PanelFrame widgets. +# A PanelFrame is a boxed frame that allows you to place items +# in the label area (liked combined frame+toolbar). It uses the +# highlight colors the default frame color. +# $Id: panelframe.tcl,v 1.1 2004/09/09 22:17:51 hobbs Exp $ +# ---------------------------------------------------------------------------- +# Index of commands: +# - PanelFrame::create +# - PanelFrame::configure +# - PanelFrame::cget +# - PanelFrame::getframe +# - PanelFrame::add +# - PanelFrame::remove +# - PanelFrame::items +# ---------------------------------------------------------------------------- + +namespace eval PanelFrame { + Widget::define PanelFrame panelframe + + Widget::declare PanelFrame { + {-background TkResource "" 0 frame} + {-borderwidth TkResource 1 0 frame} + {-relief TkResource flat 0 frame} + {-panelbackground TkResource "" 0 {entry -selectbackground}} + {-panelforeground TkResource "" 0 {entry -selectforeground}} + {-width Int 0 0} + {-height Int 0 0} + {-font TkResource "" 0 label} + {-text String "" 0} + {-textvariable String "" 0} + {-ipad String 1 0} + {-bg Synonym -background} + {-bd Synonym -borderwidth} + } + # Should we have automatic state handling? + #{-state TkResource "" 0 label} + + Widget::addmap PanelFrame "" :cmd { + -panelbackground -background + -width {} -height {} -borderwidth {} -relief {} + } + Widget::addmap PanelFrame "" .title { + -panelbackground -background + } + Widget::addmap PanelFrame "" .title.text { + -panelbackground -background + -panelforeground -foreground + -text {} -textvariable {} -font {} + } + Widget::addmap PanelFrame "" .frame { + -background {} + } + + if {0} { + # This would be code to have an automated close button + #{-closebutton Boolean 0 0} + Widget::addmap PanelFrame "" .title.close { + -panelbackground -background + -panelforeground -foreground + } + variable HaveMarlett \ + [expr {[lsearch -exact [font families] "Marlett"] != -1}] + + variable imgdata { + #define close_width 16 + #define close_height 16 + static char close_bits[] = { + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x08, + 0x38, 0x1c, 0x70, 0x0e, + 0xe0, 0x07, 0xc0, 0x03, + 0xc0, 0x03, 0xe0, 0x07, + 0x70, 0x0e, 0x38, 0x1c, + 0x10, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00}; + } + # We use the same -foreground as the default -panelbackground + image create bitmap ::PanelFrame::X -data $imgdata \ + -foreground [lindex $::Widget::PanelFrame::opt(-panelbackground) 1] + } + + bind PanelFrame [list Widget::destroy %W] +} + + +# ---------------------------------------------------------------------------- +# Command PanelFrame::create +# ---------------------------------------------------------------------------- +proc PanelFrame::create { path args } { + variable HaveMarlett + + Widget::init PanelFrame $path $args + + set lblopts [list -bd 0 -highlightthickness 0] + set outer [eval [list frame $path -class PanelFrame] \ + [Widget::subcget $path :cmd]] + set title [eval [list frame $path.title] \ + [Widget::subcget $path .title]] + set tlbl [eval [list label $path.title.text] $lblopts -anchor w \ + [Widget::subcget $path .title.text]] + set inner [eval [list frame $path.frame] \ + [Widget::subcget $path .frame]] + + foreach {ipadx ipady} [_padval [Widget::cget $path -ipad]] { break } + + if {0} { + set btnopts [list -padx 0 -pady 0 -relief flat -overrelief raised \ + -bd 1 -highlightthickness 0] + set clbl [eval [list button $path.title.close] $btnopts \ + [Widget::subcget $path .title.close]] + set close [Widget::cget $path -closebutton] + if {$HaveMarlett} { + $clbl configure -font "Marlett -14" -text \u0072 + } else { + $clbl configure -image ::PanelFrame::X + } + if {$close} { + pack $path.title.close -side right -padx $ipadx -pady $ipady + } + } + + grid $path.title -row 0 -column 0 -sticky ew + grid $path.frame -row 1 -column 0 -sticky news + grid columnconfigure $path 0 -weight 1 + grid rowconfigure $path 1 -weight 1 + + pack $path.title.text -side left -fill x -anchor w \ + -padx $ipadx -pady $ipady + + return [Widget::create PanelFrame $path] +} + + +# ---------------------------------------------------------------------------- +# Command PanelFrame::configure +# ---------------------------------------------------------------------------- +proc PanelFrame::configure { path args } { + set res [Widget::configure $path $args] + + if {[Widget::hasChanged $path -ipad ipad]} { + } + + return $res +} + + +# ---------------------------------------------------------------------------- +# Command PanelFrame::cget +# ---------------------------------------------------------------------------- +proc PanelFrame::cget { path option } { + return [Widget::cget $path $option] +} + +# ---------------------------------------------------------------------------- +# Command PanelFrame::getframe +# ---------------------------------------------------------------------------- +proc PanelFrame::getframe { path } { + return $path.frame +} + +# ------------------------------------------------------------------------ +# Command PanelFrame::add +# ------------------------------------------------------------------------ +proc PanelFrame::add {path w args} { + variable _widget + + array set opts [list \ + -side right \ + -fill none \ + -expand 0 \ + -pad [Widget::cget $path -ipad] \ + ] + foreach {key val} $args { + if {[info exists opts($key)]} { + set opts($key) $val + } else { + set msg "unknown option \"$key\", must be one of: " + append msg [join [lsort [array names opts]] {, }] + return -code error $msg + } + } + foreach {ipadx ipady} [_padval $opts(-pad)] { break } + + set f $path.title + + lappend _widget($path,items) $w + pack $w -in $f -padx $ipadx -pady $ipady -side $opts(-side) \ + -fill $opts(-fill) -expand $opts(-expand) + + return $w +} + +# ------------------------------------------------------------------------ +# Command PanelFrame::remove +# ------------------------------------------------------------------------ +proc PanelFrame::remove {path args} { + variable _widget + + set destroy [string equal [lindex $args 0] "-destroy"] + if {$destroy} { + set args [lrange $args 1 end] + } + foreach w $args { + set idx [lsearch -exact $_widget($path,items) $w] + if {$idx == -1} { + # ignore unknown + continue + } + if {$destroy} { + destroy $w + } elseif {[winfo exists $w]} { + pack forget $w + } + set _widget($path,items) [lreplace $_widget($path,items) $idx $idx] + } +} + +# ------------------------------------------------------------------------ +# Command PanelFrame::delete +# ------------------------------------------------------------------------ +proc PanelFrame::delete {path args} { + return [PanelFrame::remove $path -destroy $args] +} + +# ------------------------------------------------------------------------ +# Command PanelFrame::items +# ------------------------------------------------------------------------ +proc PanelFrame::items {path} { + variable _widget + return $_widget($path,items) +} + +proc PanelFrame::_padval {padval} { + set len [llength $padval] + foreach {a b} $padval { break } + if {$len == 0 || $len > 2} { + return -code error \ + "invalid pad value \"$padval\", must be 1 or 2 pixel values" + } elseif {$len == 1} { + return [list $a $a] + } elseif {$len == 2} { + return $padval + } +} diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/passwddlg.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/passwddlg.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/passwddlg.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/passwddlg.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/pkgIndex.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/pkgIndex.tcl similarity index 96% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/pkgIndex.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/pkgIndex.tcl index 0a4703f3..d0717b00 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/pkgIndex.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/pkgIndex.tcl @@ -1,9 +1,9 @@ if {[catch {package require Tcl}]} return # NOTE: auto_loaded top-level commands shall not be qualified (no leading ::) # but all others should. See auto_qualify for details. -package ifneeded BWidget 1.9.16 "\ - package require Tk 8.1.1-;\ - [list tclPkgSetup $dir BWidget 1.9.16 { +package ifneeded BWidget 1.10.1 "\ + package require Tk 8.1.1 9;\ + [list tclPkgSetup $dir BWidget 1.10.1 { {arrow.tcl source {ArrowButton ::ArrowButton::create ::ArrowButton::use}} {labelframe.tcl source {LabelFrame ::LabelFrame::create ::LabelFrame::use}} {labelentry.tcl source {LabelEntry ::LabelEntry::create ::LabelEntry::use}} diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/progressbar.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/progressbar.tcl similarity index 96% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/progressbar.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/progressbar.tcl index 73c48f25..1dc29205 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/progressbar.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/progressbar.tcl @@ -65,7 +65,7 @@ proc ProgressBar::create { path args } { set _widget($path,dir) 1 set _widget($path,var) [Widget::cget $path -variable] if {$_widget($path,var) != ""} { - GlobalVar::tracevar variable $_widget($path,var) w \ + GlobalVar::tracevar variable $_widget($path,var) write \ [list ProgressBar::_modify $path] set _widget($path,afterid) \ [after idle [list ProgressBar::_modify $path]] @@ -89,12 +89,12 @@ proc ProgressBar::configure { path args } { if { [Widget::hasChangedX $path -variable] } { set newv [Widget::cget $path -variable] if { $_widget($path,var) != "" } { - GlobalVar::tracevar vdelete $_widget($path,var) w \ + GlobalVar::tracevar vdelete $_widget($path,var) write \ [list ProgressBar::_modify $path] } if { $newv != "" } { set _widget($path,var) $newv - GlobalVar::tracevar variable $newv w \ + GlobalVar::tracevar variable $newv write \ [list ProgressBar::_modify $path] if {![info exists _widget($path,afterid)]} { set _widget($path,afterid) \ @@ -198,7 +198,7 @@ proc ProgressBar::_destroy { path } { } if {[info exists _widget($path,var)]} { if {$_widget($path,var) != ""} { - GlobalVar::tracevar vdelete $_widget($path,var) w \ + GlobalVar::tracevar vdelete $_widget($path,var) write \ [list ProgressBar::_modify $path] } unset _widget($path,var) diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/progressdlg.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/progressdlg.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/progressdlg.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/progressdlg.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/scrollframe.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/scrollframe.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/scrollframe.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/scrollframe.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/scrollview.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/scrollview.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/scrollview.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/scrollview.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/scrollw.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/scrollw.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/scrollw.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/scrollw.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/separator.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/separator.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/separator.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/separator.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/spinbox.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/spinbox.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/spinbox.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/spinbox.tcl index 5689ba4f..ac4fe99e 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/spinbox.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/spinbox.tcl @@ -76,7 +76,7 @@ proc SpinBox::create { path args } { [list -highlightthickness 0 -takefocus 0 -class SpinBox] Widget::initFromODB SpinBox $path $maps(SpinBox) - if {$Widget::_theme} { + if {$::Widget::_theme} { set entry [eval [list Entry::create $path.e] $maps(.e)] } else { set entry [eval [list Entry::create $path.e] $maps(.e) -relief flat -bd 0] diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/statusbar.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/statusbar.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/statusbar.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/statusbar.tcl index 568c4acd..932d18d9 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/statusbar.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/statusbar.tcl @@ -10,7 +10,7 @@ # otherwise the resize behavior may behave oddly. # ------------------------------------------------------------------------ -package require Tk 8.3 +package require Tk 8.3 9 if {0} { proc sample {} { diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/tests/entry.test b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/tests/entry.test similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/tests/entry.test rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/tests/entry.test diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/titleframe.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/titleframe.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/titleframe.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/titleframe.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/tree.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/tree.tcl similarity index 98% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/tree.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/tree.tcl index 55f86a9d..08d6159c 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/tree.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/tree.tcl @@ -890,16 +890,19 @@ proc Tree::nodes { path node {first ""} {last ""} } { if { ![info exists data($node)] } { return -code error "node \"$node\" does not exist" } - + set nodes {} + set res {} if { ![string length $first] } { - return [lrange $data($node) 1 end] - } - - if { ![string length $last] } { - return [lindex [lrange $data($node) 1 end] $first] + set nodes [lrange $data($node) 1 end] + } elseif { ![string length $last] } { + set nodes [lindex [lrange $data($node) 1 end] $first] } else { - return [lrange [lrange $data($node) 1 end] $first $last] + set nodes [lrange [lrange $data($node) 1 end] $first $last] } + foreach n $nodes { + lappend res [_node_name_rev $path $n] + } + return $res } @@ -1044,11 +1047,11 @@ proc Tree::edit { path node text {verifycmd ""} {clickres 0} {select 1}} { -selectforeground [Widget::getoption $path -selectforeground] \ -selectbackground $sbg \ -font [Widget::getoption $path.$node -font] \ - -textvariable Tree::_edit(text)] + -textvariable ::Tree::_edit(text)] pack $ent -ipadx 8 -anchor w set idw [$path.c create window $x $y -window $frame -anchor w] - trace variable Tree::_edit(text) w \ + trace add variable _edit(text) write \ [list Tree::_update_edit_size $path $ent $idw $wmax] tkwait visibility $ent grab $frame @@ -1071,14 +1074,14 @@ proc Tree::edit { path node text {verifycmd ""} {clickres 0} {select 1}} { set ok 0 while { !$ok } { - tkwait variable Tree::_edit(wait) + tkwait variable ::Tree::_edit(wait) if { !$_edit(wait) || [llength $verifycmd]==0 || [uplevel \#0 $verifycmd [list $_edit(text)]] } { set ok 1 } } - trace vdelete Tree::_edit(text) w \ + trace remove variable _edit(text) write \ [list Tree::_update_edit_size $path $ent $idw $wmax] grab release $frame BWidget::focus release $ent @@ -2054,6 +2057,10 @@ proc Tree::_keynav {which win} { # The current node. proc Tree::_get_current_node {win} { + # TCL9 does not resolve sub-namespaces from parents (root) any more. + # The following sub-namespace ::Tree::selectTree was not observed + # on run-time tests. Nor ::selectTree + # So keep this for TCL 9 if {[info exists selectTree::selectCursor($win)]} { set result $selectTree::selectCursor($win) } elseif {[llength [set selList [$win selection get]]]} { @@ -2215,13 +2222,13 @@ proc Tree::_mouse_select { path cmd args } { proc Tree::_node_name { path node } { # Make sure node names are safe as tags and variable names - set map [list & \1 | \2 ^ \3 ! \4 :: \5] + set map [list & \1 | \2 ^ \3 ! \4 : \5] return [string map $map $node] } proc Tree::_node_name_rev { path node } { # Allow reverse interpretation of node names - set map [list \1 & \2 | \3 ^ \4 ! \5 ::] + set map [list \1 & \2 | \3 ^ \4 ! \5 :] return [string map $map $node] } @@ -2233,6 +2240,10 @@ proc Tree::_destroy { path } { variable $path upvar 0 $path data + if { ![info exists data] && [string match ".#BWidget.#Class*" $path] } { + # this is a proxy win to query xrdb + return + } if { $data(upd,afterid) != "" } { after cancel $data(upd,afterid) } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/utils.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/utils.tcl similarity index 99% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/utils.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/utils.tcl index 16385c25..d05782b2 100644 --- a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/utils.tcl +++ b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/utils.tcl @@ -57,7 +57,11 @@ proc GlobalVar::getvar { varName } { # Command GlobalVar::tracevar # ---------------------------------------------------------------------------- proc GlobalVar::tracevar { cmd varName args } { - return [uplevel \#0 [list trace $cmd $varName] $args] + array set cmdmap { + variable {add variable} + vdelete {remove variable} + } + return [uplevel \#0 trace $cmdmap($cmd) [list $varName] $args] } diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/widget.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/widget.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/widget.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/widget.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/wizard.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/wizard.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/wizard.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/wizard.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/xpm2image.tcl b/src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/xpm2image.tcl similarity index 100% rename from src/vfs/_vfscommon.vfs/lib/BWidget1.9.16/xpm2image.tcl rename to src/vfs/_vfscommon.vfs/lib/BWidget1.10.1/xpm2image.tcl diff --git a/src/vfs/_vfscommon.vfs/lib/app-shellspy/shellspy.tcl b/src/vfs/_vfscommon.vfs/lib/app-shellspy/shellspy.tcl index 7c4a3044..6d86b29c 100644 --- a/src/vfs/_vfscommon.vfs/lib/app-shellspy/shellspy.tcl +++ b/src/vfs/_vfscommon.vfs/lib/app-shellspy/shellspy.tcl @@ -808,29 +808,36 @@ set ::argv [list %a%] set ::argc [llength $::argv] set ::argv0 $normscript info script $normscript -source $normscript +source $normscript #restore values -info script $prevscript +info script $prevscript dict with prevglobal {} - }] + }] set repl_lines "" #append repl_lines {puts stderr "starting repl [chan names]"} \n #append repl_lines {puts stderr "stdin [chan configure stdin]"} \n - append repl_lines {package require punk::repl} \n - append repl_lines {repl::init -safe 0} \n - append repl_lines {repl::start stdin} \n - #append repl_lines {puts stdout "shutdown message"} \n + if {$replwhen eq "repl_first"} { #we need to cooperate with the repl to get the script to run on exit namespace eval ::repl {} set ::repl::post_script $script + + append repl_lines {package require punk::repl} \n + append repl_lines {repl::init -safe 0} \n + append repl_lines {repl::start stdin} \n set script "$repl_lines" } elseif {$replwhen eq "repl_last"} { - append script $repl_lines + append repl_lines {package require punk::repl} \n + append repl_lines {repl::init -safe 0} \n + append repl_lines [list repl::submit stdin "eval \{ $script \};\n"] \n + append repl_lines {repl::start stdin} \n + + #append script $repl_lines + set script $repl_lines } else { #just the script } diff --git a/src/vfs/_vfscommon.vfs/modules/punk/args-0.2.1.tm b/src/vfs/_vfscommon.vfs/modules/punk/args-0.2.1.tm index 1a18006b..beb0bc9f 100644 --- a/src/vfs/_vfscommon.vfs/modules/punk/args-0.2.1.tm +++ b/src/vfs/_vfscommon.vfs/modules/punk/args-0.2.1.tm @@ -8011,7 +8011,7 @@ tcl::namespace::eval punk::args { #valmin, valmax #puts stderr "remaining_rawargs: $remaining_rawargs" #puts stderr "argstate: $argstate" - if {$OPT_MAX ne "0" && [lsearch $remaining_rawargs -*] >= 0} { + if {$OPT_MAX ne "0" && [lsearch $remaining_rawargs -*] > -1} { #contains at least one possible flag set maxidx [expr {[llength $remaining_rawargs] -1}] if {$valmax == -1} { @@ -8966,6 +8966,8 @@ tcl::namespace::eval punk::args { #review - ensure all possible keys present in thisarg_keys + set pkoverride [Dict_getdef $argstate -parsekey ""] + tcl::dict::for {argname_or_ident value_group} $opts_and_values { # #parsekey: key used in resulting leaders opts values dictionaries @@ -8987,7 +8989,7 @@ tcl::namespace::eval punk::args { #get full option name such as -fg|-foreground from non-alias name such as -foreground #if "@opts -any|-arbitrary true" - we may have an option that wasn't defined set argname [dict get $lookup_optset $argname_or_ident] - set pkoverride [Dict_getdef $argstate -parsekey ""] + #set pkoverride [Dict_getdef $argstate -parsekey ""] if {$pkoverride ne ""} { set parsekey $pkoverride } else { @@ -9000,7 +9002,7 @@ tcl::namespace::eval punk::args { } } else { set argname $argname_or_ident - set pkoverride [Dict_getdef $argstate -parsekey ""] + #set pkoverride [Dict_getdef $argstate -parsekey ""] if {$pkoverride ne ""} { set parsekey $pkoverride } else { @@ -9082,7 +9084,7 @@ tcl::namespace::eval punk::args { set vlist_original $vlist ;#retain for possible final strip_ansi #review - validationtransform - if {$is_validate_ansistripped} { + if {[llength $vlist] && $is_validate_ansistripped} { #validate_ansistripped 1 package require punk::ansi set vlist_check [list] @@ -9432,34 +9434,34 @@ tcl::namespace::eval punk::args { } } - #is_allow_ansi doesn't apply to a value matching a supplied -default, or values matching those in -choices/-choicegroups - #assert: our vlist & vlist_check lists have been reduced to remove those - if {!$is_allow_ansi && [llength $vlist]} { - #allow_ansi 0 - package require punk::ansi - #do not run ta::detect on a list - foreach clause_value $vlist { - foreach e $clause_value { - if {[punk::ansi::ta::detect $e]} { - set msg "$argclass '$argname' for %caller% contains ansi - but -allow_ansi is false. character-view: '[punk::ansi::ansistring VIEW $e]'" - return -options [list -code error -errorcode [list PUNKARGS VALIDATION [list contentviolation ansi] -badarg $argname -argspecs $argspecs]] $msg + if {[llength $vlist]} { + #is_allow_ansi doesn't apply to a value matching a supplied -default, or values matching those in -choices/-choicegroups + #assert: our vlist & vlist_check lists have been reduced to remove those + if {!$is_allow_ansi} { + #allow_ansi 0 + package require punk::ansi + #do not run ta::detect on a list + foreach clause_value $vlist { + foreach e $clause_value { + if {[punk::ansi::ta::detect $e]} { + set msg "$argclass '$argname' for %caller% contains ansi - but -allow_ansi is false. character-view: '[punk::ansi::ansistring VIEW $e]'" + return -options [list -code error -errorcode [list PUNKARGS VALIDATION [list contentviolation ansi] -badarg $argname -argspecs $argspecs]] $msg + } } } } - } - #puts "argname:$argname v:$v is_default:$is_default" - #we want defaults to pass through - even if they don't pass the checks that would be required for a specified value - #If the caller manually specified a value that happens to match the default - we don't detect that as any different from an unspecified value - Review. - #arguments that are at their default are not subject to type and other checks + #puts "argname:$argname v:$v is_default:$is_default" + #we want defaults to pass through - even if they don't pass the checks that would be required for a specified value + #If the caller manually specified a value that happens to match the default - we don't detect that as any different from an unspecified value - Review. + #arguments that are at their default are not subject to type and other checks - #don't validate defaults or choices that matched - #puts "---> opts_and_values: $opts_and_values" - #puts "===> argname: $argname is_default: $is_default is_choice: $is_choice" - #if {(!$has_choices && !$is_default) || ($has_choices && (!$is_default && !$choices_all_match))} {} + #don't validate defaults or choices that matched + #puts "---> opts_and_values: $opts_and_values" + #puts "===> argname: $argname is_default: $is_default is_choice: $is_choice" + #if {(!$has_choices && !$is_default) || ($has_choices && (!$is_default && !$choices_all_match))} {} - #our validation-required list could have been reduced to none e.g if match -default or defined -choices/-choicegroups - #assert [llength $vlist] == [llength $vlist_check] - if {[llength $vlist]} { + #our validation-required list could have been reduced to none e.g if match -default or defined -choices/-choicegroups + #assert [llength $vlist] == [llength $vlist_check] #$t = clause column #for {set clausecolumn 0} {$clausecolumn < [llength $typelist]} {incr clausecolumn} {} @@ -9493,37 +9495,37 @@ tcl::namespace::eval punk::args { } - - } - - if {$is_strip_ansi} { - set stripped_list [lmap e $vlist_original {punk::ansi::ansistrip $e}] ;#no faster or slower, but more concise than foreach - if {$is_multiple} { - switch -- [tcl::dict::get $thisarg -ARGTYPE] { - leader { - tcl::dict::set leaders_dict $argname_or_ident $stripped_list - } - option { - tcl::dict::set opts $argname_or_ident $stripped_list - } - value { - tcl::dict::set values_dict $argname_or_ident $stripped_list - } - } - } else { - switch -- [tcl::dict::get $thisarg -ARGTYPE] { - leader { - tcl::dict::set leaders_dict $argname_or_ident [lindex $stripped_list 0] - } - option { - tcl::dict::set opts $argname_or_ident [lindex $stripped_list 0] + if {$is_strip_ansi} { + set stripped_list [lmap e $vlist_original {punk::ansi::ansistrip $e}] ;#no faster or slower, but more concise than foreach + if {$is_multiple} { + switch -- [tcl::dict::get $thisarg -ARGTYPE] { + leader { + tcl::dict::set leaders_dict $argname_or_ident $stripped_list + } + option { + tcl::dict::set opts $argname_or_ident $stripped_list + } + value { + tcl::dict::set values_dict $argname_or_ident $stripped_list + } } - value { - tcl::dict::set values_dict $argname_or_ident [lindex $stripped_list 0] + } else { + switch -- [tcl::dict::get $thisarg -ARGTYPE] { + leader { + tcl::dict::set leaders_dict $argname_or_ident [lindex $stripped_list 0] + } + option { + tcl::dict::set opts $argname_or_ident [lindex $stripped_list 0] + } + value { + tcl::dict::set values_dict $argname_or_ident [lindex $stripped_list 0] + } } } } + } + } set finalopts [dict create] diff --git a/src/vfs/_vfscommon.vfs/modules/punk/repl-0.1.2.tm b/src/vfs/_vfscommon.vfs/modules/punk/repl-0.1.2.tm index 0272500d..486720e8 100644 --- a/src/vfs/_vfscommon.vfs/modules/punk/repl-0.1.2.tm +++ b/src/vfs/_vfscommon.vfs/modules/punk/repl-0.1.2.tm @@ -479,7 +479,13 @@ proc repl::start {inchan args} { puts stderr "-->repl::start active on $inchan $args replthread:[thread::id] codethread:$codethread" set prompt_config [punk::repl::get_prompt_config] doprompt "P% " - chan event $inchan readable [list [namespace current]::repl_handler $inchan $prompt_config] + if {[llength $input_chunks_waiting($inchan)]} { + set readmore 0 + uplevel #0 [list [namespace current]::repl_handler $inchan $readmore $prompt_config] + #after 0 [list [namespace current]::repl_handler $inchan $readmore $prompt_config] + } + set readmore 1 + chan event $inchan readable [list [namespace current]::repl_handler $inchan $readmore $prompt_config] set reading 1 #catch { @@ -530,6 +536,22 @@ proc repl::start {inchan args} { #puts stderr "__> returning 0" return 0 } + +#put a script into the waiting buffer for evaluation +proc repl::submit {inputchan script} { + set prompt_config [punk::repl::get_prompt_config] + upvar ::punk::console::input_chunks_waiting input_chunks_waiting + if {[info exists input_chunks_waiting($inputchan)] && [llength $input_chunks_waiting($inputchan)]} { + set last [lindex $input_chunks_waiting($inputchan) end] + append last $script + lset input_chunks_waiting($inputchan) end $last + } else { + set input_chunks_waiting($inputchan) [list $script] + } + + #set readmore 0 + #after idle [list after 0 [list ::repl::repl_handler $inputchan $readmore $prompt_config]] +} proc repl::post_operations {} { if {[info exists ::repl::post_script] && [string length $::repl::post_script]} { #put aside post_script so the script has the option to add another post_script and restart the repl @@ -1384,7 +1406,10 @@ proc punk::repl::repl_handler_restorechannel_if_not_eof {inputchan previous_inpu } return [chan conf $inputchan] } -proc repl::repl_handler {inputchan prompt_config} { +proc repl::repl_handler {inputchan readmore prompt_config} { + #readmore set to zero used to process input_chunks_waiting without reading inputchan, + # and without rescheduling reader + # -- review variable in_repl_handler set in_repl_handler [list $inputchan $prompt_config] @@ -1451,115 +1476,132 @@ proc repl::repl_handler {inputchan prompt_config} { set waitingchunk [lindex $waitinglines end] # -- #set chunksize [gets $inputchan chunk] - set chunk [read $inputchan] - set chunksize [string length $chunk] - # -- - if {$chunksize > 0} { - if {[string index $chunk end] eq "\n"} { - lappend stdinlines $waitingchunk[string range $chunk 0 end-1] - #punk::console::cursorsave_move_emitblock_return 30 30 "repl_handler num_stdinlines [llength $stdinlines] chunk:$yellow[ansistring VIEW -lf 1 $chunk][a] fblocked:[fblocked $inputchan] pending:[chan pending input stdin]" - - punk::repl::repl_handler_restorechannel_if_not_eof $inputchan $original_input_conf - uplevel #0 [list repl::repl_process_data $inputchan line "" $stdinlines $prompt_config] - } else { - set input_chunks_waiting($inputchan) [list $allwaiting] - lappend input_chunks_waiting($inputchan) $chunk - } + if {!$readmore} { + set chunk "" + set chunksize 0 + uplevel #0 [list repl::repl_process_data $inputchan line "" $stdinlines $prompt_config] + set input_chunks_waiting($inputchan) [list $waitingchunk] } else { - #'chan blocked' docs state: 'Note that this only ever returns 1 when the channel has been configured to be non-blocking..' - if {[chan blocked $inputchan]} { - #REVIEW - - #todo - figure out why we're here. - #can we even put a spinner so we don't keep emitting lines? We probably can't use any ansi functions that need to get a response on stdin..(like get_cursor_pos) - #punk::console::get_size is problematic if -winsize not available on the stdout channel - which is the case for certain 8.6 versions at least.. platform variances? - ## can't do this: set screeninfo [punk::console::get_size]; lassign $screeninfo _c cols _r rows - set outconf [chan configure stdout] - set RED [punk::ansi::a+ red bold]; set RST [punk::ansi::a] - if {"windows" eq $::tcl_platform(platform)} { - set msg "${RED}$inputchan chan blocked is true. (line-length Tcl windows channel bug?)$RST \{$allwaiting\}" + set chunk [read $inputchan] + set chunksize [string length $chunk] + if {$chunksize > 0} { + if {[string index $chunk end] eq "\n"} { + lappend stdinlines $waitingchunk[string range $chunk 0 end-1] + #punk::console::cursorsave_move_emitblock_return 30 30 "repl_handler num_stdinlines [llength $stdinlines] chunk:$yellow[ansistring VIEW -lf 1 $chunk][a] fblocked:[fblocked $inputchan] pending:[chan pending input stdin]" + + punk::repl::repl_handler_restorechannel_if_not_eof $inputchan $original_input_conf + uplevel #0 [list repl::repl_process_data $inputchan line "" $stdinlines $prompt_config] } else { - set msg "${RED}$inputchan chan blocked is true.$RST \{$allwaiting\}" + set input_chunks_waiting($inputchan) [list $allwaiting] + lappend input_chunks_waiting($inputchan) $chunk } - set cols "" - set rows "" - if {[dict exists $outconf -winsize]} { - lassign [dict get $outconf -winsize] cols rows - } else { - #fallback - try external executable. Which is a bit ugly - #tput can't seem to get dimensions (on FreeBSD at least) when not run interactively - ie via exec. (always returns 80x24 no matter if run with <@stdin) - - #bizarrely - tput can work with exec on windows if it's installed e.g from msys2 - #but can be *slow* compared to unix e.g 400ms+ vs <2ms on FreeBSD ! - #stty -a is 400ms+ vs 500us+ on FreeBSD - + } else { + if {[chan blocked $inputchan]} { + #'chan blocked' docs state: 'Note that this only ever returns 1 when the channel has been configured to be non-blocking..' + #REVIEW - + #todo - figure out why we're here. + #can we even put a spinner so we don't keep emitting lines? We probably can't use any ansi functions that need to get a response on stdin..(like get_cursor_pos) + #punk::console::get_size is problematic if -winsize not available on the stdout channel - which is the case for certain 8.6 versions at least.. platform variances? + ## can't do this: set screeninfo [punk::console::get_size]; lassign $screeninfo _c cols _r rows + set outconf [chan configure stdout] + set RED [punk::ansi::a+ red bold]; set RST [punk::ansi::a] if {"windows" eq $::tcl_platform(platform)} { - set tputcmd [auto_execok tput] - if {$tputcmd ne ""} { - if {![catch {exec {*}$tputcmd cols lines} values]} { - lassign $values cols rows - } - } + set msg "${RED}$inputchan chan blocked is true. (line-length Tcl windows channel bug?)$RST \{$allwaiting\}" + } else { + set msg "${RED}$inputchan chan blocked is true.$RST \{$allwaiting\}" } + set cols "" + set rows "" + if {[dict exists $outconf -winsize]} { + lassign [dict get $outconf -winsize] cols rows + } else { + #fallback1 query terminal + if {![catch {punk::console::get_size} sdict]} { + set cols [dict get $sdict columns] + set rows [dict get $sdict rows] + } + + if {![string is integer -strict $cols] || ![string is integer -strict $rows]} { + + #fallback2 - try external executable. Which is a bit ugly + #tput can't seem to get dimensions (on FreeBSD at least) when not run interactively - ie via exec. (always returns 80x24 no matter if run with <@stdin) + + #bizarrely - tput can work with exec on windows if it's installed e.g from msys2 + #but can be *slow* compared to unix e.g 400ms+ vs <2ms on FreeBSD ! + #stty -a is 400ms+ vs 500us+ on FreeBSD - if {![string is integer -strict $cols] || ![string is integer -strict $rows]} { - #same for all platforms? tested on windows, wsl, FreeBSD - #exec stty -a gives a result on the first line like: - #speed xxxx baud; rows rr; columns cc; - #review - more robust parsing - do we know it's first line? - set sttycmd [auto_execok stty] - if {$sttycmd ne ""} { - #the more parseable: stty -g doesn't give rows/columns - if {![catch {exec {*}$sttycmd -a} result]} { - lassign [split $result \n] firstline - set lineparts [split $firstline {;}] ;#we seem to get segments that look well behaved enough to be treated as tcl lists - review - regex? - set rowinfo [lsearch -index end -inline $lineparts rows] - if {[llength $rowinfo] == 2} { - set rows [lindex $rowinfo 0] + if {"windows" eq $::tcl_platform(platform)} { + set tputcmd [auto_execok tput] + if {$tputcmd ne ""} { + if {![catch {exec {*}$tputcmd cols lines} values]} { + lassign $values cols rows + } } - set colinfo [lsearch -index end -inline $lineparts columns] - if {[llength $colinfo] == 2} { - set cols [lindex $colinfo 0] + } + + if {![string is integer -strict $cols] || ![string is integer -strict $rows]} { + #same for all platforms? tested on windows, wsl, FreeBSD + #exec stty -a gives a result on the first line like: + #speed xxxx baud; rows rr; columns cc; + #review - more robust parsing - do we know it's first line? + set sttycmd [auto_execok stty] + if {$sttycmd ne ""} { + #the more parseable: stty -g doesn't give rows/columns + if {![catch {exec {*}$sttycmd -a} result]} { + lassign [split $result \n] firstline + set lineparts [split $firstline {;}] ;#we seem to get segments that look well behaved enough to be treated as tcl lists - review - regex? + set rowinfo [lsearch -index end -inline $lineparts rows] + if {[llength $rowinfo] == 2} { + set rows [lindex $rowinfo 0] + } + set colinfo [lsearch -index end -inline $lineparts columns] + if {[llength $colinfo] == 2} { + set cols [lindex $colinfo 0] + } + } } } } } - } - if {[string is integer -strict $cols] && [string is integer -strict $rows]} { - #got_dimensions - todo - try spinner? - #puts -nonewline stdout [punk::ansi::move $rows 4]$msg - #use cursorsave_ version which avoids get_cursor_pos_list call - set msglen [ansistring length $msg] - punk::console::cursorsave_move_emitblock_return $rows [expr {$cols - $msglen -1}] $msg ;#supports also vt52 - } else { - #no mechanism to get console dimensions - #we are reduced to continuously spewing lines. - puts stderr $msg - } + if {[string is integer -strict $cols] && [string is integer -strict $rows]} { + #got_dimensions - todo - try spinner? + #puts -nonewline stdout [punk::ansi::move $rows 4]$msg + #use cursorsave_ version which avoids get_cursor_pos_list call + set msglen [ansistring length $msg] + punk::console::cursorsave_move_emitblock_return $rows [expr {$cols - $msglen -1}] $msg ;#supports also vt52 + } else { + #no mechanism to get console dimensions + #we are reduced to continuously spewing lines. + puts stderr $msg + } - after 100 + after 100 + } + set input_chunks_waiting($inputchan) [list $allwaiting] } - set input_chunks_waiting($inputchan) [list $allwaiting] } - + # -- } else { - punk::repl::repl_handler_checkchannel $inputchan - punk::repl::repl_handler_checkcontrolsignal_linemode $inputchan - # -- --- --- - #set chunksize [gets $inputchan chunk] - # -- --- --- - set chunk [read $inputchan] - set chunksize [string length $chunk] - # -- --- --- - if {$chunksize > 0} { - #punk::console::cursorsave_move_emitblock_return 35 120 "chunk: [ansistring VIEW -lf 1 "...[string range $chunk end-10 end]"]" - set ln $chunk ;#temp - #punk::console::cursorsave_move_emitblock_return 25 30 [textblock::frame -title line "[a+ green]$waitingchunk[a][a+ red][ansistring VIEW -lf 1 $ln][a+ green]pending:[chan pending input stdin][a]"] - if {[string index $ln end] eq "\n"} { - lappend stdinlines [string range $ln 0 end-1] - punk::repl::repl_handler_restorechannel_if_not_eof $inputchan $original_input_conf - uplevel #0 [list repl::repl_process_data $inputchan line "" $stdinlines $prompt_config] - } else { - lappend input_chunks_waiting($inputchan) $ln + if {$readmore} { + punk::repl::repl_handler_checkchannel $inputchan + punk::repl::repl_handler_checkcontrolsignal_linemode $inputchan + # -- --- --- + #set chunksize [gets $inputchan chunk] + # -- --- --- + set chunk [read $inputchan] + set chunksize [string length $chunk] + # -- --- --- + if {$chunksize > 0} { + #punk::console::cursorsave_move_emitblock_return 35 120 "chunk: [ansistring VIEW -lf 1 "...[string range $chunk end-10 end]"]" + set ln $chunk ;#temp + #punk::console::cursorsave_move_emitblock_return 25 30 [textblock::frame -title line "[a+ green]$waitingchunk[a][a+ red][ansistring VIEW -lf 1 $ln][a+ green]pending:[chan pending input stdin][a]"] + if {[string index $ln end] eq "\n"} { + lappend stdinlines [string range $ln 0 end-1] + punk::repl::repl_handler_restorechannel_if_not_eof $inputchan $original_input_conf + uplevel #0 [list repl::repl_process_data $inputchan line "" $stdinlines $prompt_config] + } else { + lappend input_chunks_waiting($inputchan) $ln + } } } } @@ -1582,19 +1624,21 @@ proc repl::repl_handler {inputchan prompt_config} { } if {$continue} { - if {[dict get $original_input_conf -blocking] ne "0" || [dict get $original_input_conf -translation] ne "lf"} { - chan configure $inputchan -blocking 0 - chan configure $inputchan -translation lf - } - set chunk [read $inputchan] - #we expect a chan configured with -blocking 0 to be blocked immediately after reads - #test - just bug console for now - try to understand when/how/if a non blocking read occurs. - if {![chan blocked $inputchan]} { - puts stderr "repl_handler->$inputchan not blocked after read" - } + if {$readmore} { + if {[dict get $original_input_conf -blocking] ne "0" || [dict get $original_input_conf -translation] ne "lf"} { + chan configure $inputchan -blocking 0 + chan configure $inputchan -translation lf + } + set chunk [read $inputchan] + #we expect a chan configured with -blocking 0 to be blocked immediately after reads + #test - just bug console for now - try to understand when/how/if a non blocking read occurs. + if {![chan blocked $inputchan]} { + puts stderr "repl_handler->$inputchan not blocked after read" + } - punk::repl::repl_handler_restorechannel_if_not_eof $inputchan $original_input_conf - uplevel #0 [list repl::repl_process_data $inputchan raw-read $chunk [list] $prompt_config] + punk::repl::repl_handler_restorechannel_if_not_eof $inputchan $original_input_conf + uplevel #0 [list repl::repl_process_data $inputchan raw-read $chunk [list] $prompt_config] + } while {[llength $input_chunks_waiting($inputchan)]} { set chunkzero [lpop input_chunks_waiting($inputchan) 0] if {$chunkzero eq ""} {continue} ;#why empty waiting - and is there any point passing on? @@ -1604,33 +1648,35 @@ proc repl::repl_handler {inputchan prompt_config} { } } - if {![chan eof $inputchan]} { - ################################################################################## - #Re-enable channel read handler only if no waiting chunks - must process in order - ################################################################################## - if {![llength $input_chunks_waiting($inputchan)]} { - chan event $inputchan readable [list ::repl::repl_handler $inputchan $prompt_config] + if {$readmore} { + if {![chan eof $inputchan]} { + ################################################################################## + #Re-enable channel read handler only if no waiting chunks - must process in order + ################################################################################## + if {![llength $input_chunks_waiting($inputchan)]} { + chan event $inputchan readable [list ::repl::repl_handler $inputchan $readmore $prompt_config] + } else { + #review + #puts stderr "warning: after idle re-enable repl::repl_handler in thread: [thread::id]" + after idle [list ::repl::repl_handler $inputchan $readmore $prompt_config] + } + #################################################### } else { - #review - #puts stderr "warning: after idle re-enable repl::repl_handler in thread: [thread::id]" - after idle [list ::repl::repl_handler $inputchan $prompt_config] - } - #################################################### - } else { - #repl_handler_checkchannel $inputchan - chan event $inputchan readable {} - set reading 0 - #target is the 'main' interp in codethread. - #(note bug where thread::send goes to code interp, but thread::send -async goes to main interp) - # https://core.tcl-lang.org/thread/tktview/0de73f04c7ce188b13a4 - - thread::send -async $::repl::codethread {set ::punk::repl::codethread::is_running 0} ;#to main interp of codethread - if {$::tcl_interactive} { - rputs stderr "\nrepl_handler EOF inputchannel:[chan conf $inputchan]" - #rputs stderr "\n|repl> ctrl-c EOF on $inputchan." + #repl_handler_checkchannel $inputchan + chan event $inputchan readable {} + set reading 0 + #target is the 'main' interp in codethread. + #(note bug where thread::send goes to code interp, but thread::send -async goes to main interp) + # https://core.tcl-lang.org/thread/tktview/0de73f04c7ce188b13a4 + + thread::send -async $::repl::codethread {set ::punk::repl::codethread::is_running 0} ;#to main interp of codethread + if {$::tcl_interactive} { + rputs stderr "\nrepl_handler EOF inputchannel:[chan conf $inputchan]" + #rputs stderr "\n|repl> ctrl-c EOF on $inputchan." + } + set [namespace current]::done 1 + after 1 [list repl::reopen_stdin] } - set [namespace current]::done 1 - after 1 [list repl::reopen_stdin] } set in_repl_handler [list] } diff --git a/src/vfs/_vfscommon.vfs/modules/shellfilter-0.2.1.tm b/src/vfs/_vfscommon.vfs/modules/shellfilter-0.2.1.tm index 8e59cf0b..2eb2f8fa 100644 --- a/src/vfs/_vfscommon.vfs/modules/shellfilter-0.2.1.tm +++ b/src/vfs/_vfscommon.vfs/modules/shellfilter-0.2.1.tm @@ -2472,7 +2472,14 @@ namespace eval shellfilter { set exitinfo [list error "$errMsg" errorCode $::errorCode errorInfo "$::errorInfo"] } } + #puts "shellfilter::run finished call" + #------------------------- + #warning - without flush stdout - we can get hang, but only on some terminals + # - mechanism for this problem not understood! + flush stdout + flush stderr + #------------------------- #the previous redirections on the underlying inchan/outchan/errchan items will be restored from the -aside setting during removal #Remove execution-time Tees from stack @@ -2480,6 +2487,7 @@ namespace eval shellfilter { shellfilter::stack::remove stderr $id_err #shellfilter::stack::remove stderr $id_in + #puts stderr "shellfilter::run complete..." #chan configure stderr -buffering line #flush stdout diff --git a/src/vfs/_vfscommon.vfs/modules/shellrun-0.1.1.tm b/src/vfs/_vfscommon.vfs/modules/shellrun-0.1.1.tm index 478c70fa..c3f7ab10 100644 --- a/src/vfs/_vfscommon.vfs/modules/shellrun-0.1.1.tm +++ b/src/vfs/_vfscommon.vfs/modules/shellrun-0.1.1.tm @@ -187,10 +187,10 @@ namespace eval shellrun { #--------------------------------------------------------------------------------------------- set exitinfo [shellfilter::run $cmdargs {*}$callopts -teehandle punksh -inbuffering none -outbuffering none ] #--------------------------------------------------------------------------------------------- - foreach id $idlist_stderr { shellfilter::stack::remove stderr $id } + #puts stderr "shellrun::run exitinfo: $exitinfo" flush stderr flush stdout diff --git a/src/vfs/_vfscommon.vfs/modules/test/backup.tm b/src/vfs/_vfscommon.vfs/modules/test/backup.tm deleted file mode 100644 index 34f2a73d9eca15bbe0cb8fc4abcdfe7f7a15647d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41364 zcmce;2RxPU{|78(X3y*+viIJ5lTG$M_B@Uqva`38l^H@-iV)cnl9{~|Wfn?2_d!MV z{r-MWzyI@`URTFC_kCa2XMf(G&wbqo6?EoB}+aoXKDpzb_YXTZJZoImQMCC@@!l|00pk54&d+Kn7V>kpbp2({IZ}G z*bxjdg-z<_YU5}n0FVfqT0p?w#!NuK!PE|H4A5YF@-2wj$>9Sb}`?%}t@^)*zo_VLCcN98B$Pyul!S8%IkgkgGYw#u;kp z3tJg>0`Qm5xfx&r0z)8xD6gK9aV!<6o7u_NEFdjMQ!_xKfPgK)fczY69Ko>J+<@<# zO`+B-AUbC!S63U@Ij*LbU_d&+Sm56LNsR9AT>eLC?91Pfs^C zb+j-B%;xkOh?5ia_@a|3pr$tVKd(1DH-Wt=AW17nkiM(4y$$sEtRIsx8=i{&c!E=_ zJa_f6HT)_yfMV9~CJm$d`+R?tq^pw~#QcQ2f4YwK>?DBQpQFGR1h#ht|G~tlezP5z zL|g$M1FXggqsg!93X1*%{*G46y+m$KLDQ^e|%uj+vj>m@C*E3i1&LN&LyC zVW%F;!`>e3Xaz(VYH>r5urP=XI2i(lxuovtUaS*k{zn&lgq6Vh<<0*e;_4~p;e?DyK1Ob}@vBeXh4CDhl znU30%{vQQ*=5&ca*uV)Rr}90HPN&WdoAi(7`27mlyFFkQKw3DFljk3Kgq`+hM*jTm zsU7@LX1`wnW8dD~)D>)e5{Zpn!B!4nM<6)q!y=ud6%ZorojiWH{ZAJLT*=VzH;RAG zcM?ru!PFJT!te7z&FuvQpboIS;R^l3RNn<}Z*J@Wn+8OELg?9ve-HbxrC>xHUvh?< z;|Ov}{r4GvCm(k8IZpu+4iNZ{o$_?~U*$x7ekH?W&-&>jza0Hf4g(8=XQ;M^m^xYk zY40rcC!yQ$j35581_-byLy#bq8xXW$K?e*0fB{U$79iO4zv&FdH0)&t_=VjckN$2q zzkhR1Y}DuY_(wN@Daz8#-u@Jofb?yh02rcg?&Juhf6)0!j`IePpJ6i_f&>I$9Kx;z z9cLjYOCWC_LmLo)Tma53V1VZPSCA9P^+(>0jRh8>je#Xka|-K;z>lf%Vemaqh#@TV z0Ox}(m;qJ5K-Jmg@!J~zm_1-3|5X66nNE59ZKChzA1{8E*#CFrp#C=TvF46Lm${RJ z1CZujLC3xcLumjIJzmcc1OTL~SO3X;sZ1eOZm_rkz*iWaG`EJ?Ensg>ATuBf0%!^F zaoFKwT>Ks13J6?3&W&KG`ENwQxTOM{!c6xR6}SqVK;-XN9n<9u7z`BlJq{tNj zkgiSur20-f2rw>tu&FB)WCcUO4lqaryjy_nO}$(}01)@EakOyqa0NNrn?ixe2Ow_% zy*fHMG9RZCQ-B5fKU1b@4Fm7Mg+P*Ya{y4S7m!VWNlv8C$_gj|M%xL11(E~sJ>Vgx zfIgufP7u3exO*Ng!bA^y{qT%qxd0i#0zkeXJ1{`7{_h6z&%yL6E9;3V!BEzTqg@3# z+Q1wd_;fP)KN%K`4ghAkI@>_OAaPasQ_DJIpg)}aRMa33SO5UZ1PIg(D2rf4k)so! zI%kVxnJ}LsvlE5dIXZa&Wyv|)g_)?68x#bEcpVE4`e*6DC_DC?(@N!!+JT(}dr|!+ zuODC;^g}xT=Ep#=gB5dN2N*xDKt_hG4Lw!8DaZrj1nAhx4eaU)qBDg+Z7hMZ4+I27 zQ&<*-IVMoC0GdBzyMWEOx`9EWe>STVvH`-K-2g0b^I#&f zA|fJZO!qXlf`njd0gBl-+l0j7A$lE9y?J$upVM6Pb;=3p?;Y%l;~ z6AWdYjpRS=?Wa3}ez14Gr2Q_}v+w6vlY~WfSipC4wt|>i9OFfx=>Y-!+6IVzK==pD z?j-12+IRv6cuWb*k^g<6-{Hk~68`zfiB8X2`0r}`W6}6)@%JA!d`<)>7y$HLyT|H) zMf<;8{8aIP=1xR)JRgwy^v`@W{CDA<3pQ?!ClvjGo`3a_)Aq^FK8YoeppMPtd#w#? z4*?hpaFOFC%yGgxfiEEHGobFDY5lV*eg7NBI(I(d-1czNx(j zES)P_W<+INWy(_1jD^N1;-dU;*6#;Kea&F$ZuxkUe3d zI7R^uU<+6q0tCp-6~qkmAAwv496PZS0LcKD8iov9|E!4L-3(>{u*S-dVEL~O1iSuw z+O0pP`2h_8v7K=D-9CZ$?`90-OF-u*-UR~+rtU!G zJ#G%3^k;wR@_mm(-``IQcn5$Cz-O<@TLQr9q_2B2<=J+wDFiUaAJa3RO8vO$2(!u) z(F3-5+%vWSnRx*?(a{ai{b^s<`8d7;syYsGKO7HM=-2~2CzgM9H5j$OP^t;cbKETk zTFM{*8v!5!rg>nsQ}+N0Ef{0~W;gxb6o!H9pS@%l0Y9X8>TAa>WM_a;!2M2p%K#kv zPU^oCcoK4`0a5l{QnTYVaxnEhX3=CKcD|ghZa!ONty6piS;*8oL}So zC)gdD9|jK?C=g74wibz16)#@GgM))ZhHFZ_sW-=l>YI8A4o;i^4o(;j3GRFTfjT(= zEh}qgb{60ttE(GOnz*vUJP7ERxtRl9Sn&BzEU^0U=;$IG+y(d#Iu1_bJXnYJ-y(wU zsa)Uy?Z2a>sN)_DTm)MS<4M|Isg@fzpi@t#>nOT^)F`N4NzX6u079sv#4wXvnB1Jo zT&9*KQv5h3A;!{}#6f6+3zjy`m8;Ukd&($Qk{UQ0m-0;lAHC)o$15dAn`t|Yu#VRz zZICWYRJW14awRhlusWI{W&?xP99(q4Z7q@Ny0jd(5#8`+dB@-t2cW~6X+mHHKd^Q} z&iJ)EuX(dyqjMsuQ8VF^rY_yj!{@L2R^A%fu7+-`5Y%X2DnUt5)KAbCj0?@{nJIMn zU}3qJ>*_3aw2-fpF5yO4RY5kcE962X5PRc+OK@aRGt*(X6G7ixA%33%O03Iv-$M+VF>rkRplC*K336am|epQhiAOcOy6lXuA#}f;pX7$y~S5~ zvz0{N*$_;@$<8lz0h4KWcqWYE#n+B%qR#@s{I?RNPztc&wH7w|-?rH6U&#%9PCRL3 zZ0PretoZd;<1&`}wuxaGP}j}<_ghQwgQQL(6EQM`6o*guNQxsGyMpRMT?<8`MU18n z5FfrNLv?g?@a7|P+%9o)mB`%vnmSw@fl*{v_xUaKvA~DPtk=82$S6lfb9wZvoY!ze zIefiQp{RUIOIIK?*b+)Xovw*giYVyaY%vSe+@Hy;Qt)|LarKwxl1Epf(~Kh1I^PJE zKr44>KeTCa4}GcAQF>eM{h(Hvk9}9rbZ23XKQSUS)uyiS?!<)tsLXa&^Zu@sSK1I< zn=sZqnpm7NZZ4bsi;6IdA^f1E?&$f859CrJlexgzaiL; z9Y~8sce<~Lbbf8eTnyOs-?%{BafM1sP8xGO08xY+T-zlTbE{L@jDWahH+GgTiNNFz zd~cI*2;u#x*4$Q;uRk#=YGTYEDWfAc0HDa;wesYe}%j#gqd8s2xi`|E(AJYN1 zd07JgRyj&sQ6bf~a*1vPW_(gOo*+t)niNJVD(_4BISF>D6*OE4^Jy?@zD>uQ(X4gR znDVS(p9^E*>*I8o+?i>;**(43(+eT0%`Or`<{?TTYo-y$P22>UJC}>@64!BW?a>!q zSDg15@2^t4u_nJ2FlA+Y71fPLRb+59G(%w6sH7dkxB+y4qyORQSb13N14$5iiZ|&1 z!!FHD|CzFH)eVQMw$QPtiI2e;#Hl8lEsvh?QWc8$Uu_-y=GAD3K{8GALHh%e=jsH@ zE4N7_D(Ts0n86=wc}WU8iQw%!GW+xs)3CqYp3S<50q(wAjw$i(7UKituSMF^K^*=} zDL3akd1HY8Zp?O4WD@0yTV-STqbwmyGrpJ(%=N$UGxA-GV9=H4b2GRFM7}4N;o!L8 z5dJ;#L4aUw0o*HaX8rNkX~eq#2bZC(=rqrRC8GG;jNzqoWg!mr1BozUmbWeN($9qP zjJWS#>sFHt*GuT8K|Yuk3w`)?SQ$&u^N~#z#%TeV}W-c%^^7P5GIRD)*xlMB@djFHW}BX|%c*$Yo2E)$$+*3))brlg*1TW>6ezVtNmL>~6Ja(yG=iWY$ zBo#(|b2~#~@_|u`vNmrVb>yP@lhTi!suuZ|@0!NbMdV7N?X4j7B)cVZA>!zpB^VB+ zlGX&1ZX~lc)vVZ}`#qyeaDA0gKCl{3OM!T3CQj^=wQTwfZs$6@#X%Wis)nFy`!Y@z zL7HJa>KN*$>5s`%;=?v*p3GC&V-*uYE>l%V@xJcAJP!8=2wQd{wYo9?9GpAn%JHHMd-3 zQiPxHYFK8i8ngaz^eHek{I;HHK9*$FIsroBM_h&jiM*_q24z|2Y{%i*o}6A2Mm{tn zb))yx)L$t1*>W@Z_(^rZat(4e7Vqh5MXvMRD6}VSfdEKFIH_! zpMpJuux=zlz?1MPYpm|o@X(!4efwWr8xMu)4^&&2*l#4nt{?7A%)K^m-A+mfxh9Gn zVjg&1HSy@fz3~lLQ56eCA@i1N zdDr*!O$|Y`*~99b2eZLtCa*$=k3v{N9&GEdBjWTpf4uYf8l_qHEe!_MohUtfowmkb~Qex_NXD5Cmwz|x#MOD6SLXRv0Md^Ly~p-yAKg-yvVyPELgGq5P6@- zay(h)@W0L>?zo2cI|KYS*1&5ymYg|Cc&u&P|j(13wnU~QgI zlobO`7i;U=SA0ShMmf7#xvzI#wl+`G5*QyL8?A^q&bMqq^yIH)7#OL{`@@}&YjL(g z1TjEdBSnLQ6M;kgyST>e1hKKQaWu6*I)VovUH)l=8^3kbqM0&lp>|D9IRwMUpgIg8 z!rh0i-d0R8sWkNJW9sDVSbNVsLNVq2E?rln3de_#Pxsv9ythc`$TTWk)z9ugTzm1M z-UT*(o2*?Q$8=>FQkV)B zWm!_JXOdnY6i8bB(xr<9-?&cl@_L8D$9lO#LoOUcBZuV4pu$O;qRjwN%3B4YHC{{j zad>8wiM^j@60nR}mm>M!-n0;m*=zh1y=0;okjZ2ykGCVTkBb|(44uU^BHSMHoUG0m zNV!xG$@FjfN?SlugJ1Yj=%xa*+ zcMsDHIc8bqm_(Mnit<|PC5fvMsc>(1#zu&?(7fmC#3dyc=Td7jbXm)_?FlET-xYoN za>Y3ygSM?U??F!^l+G}=xz7w+D|Vr?a*gU{&JLA#^CE^?L2eqnW6U$CuuN5`p3M~n zB>Y`rZ$U0bF#dDgZa%G@@YPZdx!uxYBRKisFJzocGYWyje2lxQf``||JQcEs+_H*ta8^_8eAXk@C$NX6aDFT_I=Rm6@uZcTZ4;eNw^;g9>m4Pt*ZGe=w? zWka{r9eoUxexBI$I3*r>H5WzoF2# z-$}A$l{71;IY_q{e(i88?EuqbM=@MN9o?S$8v&+~zu-q!(xU-i^z_&yr;6qGh{o!B z7^zJHcyXpiUoi$Y0y_tv7_Wd}$d}{VvN3apW7~PB z8wWgE7ILj|CM}8ylS|h!OphGqV_vl!vFnyVn7`LQF7S1w(uRrD-g!VX57JDN(97pa zi}oo)Jh2-=MtE29eNZ@=NF*n5VyHQ_<)h(Z-;E%O48q)Z1b0Hh)3wAI(v_&u*FTyh zE@xZc^B`^MocVaD^X|~#-6OTmXqt#D|DdFF%%*QI*y=;(-?L@T2($!ml4hB*1kc{F z?sqw+x2y=l^cs*d00jePo8V1%%oh+wk*v0;Eo9yPFaMV zhPN$f@Y{#ci`htrm!6s0rxX(=8|Y)97A?PDgGemg_9eaAAdc2UclUu5f9w{Ua&?y@ zFRA*SJAs_xzK6uL-4{TY0~=eO53JZ+pPbzwK6nCNU}K`T5^XVulejEe1__&=d@>iP zFEZ&zxP3O>ts61umbO@Nivsm51Q<%d_}2>d2YUO70rqz{P1`Nc{!iJWHsnG5axrM@PV9hVjBGEo@k! zy9W_BdgHD|ydx}U(=;mz))8aU3RQ$SlnS_mNu4N*xZ`ZW@X_*_Ezlku2Xv`$Ch_cY8^md5N z#<{J&K(yJ4%vDJ$T~_SbP|ifuupg_PRP15%UW*~lVE2g+uZOjo+3uGL-!Wmr#bKX1 z#2pK98a`;$<{K%8>P18+4835}el@{Jx{h4874KAK0mxI;K5pw!3o#xxCKVKHsp^Z~ zyfOCXSO?9EF$R09D}2gZ2DNW`HT;*Z5Z6~xJkC$;z6LLkBJaLzjF!vGLfzt_m-y9J z?i<10evz49NQb^AP52%7{tFxvwbsvnQA9d#tRoE|w{>7#|4%)S|6noS6>%nE9``^1 zo!A}gMC`C7lEag|VBfY5iVQ_bVqrE646E|JE@eS4$3Sz`NXu`dApUOEcfD3HygqB5 z$frk^42EnL`zVruk27~m>+YqDafRlvR2Zk|BqHD) zq@)bIT_d^rCDQ>d@CZ`NNOIJpvITHPLE z@ibIxB!#zVaplqz(KKbp*iGn-0j4=6F#)kq!SHpYpUCABP?05l6^u#)Ja`irGJo&M zu$u_3zfJz!x_QBlkk>6-S}yQI;GPdDe$jY_o1e#g z)MhpjxA==n3ldNL##9dn)I-} z96w{_!~W80Ed?b7?YX()eywsXRR!h?70o?)>8)s3&){3TI$t4FMn?to9N5Pd#Fh^TL_<0kcz;^$%b^fG~An{15Tt9C1I?blOAxN$29+;&(~|Hk#65lp;TZZ+!(& zx*Zi2kbYo)I|`t*7@)KV;S8l+Xh(9hcd#xX08|1Y2~O?rQ;wMz6l{FF>B-o^6k=x# zc5sGz{gkQCb05(&3&TXjmw!=A8CX;U7+QZ(gq-HOUl)dLTQP=pp-&fw)h6g&&FHs4 zXbAn!G!AA+F*NK0+VyanE>?LtQ{U+K@Lm5_;({UWz=Tfw_#zk9wTI8VWv*Y57EHL; zB>mKU@JOw5EI6LzLjp@xZ9jpTj>vg4tQlv1q;|{#9GubrS8SY7{Ruy>VEiEVKSL3` z+00K`FuH|XL9L3}v(y}KAU^%6VYe#OCU96+K>0mVCl)pSP!0<73kcEed{oU~q>^v3 zO5Ivlir%nn7Q5Aj@KDt2pJ53B&yy$2eA4x^CN!G3qn%rIOoz~4&y?~DAre*a$ zE_o=dSo!N#-r$X#i%kCFkDHnDk|M&teUmcka78c35^A}1dBfyV9&PzV4#GzP75H~t zI&Yh9Cq6*&49xTuo439mX*L>AFl>!VkH=OvZ*%(-snP6Z~1boqjmnB3GTYvSqr)K*92@ZD5xYXN zwhjKvH@?q59%SHGvfK~IDSNN9R#oXuIAn7pGk8x47vFk6G9uZMlBSh-Y%+GiO=x6c zDTwBs3*vk9iyp*G^3`GvtK1g_5VRkeG`(KMwhoTDDb`{VEyc4SW@D3tL2toUmR}JI z2z^E(58lb8GQi6uuxoXct!72dy?urD$lN)T=3(3RBy)*9=Bw#I@eidT{G;(zoN}bx zGj|Jyq-X1+Rdc?|`qEdfd~(-?C-Lxd#JTW#mNV$GGjc=mU$WBWm zVlFP+e6JVXuFqx*;it!5rP|V=+Q2Wm2#7rn7?OW)-e6Bt2WNZm&lm@eYqo7+LknFG zs1MpG3wIev<_aP67$3z5A(ObGkW-T#?m+5664mh4VtIfat#a|`$U@O$C!{I^x&AIK zU(9SU;ea#LGUg71%O-)wZ>L1~7GJ%PX!E>6_pv%$d0EcVH0C>E%_VS(~&zW6Tfd?qyBqF4s^1QxdSJ zG<}4VsldK?om?96MW*a)%YJ(cmubYr2V;#sP}+#(#_T6IrXK1!a=zOii%U{(RypXA z_!u-XFhzqy>m$=h>|kB3%25(H?rNEV5qsTdAZRbhZQ)355q-$iUpL$Mr=Y71n03uY zkn9AJ;o$s%dx=ti528;6&2cK}W9Y zMibd!Wbw3GYJ5U2M^W9SUi#>(u%v=}0znwU#{`0KDM%Z>rtu;cAY$tt!*N^v_N>f!+uX z2kOOoG}utlpxF^KT?L+TQJpV(N!o85N9W-v! z1uA?AFnh#ZK;DpO#%U5vPsoiQm1-71-jF=pmBX33OK(x?bvt>RZYbwPl4z2IxqoWw zGnyR&+}Y7UzQGSXFS-P6=y=Umc_&iTb@=a3ldOV_cgeW5)t$t;ZaH4b*>B!z<#|cV zf_$Yapm7FO{{TZFC{wR;@!p#Dk}X1KHwRYkm;$H0p*o|JOx$SrTXA@-qn$nqBJXtK z7^QU`bQ850?Q&#z^7OQ?{GwkUScqaOynV6|>t)v@qem2yZNZE5wj}U^Wxk+;V^;WW zCtH=kixlI#!|SE5J&NP*E948W7MFIC1s1r^O{LMTKatUU_}-224SS!Qbt1WzSl#lr z9(Vp7T@rNX%M8J|8)|$ibpBF;A?Dxu3l9jcDu$z93qVnHz>ZKUHP7i1U}e{3%id}) z$D@ns+NGFI6ytk-v_nq)=9X7SWzAzWo)t1&&AN=F%&6GKG-7=n^4(rG56w=72+0nO zl}`Re^o#SU%l9W_^(axv64&)^Y~E79p7KM~QyyuV&MV3fU(u)@Dt0$oAb;L*o9*DP z$($F)K{pX;ii&WPzW1~?sh?oQu7#aSQi-uOt2KQ|HxGt50STTfky6QU=4EL$4EW&_T?9PaFYs7sP!fWDo6Mccvb8PexU$c@zK`RuS0>R zx}}%*pS?;iskvqw{lVkql_0+qL-~u5hsoja4XrosPUbdhtx&JZW?Cb7x!typFy>Yy zc{5-BQC6mGQ8)zb-=&%2pEl-n^fp#xdj=b&A&ED8+Fz2l&C!oZO?T5}EBvy+08T+} zT+a(Ve+$alY8wnbsZpfK_`WEaHGwbGQM6%Ty6|V{YvrBq6FTr8+|<14X-ti6=T}xd zKU0i?&>@Pbx6X6VC!|0RLViE%v6k{AnM@&$0sd%va@`$=MB09GuFe~_hO~`Dx{SO+yA8A|lwM!rZ zVHl-_`p|`mzP`pHb5J?=yl0!~M*mc>Hr<=ADm%#2r| zxrwt2Yu-@zcx4uuTz`s~ndS+)9`p)2Da$X52wgo#)vK8u^MviU8)C)%kQ+rBD8F2} zENvF4Fo(-NJ)o~;`m)w>075k6b;9SO6*R=6M=Bk_JCxe=q z$1Cb`^a?)Mi^D^M}rVszDQj^87htaC2*VUTq z@xm{s_{pC1)c%_mke}&Z{KM_#Jdy{y8;^4x9I!{C=$h;wkp|F2?@9^nIW}z&)Xk1i zaT!px5FeWL`>s{gA8hJbe^PKqy^hH<-$TLo)-M>Dc7DASZF$oXrA%>N0;z4aTAX-^ zgqDHr-V?DAl8N|88V`5B`fqLigzxH=NXNzzA6c#Jci9Ul_GPjhRc`2KcPm37BEo|F zDpod0t2p3QB+I(d4z*qEAncykLVQaJN2s`-?baS;pcHJ{snKMcq!vr5Nyop!3# z!_5uJzq5WopwZLAg7mhZKg&FC)~Ci|nV(1w(dOzkwod<_xD3WKYK84k0>JMeFs=jR zFWcegc>Ym!F!usc!m#O)pu*Fo0 zPmi6pi|fFpmrxKT-Za5SE_CwhW%F3exfQQw-<T#J(O9ZhL^6L8F+0dHUllfVnIT=TM0F16o>f%=S?t7X%w8?EvVg1rY^g$&JxaqkURO zLV(sv)00vyfetHkdnBRclJ+9rd|m^yx_QONFb{f>eA4*02cJ_ExV{w-?{zoXP#mFk zuNV=L`sd4gt1frcX-{2N@PtU*8GIKio*T*!_obL}k732iZ{&jxMJkS9Xs0J_tx>ZY z8Uz2`b{1 zRnF1$u6*HKXyN5=KTmi>pvL!^lNJnxwTqFBh)BIdfAY&{)q+Kq0SH$K96iB{*A zGVIgcD=|2l;$oDJ838-(;!qVuXaLBb$;g_xFl_9kgPJTKd@{I%lSO3y-PD zZ_PrL+T27TEgeIgh{1|9)(9~EJO%+r)c?|0CeSguf^!QpFl7(F zQf_Y2Xu09QXlR&sWRAa*p02hKFC~5zNuu5OveAY1ZhA|_=vNy46+6$KT%o{`8{~V| zSOEV@^dWIG2iwQVb#eYl#-PMWNE&0=Pr7ojvOe7WoY z(7hz4B$7-rsWH)jZJDW{R#9$1$Dr;3ufl-GnCu~wDoU_?SW0-_ZKXVWf)$FcCs(!x z%?_WpBJN~I^2AFsKU%RRL3D}7Lc#f?53p)u}bxey=D&db1bNjXT6 zWJ)_pz#>QIQR}5}4>K3kA$P4l{c4hEfwnhq+r8FW@1dt5eH*mN)n+Yug8dw8e;ORS*uvCj3!Ljx|XtOuV=(y4rGZgmjO`AwET4A5|tNqaocU*l90Uu4o+Esg} zSEPpGuX&hoXc!e2zKFlbZI$G*HOojrNMdckGD_TbWE0aF9^5$cf1C3fS}t<%Dr%t% zWPewg;!RAz?8A7ARk1nFfz<-^LH*Gz&N)U7G-p~RqOf~UIc_aqDBIsPxFziA&LH;w zk)&f9X4`7Zj?hFtEi1dhyXAvQ9v%nFP*Tp%*Q)EXW5-ujq=E`qZ``PipV<@OfIpk~ zV1C0xOk{K)NO(#>+e_l_yD`9{Gr!;*x0q+Jj4$osAJUY|KDx!(lAmR!kVcu5rx@zz z=YUYjH3XrMMP?qyc$DH`1&@h-pN$KLj^RBEWw@mUj)nlkplsh)^R;24D}9s&@dcS{ zck6?kgm3S%;plZsqlOAcYSYq!n_5XFObH>^E0Q!PE67a`voC#(EWRH#?-)R2N!}}P z%@D!P`?;fn==69=lF^+~H?cb-JKjgg4L9d6p9eqD7y(83fEX+QF)03@h~Z4&IPOh- zm&dNyq4><}EB5<$#dkE6Y&e5)Ji7Y(9+`!>TfbkKa0O@QJ1n%D+K|ATBB{&>UIHP{ z!$rmCh~-?8xI2z^FjznN<)&#a*%vIIbiR8|&=iA3>gM>5MeRv#pu4d};7T*$>$j(@ zszs8oKw{d+Dd1P08&YqNy(a-i`@XgHmd4+%#wxpUiTYdaQRxyEbUM)V86~ z+t;t3enNIINgA>MS-|KATjsWsAm6G19!*(^9p6Zq;2=; zy>>I^F2=63SI^hwdRg!Sqx)|*cx`hLkqRsZ_y@Nfc2LQU$J|ruT&~(@D(uGRv}lFE7zf)GlG?X3sF{rx`j^ zBGD1Wp^7LWI}@a_1eJdJ6?68939=BSm09auPkOtnqlc`|WR`83#WzFUKOhpbvSDOO zY+-bIVQdLSXM%-ND_BQkU5e4%y^#s!+@nO4Mt0$>Ix2I8Ng$tYTB@qp>Y$5~?VG&X zBIL)Y#2ertW#oPMs`9C^_Cv{vw^Lf=@wMMm)VxG56ZY5THjo(_EEmq*9m$aZz1@U zkNnBK4PP>J6N%|4i>`$7jR4(^7gzSX1U4?#EQl81zxVO6OtnNiD7-)_9NQfqh3s^T z|FdM68?=b>HS5-%^hdbLXcq4j2i@C6pL|RuXJriCo_!qs9I-ERs8&tgsg|y4hj$q( z;mfTYqo(+_B3n6gBacTe!74&gRHOc3uCk%K?Tqqk5YO2=?@F?`VoIfn<(LL0Z3QTC zP3q57Gl)Q3!+W4n1_G?vDfZ6vO!T{2^pwTNouK?T= zR-ch^MD>g|zOp_6V_@F>@F}#Cx^$v;Z;JfB~yA{@Tp{M9`05bDpMd z`T0eKN-f}?HLM!xmDi9{Qt9bA=YgnjM{?xCF1x^Wk{G~{|NGL$)dqIM#n=sM$#?diA|tbWRk>DO`KK2t zkq!!Hw^YH_Ca>dof(@*T2@LhWH;>=f{-KEzym+39b340WWJHb{4&MVv=m5t55c^Jk zjOcp;W{zRM{DKWHc=s@ZicCPaI8D+;UA47M9$D@-CW-x4xtI92U7GwiE*=vd(s#YV zn)qP7+%N$ia>TLP4g2h&XxtJMPg;UN+EP6OC2f9}!J^gA`eeQK(R>(sWnu1?4yci> z#l^jRFQ+uHoNp!41d3kBy`1ziKc^!jvBYSHv8DOzWYj(Z;aDQtKBje4o~k6xd^--) zYVntgKhq10`9f8p)eL~~USKHy4>~yhC8i(DpWlCcA`7gLU5TTXUxZN@hR(xp&r*0a z73?n1xa&zlXz@Nt4UBD}mm4H7jDZ+l;?L9nz8$+^(^HlpkgAl}K&cKgci(*c|V8!#$HZE zG@x>yJx&7QZWNhodC$unro;2%5NcVp6#+zH_HZu+jlv45f^&@oqSR&8YiD9E5@2CO?*m#>0BT7Acp?4wf$h6{ah{E9 z;C^9P9}i)s;XyehkmehOcML|8365rtdXCxhAv2G9Xv|GaVe{LHm>%!Ye6^V_+-%;& zPc?W##UdFEAG_3$G;{L>-OWNY#4J85B!$A^7}*trs*YeUv^Sxt)&b1@{Is=>z=P}z zR`}V?-1S@~kM>ue4sT$`U-(wZ;hc_=9=}GDxSeN>|J8RKql9N?3s>FoRbS&zjluYT zrW%h33omp4|FBIpf0=X6^Z!F*;Qs3vFF;s;1j0R1cP`Z&vI>P=HepvaBVo+z**Qd2 z$_-a+B%ETydO+aVPj`<{iQHadcSosU%<;Cy9nL=G2D7bpWj@VmE2I!i(x40MB~LRk z^F2@qXwiCiMI&&f_h>lQbXW>!!lV0()GK;Rya`^#etA^8up~^EOOU-wCBzyJD4h{`$3`P00E@HQ2yUd@q~yUsyOW}{|h~fX9*Hy z+|ubme~B9b5Q7Wwq4~c@Uv6XAmMhpViMg8sKfic_!cTIbLliq~AEoqe`W$1AG&~Qr zWAo@WW=HzqD+$&4>EyEFXct&(4tISRN&A9hN*BGHg(Y?>;iG7|6!VJBjq@+=TnX#a zfw(+cunW2fHM{2c$XcjRSxCj8eO&k!?bdB|{cSzxIloe^7d0qv^pY(~lO(!EaI(wa zt&M?I4&(Me`9?hN9{6%S@euvIU5NL}4}}2|Km#No1-$>Icbx3{K7}5JF@iX-J)=HZ zX0mwix%dwH5?p4Di?L9xp9&|S2WM~jyd~>OlT~tU!+G>6W}HKGa+F4d4@#UQ!u0IX z?YAONJq(@2oTG^<^&qLZ)0Q!JFGRsZN|v?-y(=r>++x!%}r4(W@oV%t^o?j5T( zzjj=jVag6`OuqaAeh=o54>&i9?0wGcxPaMS-Z0u_*xd|ffYJW}3!h{3jOoF!uwhIs z#tShtsjqVTVe#}6y7o_>U&|R~)Ivt!IuL&5E_OM2`PJTAA>UL^0{@qo6LG*Njj2l0mge~rL#wo#} zmL>cA)H;BG?k%aF=j5%FcRC~yg9(~E;xk8$oRaTN1t$^R;B|@o(wBKjm)4X8F#TwS zpfBoVL~rqy20G;C1RYE->0Zq4$5-!4k&Rr~kiM5W`GI&R7XAa-``l0YA0DsVG_Mw9t zJ4$BRkoKYF_@b-tMi3Dfn`W<9cSWL#xc}loi(^*!Q9?5AKZuhiDq<@I(>qAWHcJ zny+{i)U>hdf&ubw!udCgH(efUG+{bqzn6h8Ax|0;%SP8*O==1zbTg;K%$~u`jvh~5 zl;I0!9ND*cw2`Cc>?NJ*c8|uYM1PcZjv2x9f?A86uC|O_6zSH}aEbSVN^t3GnG9%e z?Btq+h%bG0yJvFE*k6y^+m5Z4?w%9zmC7ks+dizw#VKqj+CaP>VoL-LYVDc+xUxmg zl2BE?=&Fg}614czS;U67L7FjlZgA2_P&KxIKM6LR{75dwvfUdh8~-+~?hOU{B8twDt~+j> z5?!t2xRS3pWfAg`^js0+J^jtfQ~h6js}vw0o2H z6zW43k)0c&eHedg-T4Q7sEuXH1+ zmZTxJKAnPV7EA1rYYKUfQ*W1y+|-_9f8O>HnT1tlkku>Ul5EQBL5|Bk*$>LK>zkbK zL2wtE!z={M^`}+)lR1W{w6gIQqaE#e@QoN%$$DCxyhFc&{nO?5viY6Qw4t+DVIfDASCCo)lUbC#sxrwEhO496 zqPOcR1l5{V1DAiF>=X zdg1XtJE;)gxBgeAXbI-Krj_?AKi!^~K?fsl(*)*Nzzd8`HWf3OHdJ0a6J@_H$^^hmo}Re*Y#fLMmue}d-qb4Gj@vTYC3!~Ytrjg zhtDkBEzE>o^4&Dtc+!L0Wnys?`Zi&5d;Dl)$i1;oTwht;xV4G=Q0b9v!_NIEWKIDo zg~#OHwmlcSLK(F!R`BoP^}gfSuyeM47w}F6Pwk?%0%|n#9xbweMWP#ICz z-0Q>nqOL@4^yhoH4zERNSSI_NdLC;Iyxh;=|Az4sWWb_iy4EE9C=eyN(Es1`R{kMM z{s`x%crX9Pw8{bxmLCSrQ45#F<6A5s&z=_HOueGy;*>CLAN_^v_4XJYy<-?i5?`Nt zw2RJJ+(FGNGr?W!;{=|r{hV4Q2s~X&R@KkxptldF?FL^{I)kW(GNOlGSyA_4{o9p9 z^tswguM}DAhWd#u4>(@E0+r}@X6ZV#T{dklkCAL)`U>@igeE?|GEqssX&}mfS)wV{ z(5`kx_f-aAm;Y_;oR{0tm4aCMyn1#wXI13xPfCo4Y$GCv7Uo2c-G zgMQ*-cdXX;;)Uo*>e+opY(4&C)x@Y2xPDaC+|P>NvbDG@)yZKfzSO&L=SHxuhEXM_ zRmO_b8Z)k6pvh)KvF){MOK=h8-AFt;sh9aU;%qTixED-`adVh)y36YxiI(csYNgte zrm;j8>#qA|_F+X4kH)7b+A7dqqs33UUeYmf$9|8q#7vAOE0KDCr*&`GS+ezWQ^=-S zSB-+J_Ikb8Yj(U2YT<#Aw1_W_<5%yddG&HMf608q9vA4@FhSVMa^bVMaZ>$J4;k1q zQ#6p!NfQ3*DpIwXeJ(tNinVk7`ZmViQciD%`OWr;8iNI%Cucm| zr+=>GW}G9!6-7cp{IPFub+h~db4cHW?1r)FpPL#cl#hPDY`91_U(?^rBAhLU6eOsy#@{1AGb#> z1VL#TKZi1ZBvrZTwP3nJ9JgGFHkIO~ndrk&I(E4=apXhnRkp5yfQhk`oJS$W6h+iz zRU+hpna{>9uL=2GH9jz8se`8`c&-&Gy6q;kvS|X5?iBUkOAG^N+CT*!FGd8C zO%6Hcr5yoJ@~#p?;}x7j(J|@|*$JuKg;&UPZ{_$2;1vo&D?VMf{xG6yW)wyq(NFj? z+SaIFgjkx=y=0eGglX+b+o&8t@4Go2>D3j}Vy)$-rx0y1S-MoYd{4!)DRI>&yo5X9 zC>Zzn1t+HbXOSp!AKIF=F}Gi^3W}N$^jmK9MT(SPKlo~}eke$;G|Ch2u$I-jKJ|pE z`l)h1`ji_D-$QtYD5bd2UEcEI;<%fyd}62-p4MgrImU_~QOD&@dwxdXr&#&=wb#=n zoHvUr@CiFj)X4k1*cT)ej~0@~=zNwQJns(7X-0|x;^!f|;O56D^=o!r7}7ZCzI0dc z4pLUxiH~lh3p7PaUKEFaBiQQMGh~YuZJ>u0u}`pmv7o!-6;DA>`y7~AZWpzIBi90- znzxeJL)L^FW8iZMf)x($J3ArN&v0P4FQxm*GMJI?5IZb4lshIn%F-I&(LOEk58j}8 znl;@^!t!+S&DZ^vuIJ}NsI`C#~t}#oft{n4jNNXUk=qg&qx{0=FLYtzF(}EoS9zL@Pv1nWe>5=;xTGFje)n& zaUm^Iw|MaA6|llDm6BR6eEyb65S@!Mu^4)DMYVa3rM)%&`jtc~FVx)j$D6~Q|4(ga z9aYuxHsAw-ba#Vvr<8OE(j4hjkxmim4r%EWkQR`V4y8k-LAoTRyFvI4_uk*-fOx~} z=UPV={IQ>TXZD#rd*+>I^yZRV1^3YHFleGZ)GDJ!Z!Xh`;?zGxKd@PF82ysx%*}^# zQdF=klN&YOSfnoVTG3z{Y5jp%ohkO`Te4vZmc6VdkB_-E=~Pjg;%=t$WIyN~8-_0# zEyQ0}f`YD1`P}cTPxMF|I)b`apKiQlcR`M(Uqmw>B?G>+8Dlp+;8r_+^Xo^1bo*XW z?R&eM2V6a>HRhNfFG=p)+fg9`|nc?qDzuMsYR`1eM`7^n^>Wk1{T3wR(Lo+ zyTV8Tr|j9%y{AEZ;lUJ2=5sG-^IxS2-Q142J-Z$JAtjEpxfD49`2nE`Cft+c4SJCh z`$%&b`ra(nKxWnLwwLk>3=?j#UCBlf5_vZK#{#wQl004*Z9DAEj2=6fA3z4YY#wY| z4zY^mi>7ZQR*+4_@aXgvGTnPJROGCJ8Kf2cF2B^_SuEn-*PZhD9?`DJ%&xoh*(xcd zaZ{vAi)!2v^N4IIehjxD+Swv{_!^)}(860nrLyYNts1HrP_&b#5IRx@X?KA4{rI(k z8I3OHizV4g)^7_|EXG@Iv#6Ff42_+lwF)u$dG|W&#$^V_OKS|kYIC1)rs*bhnV+f< zJ%n-2sFZUa^S*oEU1m7mrCE>Fud>L7vb!VHz+Qo>{0J7EJW3(_&^l|&g5=;B(K8@E zTx%dBYouXWZE=_0j*VTH_J9Pq(R8zbc+#{R`-D-h`2BtqlVV!qsa@3>*bDLbfaDD6 z)!YrxQme&pmXE)AZTr!;>Cb`4s_LXEXr0y7mh`MKY&Sbp_$ao=7r8+t+P3g{aF}

)WiNG1kO{3RRdgDrXBLK%46+{RMP<@$ ztAzQXZOr@f~Np3kbRQpFopmwgSF(mTTEtrpl7YPyocB z4=SHus?4Et(InEb+^FXDVma1%O6jez^j=q| z6N9+7Ret6vo0iCVgJHXm$lG}MGLBl8k1EIw)#l>Ae9E0ifhgkRTt*Zo_yRwr`y_$^Lt1hFykTneAX3L+y7;vC_n09h`0ZHCI0 zU&Y+dMWp`EX+as8j4`6Lx}Gbnn!?|H}?Vz@!Cd`6uk;0set!f!I` ze@wT*CB7ZuktP<{5%S#PE6&Bk3I+7_3ZJ7-KA*jL0{Sri-L&fOUoVqCvlf1zFTD>0 zg1iy))47}_%5;*9be&!IdlgxVl(*IXsI9Ta)^{oHQ;sDKk z{ZYcXe_KR`c)md3Ht_8NYxiv^6LzS@skwl;OEc5wg?txQ<8}(_p>BZIqgnr1A^%K1 zxp>wms>oW7aia2r+-juKLljwNLlQ*Rh$EsNsU0ak#kVWa?eb!8VTD_p;U0t3Y7~^K zBQR+iqT#-cT$Tdafd#z|8~Y87G`Y*W5by9XSDYw`cJT9a<7~c~3r;}CbrUT~BdH7k z%QMsX8+^=Fs_r>VfXr&k{p^dL7+&6T_M6hK9;SKm_Je*)y#j3Rz>V#i{odfzC^NCP zS2=@5n~j|ZP6|%ZW!NCI+Q|Ao%Z_}}jb0HtsE^Txfno=GN#xUB+>#XgdP{jwlXN9B z+gfSBLTVBp&rGr>sPATni$+k=-X;w+c4i(%8iq9NJ$h}m-bbU!Ty07d5LI!z@c{>f zzT6Qmp327}zB}{wo#stqUwuNY`VtK>4(iJa98FSSoq@*`Owk z7rnhi|HL>~ha6~9NOkT}!CtEB#$vclnM0Bx4kFWv-6pn(no!=(2uEHIzP2x$g%m2i zYwSxofqL_i24__Y&qMD*pJhhqd8FhoH1}OsnPz%4S6@kdp6IgBpYfhsa5khubk!bw zHHF}V6-S$m@*!C(*KBI5>rD_6&n5a$&Fnb1rOr+t&co&pEWSn^()h@nQ7eCFB z8GAIF*oxPk2JB=R(q^V?EAejN!<5KO((lzk6k|2cx3&yrd>%n-sZ(!RL2@HZmZNkE zn|s~{XCS~((xscdxsFV;N^gUoXPmB2Kmq$Eg)-GQly^sHOBD)AXP^5ORL2LG1~ZS| zXP?rQrOXwrc;3);cHLL@*7ndZst}px`=T{t)}a)5W)3o*eT9-h3`7+nl*U*@q zcE~y?O&0?Z_+)ZMscE=)+Gb277$Wg5&CG)wyG*CM&QQ%&1Wl410hx3y**YOE zzWt;mel8@!WL`7=Huu+11AKe26($*KsL{^&JA85~CKF;AH0qd%gauP&#*h5+2r1FC zrjF*tzRs6+))pgUtV6DcGf+=YDa6V9*}P*w=Uef%)(RX(OSiVkswYsT`Aiv~oh7bz znkj7!MM9G{_;OmCWpNuI9ae{pyLD^&T^m~N*Y_nKF>2^pU)XR zFP)FY@$-i5gfIrV?f!?OyK5`&f_2fTYd8E<7DqehT6cZrsH1kQzhy_9f%!qsdz7eI zB4ISpB#a)YN8tr^eSbMs{d>1}xkvePypsXyRc7uY^0&F4-AMVcv6d92_QG&R+#hb!V*15*+@#b(=ep6TE8gQ zkRN4~qHLwNlZ)@yLn6AXZ1KK9^5Yr&~hCzu>(|Y_l|TU2%x#!!e}1{Ar)dj zd>ApYyAY1%ro|MEP;^MMCwbtCm?vyiN+JIu29x&Ys{;xOB`jvB`eo}d**5b*(-}1~ zv-}+Sl2Zy9`m%6a!F{zmW)@^!U$->u5>+Nt40@U|p)(lLM#D}QT1|uYQ*bbIiMX-u zZ*{d5Y5}z0`ECF^xYZNxgJ$WG~h6JjXM@3|3`%Fx!e;e#QwK#{|rLPNzxP$97Dzw2#_ zbjSPw12P9L@3es#QYSwDHY$X1S{6#7o=!(1lxIS{r(jTiPg0q_c-Y~%ejGLMEe3P7 zAyPwHW36z+jZVJtbW%O1+tLD6%q25irG3TtW0-KdxgO6rNHu`)ijVPjCrqa@;K>F< z4q2f>^^FkqDM%s>Yx}(8ww62!ChgUZZIRRldPaF|T6*rYw0W~mLj&zfh>gU;Wo7#+ zqtgm9@<}Qwh{))BpQE_$l1Dxv)BScozskDbS^Jwto@;@M+uX~~!RoeifuU}$`%$gt z5XRQL<#T}|+g*be-sjU3C#~YI(StL}8>68L+>*k>s3NvP!i4+={Mw`^fFc}?_FZQ=Cs)@JZFcXHG9n5vHkvg9emG?9(_8c ze0~!qth-(-onnrocXsJr+F52GF=&3mpxKhjqrCp^LgJc3Y);R#*prhdQkz!t#eUDp zQe^LkZSs3V+{NaKSc-m;9GBFmNH1j&kA19JQIHdB>BW!khiHzd7y1$ z`@DEct-CAkp1m+5=gQ_mVKF4mU4d{e_)Ine0;Bbo z$W>#CI8Pa-1^i%pE}QYhCd$-m3DXfoIK+&m6r=iJ3xt7%=$05Q!|WyP$@$n^MgM;9K+` zz+E18bL%LJ5P>SaAN2X#9FM=L_&+=Q-yCV@_20yT=(8W?2vcl|lTOg&iG(hq1z`GO zJnnC}^|~ppbBx&VL8y@AVHn1tQ`dSUI&R9X!lE?DXf}u?VrPbFrY`cxz)A5|c5dWW z$i@UXAM7ljMq*+TTZS*5DeS?dn>fKY{NTm-*&;t3=^t6ph&>SR?c<0Vwyt~6PP_dv zSw@%&#|DpnA{eAlvO|x7b+JRqvn-~0z)A@(j$i_>^&r^77(aZOLHXPAC?Uoh`Cac0 zCw|fPjc9+J3Eg_V`ivWEJYlFNDwc}I4)RXlBQLpx3$ ztPzUX)iWZv*S&6n%nm~51NXlXi2mV;Xa3{o9|QOET!Ph?zgghj1vP7@lQD-7q9KV` z%veHE8u88Q<86Ku!NUfLjf&~_qGeMgf!2d(0tuyTSB9P?=4J>Eu{zjchIB2yD6vk@ zQbLF7GGxJo&SHh86aaRfQU<^w1H;f<;DQY<<<+d=Ra)|BX>4I%(E5^(wj!^^b{A1n>?uwU92-I(?P41{JJnr&C z@ANihHF%LpnO{}56GvN9{7Njk{Uhqb@T>D4#QCcPp``M z#ifTh)F=#Q)Tubi^2~FK`9EchgQGj-g3lHqSU_m^j@?-uG!~9x#B4&vV2t5l#Hvoo zQd$}_WrRdd)qc(<8r>IjhaAt{IaA1@>22bcnTm8_sD`R_Wu%dPg#N=^Q;L0HfXBT+ zKnkoAZ!Wg}Kqld$*eK<&;}S8TbF7m4qa8rLPvwmhrUe4A98$5V`}%N0`2q*#1kS;$ zmNefPsDdCe;}_Bn@(;%Q#1tEBgW{YtUri=9vDeAx0L?yp?zOnM3^Lm!ZV`JdsvoOCT&rUtDdTQZ(i)hu5DAKL)>W8f@fb;Ox0Q=bLJ-sLhO;k z?whJ^Ra>D$0jy7*aA;s7s$6GtmCXI5AuKaZFFb^wtbKi(FZWwY{jKkGyM^1Z~io@C)_y=N3kKoTQLgDn(=wORIP zO2TJBt>|_Q1Km61w)6op%*}Og5%BYY)vak32anKQM7ye7_U<=EnVJpF^I} zAuI6{Dc8Q|7ZiNIKqhEF%ZUbcu!R=RP^#=Slm8e!d=V;9qfm!yu^krQ-o!TOJ&Yp6 zdg+6CWVvbXfySnz**A>Eab&tPWUnhm)3$hP#OauBW@p)k*5&PNR89%)WBt>_fQx9ip{)kRKC1ewo#T@u+Ub@dhA3 z*bV_S6L?ptdv~gS?Lr7dgU@-jWh1NS!H7j$xyQ z>d<2A&z0DDG#4@(^Gf8MkNvUPW*KLQGIrhJSAQ1fk}=DCY5#mYQ`b;DAFOPoJq!m_ z5oYg+dQr=;wLL;FQ%}^yFxVtN%_Mu@;EoFRtxP*%6;@%-NE&xZ+#*P2Be@Pmh)-#( znxSj>E*-bG<)DvGQixqtYBQ_ZR77cf6$BJ$xQHEh8XTG}rCyPjvvsn*GS~}CRb|Rq zHZ$h!=-SR9!RlL)o#jDPFO8&HTC8$kKtEzLG!J_{{9UL$e1v0pwjOVwVP9{cNo zJu(-BlWBMSIGu^8INyWai1pOS&=>cFfih;VgxuUn{48a6RXtP!4(bLh#=#?w2>Tn`{7e8cC*oH{!`QjQj<@wTLy)Z&Lg`A>d85b;>2 zWJFbJ$CR2&PIyei_`;pUTNsr)dANH9ZHW7Ex6Fn}WkRL^tXzB~3Q(cwVYD7Si%M*Q zC&ro(YZqJ6x}>(GQW?2ATWObVPi~Ou+Qu@dZwL}EhGkF5k;GDBaU!;u6B;}~G=XK4 zzK7R=Hc?naRESR5O$dv5(%0Ac`BMxeRZYR-b86-4YHi;G>k;EFXf(*}^yfPR$7Ww> z&v;Dj2r^%?MLso5-@+pPb_=%G(=hDV%Rj?$Et-XS+9ly2r&fv6mQ({hzzL$Z4}%9g zBfRve{P;yKLN{iKG>o(5gFZW3x3hQc7+irloaXVAQ zg!&~5JSL0Am(53zJC3fkTDf2AfPqNxIj$ZKr*})&o#>lGyaewp5c_R@u+a^H!lN^* zB>_vT96cZIOheTJKm!(QXaL~c>iE~Q3cnwV^S|Ma?$amFEN%YCeN!4W0j)~9Ocvmx zi^h8*IAG1Dpo+?lL*a|k++(3Pe$1?HtiMWA%DA(h*xwwT+X6QXV;slxbl!I8sfaYT zOlmo59HNnr&^$CoX+*jVWb`b0t%ryo8%8nnz)AM$r~EH%y5jT^7~I5B48l~Ju$1?t z)rl37$c)HE_q5>2fOzj%h#psTVpY?0Gs*dhwHOTtx)%VwzAEc0KNkVKx*^n@{qckF z(u1yJ4Kf}5%=Ch|hY^p2aCPd3)h97xx#y!z?%FY+4?cP-%Q%p@1cZNETg{=|icsB& zG}REJ0cj|FBM@6UUt_R{px=k+RL!`Dq6^!aylP@_C0f@dYYj_C-Yu8(yC- z;NnJv@eqNuV538Pv7h$*SsamaSN<&;LR>3tr?#}6tj7mfhv?R2-0dMqq^#F zS&Xip3`&aL!>pqpX^H!GTX|v)VU!?)ZUnPE)W*(}AsCS$W~%Q?_81YUJ-+>N;>>+| z-a_Ej*h#{PN2=ANta_1Ez_5+L;Ww9?;V_PO9AafHsgud~kZznjY-;4kRHz}S$|K)j z2%#P)3V$cAD1hQ5IB^J}_@*#!Zj4_&bw$8{%!Fb^z)<7_>=m*dbgoj3o5=?_P)D-^ znyaGv;a&B|sQLF(mOy6>=BbQYjNV0c`Kl_@0cji={=zHSD2kNp4)n*& zph2a5M7xPPHhswpvvk*)v{-IuDov+ffT6 z5qRhc*nxBU9cGIJ(lOS1>@v|d2*MAfGgYKnZs`Usob=7z zx8FQzZbOZ*TmN#CzZrl7?AdnG^Lzbe3{cHa?4%vlJ6O97G4^+MjvZzk?rKzWYSQD_5qEOC8#>QtFuxUwX7v3U6yJa4!dpn+tpKSohwg+pn*WTi9X{5a@a-2zXL|9@>806X<&u)bW(eZk@PAX*2h7!61Qf{%5as))57N(5Q@DC1EwWBih+=y zq}1@@qp;f)CvFyunqwdn9j#Ty5qCczYGx+fePg)4n6z1kp7A!!{L>Y2P&-aR7*ptynON9PFwjd~eA17()UL>E(JfuFTm(k){w^ zOXtruiZWyIp<7ia(=2K2T4$-2Iz1iu>YW$idPkpt`35U&mPdyhCcdg4Ez ze`poI8u?|LI5=Jv`{yISg1_t*zgmRLCUEc~5aawm72(>}IG4R#R(OM#W%K9Daz!)^ z9{)M>vd$WusgC#4@n2zH8}Rp1XK;8o{!hcfHEQ6|elIr$2l9Y+e*WZ_`;zJyocLRt zUQ!i;6UQljns`a#ca?Zm6nMexq5L((YuocWP2UB&6ZEe1lhymDwC`%5m)(08EC9d| zWb*hAv`Z$wtJKRTGjM7M-LIowTgB)1(`6wPIKGwfr}1EVsH@>#HZOtmI+=b2@7h4W zw;O?jXPAE){704?c#zjQjxK2TSbmyy*?0twJhy9H7T{a}0f1L*{{eZOeda3qs_Nzf z&cgnS(bu-__fDIO5&!^gKVOC`hMTK#Ul!VcGetOlI_~ckGgq;fT{hs@nqP^%wyLj_ z*j$uA{Pxd>eaY%_HRQ|cm=NBP=817|R$ORby$N^;z{>N~C zw{~0&_p%xU9LWq)68{q9wc&nm0Rd;%{de}YPLQk7U$t;tl%av|r=!25s<=wLti!nA z0RV469)q8(?@PpMtNVK!1vvUONd5HR(BF3*=fta4i3_G8=jV)OXb7Qy zivGbyXz(WeewXzH2mqi4DK-9Cls`cIFucp#62X}!Qh&qzJpt{~{OWhpo!9Nvx`0%G z_L%%-SU*Bs8_s#^;^mDi7bE}x2jouq2ds;2Ea0tke(B4*PQWi+`Y$ehu?OYq^)GK2 z0l&Tm=%l@WQ1m~ipTBE`>$1l$0J$nZarqy%z~$u83km>$rTLFIKTIXPT49&7CBaEA zwEi3E`ry9H4FpGG==>e>^3wTtZS;ML2KeQdAOE|{f0wWUUU}Co`(MBy4gVzyEC~Rd na@{iU1w{?y-@E>vzPc!^APo)5#ysEhzzaYG&39#(pa1rM+;^tv diff --git a/src/vfs/_vfscommon.vfs/modules/test/runalltests.tcl b/src/vfs/_vfscommon.vfs/modules/test/runalltests.tcl new file mode 100644 index 00000000..945abba9 --- /dev/null +++ b/src/vfs/_vfscommon.vfs/modules/test/runalltests.tcl @@ -0,0 +1,99 @@ +package require punk +#bogus require to ensure loaded +catch {package require test::bogus666} +set tmlist [tcl::tm::list] +foreach tmfolder $tmlist { + set tfolder [file join $tmfolder test] + if {[file exists $tfolder]} { + puts stdout "checking tm test folder $tfolder" + set subfolders [glob -nocomplain -dir $tfolder -type d -tail *] + foreach sub $subfolders { + if {[string match #* $sub]} { + continue + } + puts stdout "bogus require of test::${sub}::bogus666" + catch {package require test::${sub}::bogus666} + } + } +} +set alltestpkgs [lsearch -all -inline [package names] test::*] +puts "alltestpkgs: $alltestpkgs" +set punktestpkgs [list] +foreach pkg $alltestpkgs { + if {![catch {package require $pkg}]} { + if {[info commands ::${pkg}::RUN] ne ""} { + lappend punktestpkgs $pkg + } + } else { + puts stderr "failed to load test package $pkg" + } +} +set scriptname [file tail [info script]] +set results [dict create] +dict set results total 0 +dict set results passed 0 +dict set results skipped 0 +dict set results failed 0 +set pkgs_with_fails [list] +package require shellrun +puts "running tests in [llength $punktestpkgs] packages $punktestpkgs" +flush stderr +flush stdout +package require punk::ansi +foreach pkg [lrange $punktestpkgs 1 2] { + puts stdout "running test pkg $pkg" + if {[catch { + #set result [shellrun::runout -tcl ${pkg}::RUN] + set result [shellrun::runx -tcl ${pkg}::RUN] + #set result [shellrun::runx ls] + } errM]} { + puts stderr "error calling 'runout -tcl ${pkg}::RUN' $errM"; flush stderr + set result {none ""} + } + puts stdout "executed ${pkg}::RUN" + flush stdout + set i 0 + dict for {what chunk} $result { + set chunk [string map [list \r\n \n] $chunk] + switch -- $what { + stdout { + foreach ln [split $chunk \n] { + incr i + if {[string match "Tests ended at*" $ln]} { + puts stdout " [punk::ansi::ansistring VIEW -lf 2 -cr 1 "$pkg $ln"]" + } elseif {[string match "*:*Total*Passed*Skipped*Failed*" $ln]} { + set fields [lrange $ln 1 end] + dict for {K v} $fields { + set k [string tolower $K] + dict incr results $k $v + if {$k eq "failed" && $v > 0} { + lappend pkgs_with_fails $pkg + } + } + puts stdout "$pkg $ln" + } else { + puts stdout " $ln" + #puts stdout "$i" + } + } + flush stdout + } + stderr { + puts stderr " [punk::ansi::ansistring VIEW -lf 2 -cr 1 $chunk]" + flush stderr + } + default { + puts stderr "<${what}> $chunk" + flush stderr + } + } + } + puts stdout "completed pkg test ${pkg}" +} +puts stdout "results: Total [dict get $results total] Passed [dict get $results passed] Skipped [dict get $results skipped] Failed [dict get $results failed]" +puts stdout "packages with failures: $pkgs_with_fails" +after 5000 {set ::done true} +vwait ::done +puts stdout "DONE" +exit 0 + diff --git a/src/vfs/_vfscommon.vfs/modules/test/tomlish-1.1.1.tm.x b/src/vfs/_vfscommon.vfs/modules/test/tomlish-1.1.1.tm.x deleted file mode 100644 index 8405fae74a50ec468daaff5adfc86c3c68353219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46279 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 Rnur^y08nlU5_|L8{{woe1EBx_ diff --git a/src/vfs/_vfscommon.vfs/modules/test/tomlish-1.1.5.tm.x b/src/vfs/_vfscommon.vfs/modules/test/tomlish-1.1.5.tm.x deleted file mode 100644 index 536e3fa3bf724e2b979b4a297a88d29d74284f07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51527 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