tk_as_gem 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +22 -0
- data/Rakefile +11 -0
- data/VERSION +1 -0
- data/ext/ChangeLog.tkextlib +935 -0
- data/ext/MANUAL_tcltklib.eng +469 -0
- data/ext/MANUAL_tcltklib.eucj +579 -0
- data/ext/README.1st +19 -0
- data/ext/README.ActiveTcl +49 -0
- data/ext/README.fork +34 -0
- data/ext/README.macosx-aqua +67 -0
- data/ext/README.tcltklib +85 -0
- data/ext/depend +2 -0
- data/ext/extconf.rb +451 -0
- data/ext/lib/README +30 -0
- data/ext/lib/multi-tk.rb +3491 -0
- data/ext/lib/remote-tk.rb +530 -0
- data/ext/lib/tcltk.rb +367 -0
- data/ext/lib/tk.rb +5584 -0
- data/ext/lib/tk/after.rb +6 -0
- data/ext/lib/tk/autoload.rb +414 -0
- data/ext/lib/tk/bgerror.rb +29 -0
- data/ext/lib/tk/bindtag.rb +138 -0
- data/ext/lib/tk/button.rb +30 -0
- data/ext/lib/tk/canvas.rb +789 -0
- data/ext/lib/tk/canvastag.rb +434 -0
- data/ext/lib/tk/checkbutton.rb +30 -0
- data/ext/lib/tk/clipboard.rb +75 -0
- data/ext/lib/tk/clock.rb +71 -0
- data/ext/lib/tk/composite.rb +458 -0
- data/ext/lib/tk/console.rb +52 -0
- data/ext/lib/tk/dialog.rb +326 -0
- data/ext/lib/tk/encodedstr.rb +187 -0
- data/ext/lib/tk/entry.rb +119 -0
- data/ext/lib/tk/event.rb +542 -0
- data/ext/lib/tk/font.rb +2344 -0
- data/ext/lib/tk/frame.rb +131 -0
- data/ext/lib/tk/grid.rb +279 -0
- data/ext/lib/tk/image.rb +275 -0
- data/ext/lib/tk/itemconfig.rb +1215 -0
- data/ext/lib/tk/itemfont.rb +327 -0
- data/ext/lib/tk/kinput.rb +71 -0
- data/ext/lib/tk/label.rb +21 -0
- data/ext/lib/tk/labelframe.rb +29 -0
- data/ext/lib/tk/listbox.rb +282 -0
- data/ext/lib/tk/macpkg.rb +78 -0
- data/ext/lib/tk/menu.rb +681 -0
- data/ext/lib/tk/menubar.rb +131 -0
- data/ext/lib/tk/menuspec.rb +275 -0
- data/ext/lib/tk/message.rb +22 -0
- data/ext/lib/tk/mngfocus.rb +33 -0
- data/ext/lib/tk/msgcat.rb +296 -0
- data/ext/lib/tk/namespace.rb +551 -0
- data/ext/lib/tk/optiondb.rb +377 -0
- data/ext/lib/tk/optionobj.rb +212 -0
- data/ext/lib/tk/pack.rb +107 -0
- data/ext/lib/tk/package.rb +143 -0
- data/ext/lib/tk/palette.rb +55 -0
- data/ext/lib/tk/panedwindow.rb +258 -0
- data/ext/lib/tk/place.rb +128 -0
- data/ext/lib/tk/radiobutton.rb +71 -0
- data/ext/lib/tk/root.rb +95 -0
- data/ext/lib/tk/scale.rb +111 -0
- data/ext/lib/tk/scrollable.rb +82 -0
- data/ext/lib/tk/scrollbar.rb +177 -0
- data/ext/lib/tk/scrollbox.rb +39 -0
- data/ext/lib/tk/selection.rb +86 -0
- data/ext/lib/tk/spinbox.rb +119 -0
- data/ext/lib/tk/tagfont.rb +43 -0
- data/ext/lib/tk/text.rb +1596 -0
- data/ext/lib/tk/textimage.rb +88 -0
- data/ext/lib/tk/textmark.rb +204 -0
- data/ext/lib/tk/texttag.rb +318 -0
- data/ext/lib/tk/textwindow.rb +154 -0
- data/ext/lib/tk/timer.rb +669 -0
- data/ext/lib/tk/toplevel.rb +262 -0
- data/ext/lib/tk/ttk_selector.rb +76 -0
- data/ext/lib/tk/txtwin_abst.rb +39 -0
- data/ext/lib/tk/validation.rb +397 -0
- data/ext/lib/tk/variable.rb +1765 -0
- data/ext/lib/tk/virtevent.rb +139 -0
- data/ext/lib/tk/winfo.rb +392 -0
- data/ext/lib/tk/winpkg.rb +153 -0
- data/ext/lib/tk/wm.rb +552 -0
- data/ext/lib/tk/xim.rb +122 -0
- data/ext/lib/tkafter.rb +4 -0
- data/ext/lib/tkbgerror.rb +4 -0
- data/ext/lib/tkcanvas.rb +4 -0
- data/ext/lib/tkclass.rb +47 -0
- data/ext/lib/tkconsole.rb +4 -0
- data/ext/lib/tkdialog.rb +4 -0
- data/ext/lib/tkentry.rb +4 -0
- data/ext/lib/tkextlib/ICONS.rb +13 -0
- data/ext/lib/tkextlib/ICONS/icons.rb +129 -0
- data/ext/lib/tkextlib/ICONS/setup.rb +8 -0
- data/ext/lib/tkextlib/SUPPORT_STATUS +196 -0
- data/ext/lib/tkextlib/blt.rb +187 -0
- data/ext/lib/tkextlib/blt/barchart.rb +79 -0
- data/ext/lib/tkextlib/blt/bitmap.rb +112 -0
- data/ext/lib/tkextlib/blt/busy.rb +82 -0
- data/ext/lib/tkextlib/blt/component.rb +2145 -0
- data/ext/lib/tkextlib/blt/container.rb +28 -0
- data/ext/lib/tkextlib/blt/cutbuffer.rb +23 -0
- data/ext/lib/tkextlib/blt/dragdrop.rb +268 -0
- data/ext/lib/tkextlib/blt/eps.rb +32 -0
- data/ext/lib/tkextlib/blt/graph.rb +67 -0
- data/ext/lib/tkextlib/blt/htext.rb +111 -0
- data/ext/lib/tkextlib/blt/setup.rb +8 -0
- data/ext/lib/tkextlib/blt/spline.rb +23 -0
- data/ext/lib/tkextlib/blt/stripchart.rb +74 -0
- data/ext/lib/tkextlib/blt/table.rb +399 -0
- data/ext/lib/tkextlib/blt/tabnotebook.rb +110 -0
- data/ext/lib/tkextlib/blt/tabset.rb +500 -0
- data/ext/lib/tkextlib/blt/ted.rb +65 -0
- data/ext/lib/tkextlib/blt/tile.rb +21 -0
- data/ext/lib/tkextlib/blt/tile/button.rb +16 -0
- data/ext/lib/tkextlib/blt/tile/checkbutton.rb +17 -0
- data/ext/lib/tkextlib/blt/tile/frame.rb +16 -0
- data/ext/lib/tkextlib/blt/tile/label.rb +16 -0
- data/ext/lib/tkextlib/blt/tile/radiobutton.rb +17 -0
- data/ext/lib/tkextlib/blt/tile/scrollbar.rb +16 -0
- data/ext/lib/tkextlib/blt/tile/toplevel.rb +16 -0
- data/ext/lib/tkextlib/blt/tree.rb +1058 -0
- data/ext/lib/tkextlib/blt/treeview.rb +1272 -0
- data/ext/lib/tkextlib/blt/unix_dnd.rb +135 -0
- data/ext/lib/tkextlib/blt/vector.rb +256 -0
- data/ext/lib/tkextlib/blt/watch.rb +175 -0
- data/ext/lib/tkextlib/blt/win_printer.rb +61 -0
- data/ext/lib/tkextlib/blt/winop.rb +107 -0
- data/ext/lib/tkextlib/bwidget.rb +151 -0
- data/ext/lib/tkextlib/bwidget/arrowbutton.rb +21 -0
- data/ext/lib/tkextlib/bwidget/bitmap.rb +21 -0
- data/ext/lib/tkextlib/bwidget/button.rb +31 -0
- data/ext/lib/tkextlib/bwidget/buttonbox.rb +90 -0
- data/ext/lib/tkextlib/bwidget/combobox.rb +51 -0
- data/ext/lib/tkextlib/bwidget/dialog.rb +182 -0
- data/ext/lib/tkextlib/bwidget/dragsite.rb +31 -0
- data/ext/lib/tkextlib/bwidget/dropsite.rb +39 -0
- data/ext/lib/tkextlib/bwidget/dynamichelp.rb +63 -0
- data/ext/lib/tkextlib/bwidget/entry.rb +43 -0
- data/ext/lib/tkextlib/bwidget/label.rb +41 -0
- data/ext/lib/tkextlib/bwidget/labelentry.rb +80 -0
- data/ext/lib/tkextlib/bwidget/labelframe.rb +52 -0
- data/ext/lib/tkextlib/bwidget/listbox.rb +358 -0
- data/ext/lib/tkextlib/bwidget/mainframe.rb +128 -0
- data/ext/lib/tkextlib/bwidget/messagedlg.rb +192 -0
- data/ext/lib/tkextlib/bwidget/notebook.rb +166 -0
- data/ext/lib/tkextlib/bwidget/pagesmanager.rb +73 -0
- data/ext/lib/tkextlib/bwidget/panedwindow.rb +37 -0
- data/ext/lib/tkextlib/bwidget/panelframe.rb +57 -0
- data/ext/lib/tkextlib/bwidget/passwddlg.rb +44 -0
- data/ext/lib/tkextlib/bwidget/progressbar.rb +20 -0
- data/ext/lib/tkextlib/bwidget/progressdlg.rb +58 -0
- data/ext/lib/tkextlib/bwidget/scrollableframe.rb +40 -0
- data/ext/lib/tkextlib/bwidget/scrolledwindow.rb +38 -0
- data/ext/lib/tkextlib/bwidget/scrollview.rb +25 -0
- data/ext/lib/tkextlib/bwidget/selectcolor.rb +73 -0
- data/ext/lib/tkextlib/bwidget/selectfont.rb +86 -0
- data/ext/lib/tkextlib/bwidget/separator.rb +20 -0
- data/ext/lib/tkextlib/bwidget/setup.rb +8 -0
- data/ext/lib/tkextlib/bwidget/spinbox.rb +98 -0
- data/ext/lib/tkextlib/bwidget/statusbar.rb +52 -0
- data/ext/lib/tkextlib/bwidget/titleframe.rb +33 -0
- data/ext/lib/tkextlib/bwidget/tree.rb +453 -0
- data/ext/lib/tkextlib/bwidget/widget.rb +129 -0
- data/ext/lib/tkextlib/itcl.rb +13 -0
- data/ext/lib/tkextlib/itcl/incr_tcl.rb +178 -0
- data/ext/lib/tkextlib/itcl/setup.rb +13 -0
- data/ext/lib/tkextlib/itk.rb +13 -0
- data/ext/lib/tkextlib/itk/incr_tk.rb +446 -0
- data/ext/lib/tkextlib/itk/setup.rb +13 -0
- data/ext/lib/tkextlib/iwidgets.rb +94 -0
- data/ext/lib/tkextlib/iwidgets/buttonbox.rb +120 -0
- data/ext/lib/tkextlib/iwidgets/calendar.rb +125 -0
- data/ext/lib/tkextlib/iwidgets/canvasprintbox.rb +53 -0
- data/ext/lib/tkextlib/iwidgets/canvasprintdialog.rb +38 -0
- data/ext/lib/tkextlib/iwidgets/checkbox.rb +129 -0
- data/ext/lib/tkextlib/iwidgets/combobox.rb +104 -0
- data/ext/lib/tkextlib/iwidgets/dateentry.rb +20 -0
- data/ext/lib/tkextlib/iwidgets/datefield.rb +58 -0
- data/ext/lib/tkextlib/iwidgets/dialog.rb +20 -0
- data/ext/lib/tkextlib/iwidgets/dialogshell.rb +120 -0
- data/ext/lib/tkextlib/iwidgets/disjointlistbox.rb +50 -0
- data/ext/lib/tkextlib/iwidgets/entryfield.rb +185 -0
- data/ext/lib/tkextlib/iwidgets/extbutton.rb +40 -0
- data/ext/lib/tkextlib/iwidgets/extfileselectionbox.rb +46 -0
- data/ext/lib/tkextlib/iwidgets/extfileselectiondialog.rb +33 -0
- data/ext/lib/tkextlib/iwidgets/feedback.rb +35 -0
- data/ext/lib/tkextlib/iwidgets/fileselectionbox.rb +46 -0
- data/ext/lib/tkextlib/iwidgets/fileselectiondialog.rb +33 -0
- data/ext/lib/tkextlib/iwidgets/finddialog.rb +42 -0
- data/ext/lib/tkextlib/iwidgets/hierarchy.rb +365 -0
- data/ext/lib/tkextlib/iwidgets/hyperhelp.rb +50 -0
- data/ext/lib/tkextlib/iwidgets/labeledframe.rb +39 -0
- data/ext/lib/tkextlib/iwidgets/labeledwidget.rb +45 -0
- data/ext/lib/tkextlib/iwidgets/mainwindow.rb +67 -0
- data/ext/lib/tkextlib/iwidgets/menubar.rb +211 -0
- data/ext/lib/tkextlib/iwidgets/messagebox.rb +92 -0
- data/ext/lib/tkextlib/iwidgets/messagedialog.rb +20 -0
- data/ext/lib/tkextlib/iwidgets/notebook.rb +174 -0
- data/ext/lib/tkextlib/iwidgets/optionmenu.rb +92 -0
- data/ext/lib/tkextlib/iwidgets/panedwindow.rb +133 -0
- data/ext/lib/tkextlib/iwidgets/promptdialog.rb +131 -0
- data/ext/lib/tkextlib/iwidgets/pushbutton.rb +35 -0
- data/ext/lib/tkextlib/iwidgets/radiobox.rb +120 -0
- data/ext/lib/tkextlib/iwidgets/scopedobject.rb +24 -0
- data/ext/lib/tkextlib/iwidgets/scrolledcanvas.rb +353 -0
- data/ext/lib/tkextlib/iwidgets/scrolledframe.rb +59 -0
- data/ext/lib/tkextlib/iwidgets/scrolledhtml.rb +58 -0
- data/ext/lib/tkextlib/iwidgets/scrolledlistbox.rb +207 -0
- data/ext/lib/tkextlib/iwidgets/scrolledtext.rb +564 -0
- data/ext/lib/tkextlib/iwidgets/scrolledwidget.rb +20 -0
- data/ext/lib/tkextlib/iwidgets/selectionbox.rb +102 -0
- data/ext/lib/tkextlib/iwidgets/selectiondialog.rb +92 -0
- data/ext/lib/tkextlib/iwidgets/setup.rb +8 -0
- data/ext/lib/tkextlib/iwidgets/shell.rb +38 -0
- data/ext/lib/tkextlib/iwidgets/spindate.rb +48 -0
- data/ext/lib/tkextlib/iwidgets/spinint.rb +30 -0
- data/ext/lib/tkextlib/iwidgets/spinner.rb +169 -0
- data/ext/lib/tkextlib/iwidgets/spintime.rb +48 -0
- data/ext/lib/tkextlib/iwidgets/tabnotebook.rb +180 -0
- data/ext/lib/tkextlib/iwidgets/tabset.rb +144 -0
- data/ext/lib/tkextlib/iwidgets/timeentry.rb +25 -0
- data/ext/lib/tkextlib/iwidgets/timefield.rb +58 -0
- data/ext/lib/tkextlib/iwidgets/toolbar.rb +112 -0
- data/ext/lib/tkextlib/iwidgets/watch.rb +56 -0
- data/ext/lib/tkextlib/pkg_checker.rb +184 -0
- data/ext/lib/tkextlib/setup.rb +8 -0
- data/ext/lib/tkextlib/tcllib.rb +90 -0
- data/ext/lib/tkextlib/tcllib/README +135 -0
- data/ext/lib/tkextlib/tcllib/autoscroll.rb +158 -0
- data/ext/lib/tkextlib/tcllib/ctext.rb +160 -0
- data/ext/lib/tkextlib/tcllib/cursor.rb +97 -0
- data/ext/lib/tkextlib/tcllib/datefield.rb +57 -0
- data/ext/lib/tkextlib/tcllib/dialog.rb +84 -0
- data/ext/lib/tkextlib/tcllib/getstring.rb +134 -0
- data/ext/lib/tkextlib/tcllib/history.rb +73 -0
- data/ext/lib/tkextlib/tcllib/ico.rb +116 -0
- data/ext/lib/tkextlib/tcllib/ip_entry.rb +66 -0
- data/ext/lib/tkextlib/tcllib/panelframe.rb +72 -0
- data/ext/lib/tkextlib/tcllib/plotchart.rb +886 -0
- data/ext/lib/tkextlib/tcllib/ruler.rb +65 -0
- data/ext/lib/tkextlib/tcllib/screenruler.rb +68 -0
- data/ext/lib/tkextlib/tcllib/scrollwin.rb +61 -0
- data/ext/lib/tkextlib/tcllib/setup.rb +8 -0
- data/ext/lib/tkextlib/tcllib/style.rb +61 -0
- data/ext/lib/tkextlib/tcllib/superframe.rb +51 -0
- data/ext/lib/tkextlib/tcllib/swaplist.rb +150 -0
- data/ext/lib/tkextlib/tcllib/tablelist.rb +27 -0
- data/ext/lib/tkextlib/tcllib/tablelist_core.rb +782 -0
- data/ext/lib/tkextlib/tcllib/tablelist_tile.rb +25 -0
- data/ext/lib/tkextlib/tcllib/tkpiechart.rb +314 -0
- data/ext/lib/tkextlib/tcllib/tooltip.rb +95 -0
- data/ext/lib/tkextlib/tcllib/widget.rb +48 -0
- data/ext/lib/tkextlib/tclx.rb +13 -0
- data/ext/lib/tkextlib/tclx/setup.rb +8 -0
- data/ext/lib/tkextlib/tclx/tclx.rb +74 -0
- data/ext/lib/tkextlib/tile.rb +419 -0
- data/ext/lib/tkextlib/tile/dialog.rb +96 -0
- data/ext/lib/tkextlib/tile/setup.rb +8 -0
- data/ext/lib/tkextlib/tile/sizegrip.rb +29 -0
- data/ext/lib/tkextlib/tile/style.rb +316 -0
- data/ext/lib/tkextlib/tile/tbutton.rb +33 -0
- data/ext/lib/tkextlib/tile/tcheckbutton.rb +36 -0
- data/ext/lib/tkextlib/tile/tcombobox.rb +54 -0
- data/ext/lib/tkextlib/tile/tentry.rb +48 -0
- data/ext/lib/tkextlib/tile/tframe.rb +33 -0
- data/ext/lib/tkextlib/tile/tlabel.rb +33 -0
- data/ext/lib/tkextlib/tile/tlabelframe.rb +36 -0
- data/ext/lib/tkextlib/tile/tmenubutton.rb +36 -0
- data/ext/lib/tkextlib/tile/tnotebook.rb +139 -0
- data/ext/lib/tkextlib/tile/tpaned.rb +231 -0
- data/ext/lib/tkextlib/tile/tprogressbar.rb +56 -0
- data/ext/lib/tkextlib/tile/tradiobutton.rb +36 -0
- data/ext/lib/tkextlib/tile/treeview.rb +1239 -0
- data/ext/lib/tkextlib/tile/tscale.rb +53 -0
- data/ext/lib/tkextlib/tile/tscrollbar.rb +54 -0
- data/ext/lib/tkextlib/tile/tseparator.rb +33 -0
- data/ext/lib/tkextlib/tile/tsquare.rb +30 -0
- data/ext/lib/tkextlib/tkDND.rb +18 -0
- data/ext/lib/tkextlib/tkDND/setup.rb +8 -0
- data/ext/lib/tkextlib/tkDND/shape.rb +125 -0
- data/ext/lib/tkextlib/tkDND/tkdnd.rb +182 -0
- data/ext/lib/tkextlib/tkHTML.rb +13 -0
- data/ext/lib/tkextlib/tkHTML/htmlwidget.rb +453 -0
- data/ext/lib/tkextlib/tkHTML/setup.rb +8 -0
- data/ext/lib/tkextlib/tkimg.rb +36 -0
- data/ext/lib/tkextlib/tkimg/README +26 -0
- data/ext/lib/tkextlib/tkimg/bmp.rb +33 -0
- data/ext/lib/tkextlib/tkimg/gif.rb +33 -0
- data/ext/lib/tkextlib/tkimg/ico.rb +33 -0
- data/ext/lib/tkextlib/tkimg/jpeg.rb +33 -0
- data/ext/lib/tkextlib/tkimg/pcx.rb +33 -0
- data/ext/lib/tkextlib/tkimg/pixmap.rb +44 -0
- data/ext/lib/tkextlib/tkimg/png.rb +33 -0
- data/ext/lib/tkextlib/tkimg/ppm.rb +33 -0
- data/ext/lib/tkextlib/tkimg/ps.rb +33 -0
- data/ext/lib/tkextlib/tkimg/setup.rb +8 -0
- data/ext/lib/tkextlib/tkimg/sgi.rb +33 -0
- data/ext/lib/tkextlib/tkimg/sun.rb +33 -0
- data/ext/lib/tkextlib/tkimg/tga.rb +33 -0
- data/ext/lib/tkextlib/tkimg/tiff.rb +33 -0
- data/ext/lib/tkextlib/tkimg/window.rb +33 -0
- data/ext/lib/tkextlib/tkimg/xbm.rb +33 -0
- data/ext/lib/tkextlib/tkimg/xpm.rb +33 -0
- data/ext/lib/tkextlib/tktable.rb +14 -0
- data/ext/lib/tkextlib/tktable/setup.rb +8 -0
- data/ext/lib/tkextlib/tktable/tktable.rb +957 -0
- data/ext/lib/tkextlib/tktrans.rb +14 -0
- data/ext/lib/tkextlib/tktrans/setup.rb +8 -0
- data/ext/lib/tkextlib/tktrans/tktrans.rb +64 -0
- data/ext/lib/tkextlib/treectrl.rb +13 -0
- data/ext/lib/tkextlib/treectrl/setup.rb +8 -0
- data/ext/lib/tkextlib/treectrl/tktreectrl.rb +2461 -0
- data/ext/lib/tkextlib/trofs.rb +13 -0
- data/ext/lib/tkextlib/trofs/setup.rb +8 -0
- data/ext/lib/tkextlib/trofs/trofs.rb +51 -0
- data/ext/lib/tkextlib/version.rb +6 -0
- data/ext/lib/tkextlib/vu.rb +48 -0
- data/ext/lib/tkextlib/vu/bargraph.rb +61 -0
- data/ext/lib/tkextlib/vu/charts.rb +53 -0
- data/ext/lib/tkextlib/vu/dial.rb +102 -0
- data/ext/lib/tkextlib/vu/pie.rb +282 -0
- data/ext/lib/tkextlib/vu/setup.rb +8 -0
- data/ext/lib/tkextlib/vu/spinbox.rb +22 -0
- data/ext/lib/tkextlib/winico.rb +14 -0
- data/ext/lib/tkextlib/winico/setup.rb +8 -0
- data/ext/lib/tkextlib/winico/winico.rb +224 -0
- data/ext/lib/tkfont.rb +4 -0
- data/ext/lib/tkmacpkg.rb +4 -0
- data/ext/lib/tkmenubar.rb +4 -0
- data/ext/lib/tkmngfocus.rb +4 -0
- data/ext/lib/tkpalette.rb +4 -0
- data/ext/lib/tkscrollbox.rb +4 -0
- data/ext/lib/tktext.rb +4 -0
- data/ext/lib/tkvirtevent.rb +4 -0
- data/ext/lib/tkwinpkg.rb +4 -0
- data/ext/old-README.tcltklib.eucj +159 -0
- data/ext/stubs.c +531 -0
- data/ext/stubs.h +33 -0
- data/ext/tcltklib.c +10155 -0
- data/ext/tkutil/.cvsignore +3 -0
- data/ext/tkutil/depend +1 -0
- data/ext/tkutil/extconf.rb +14 -0
- data/ext/tkutil/tkutil.c +1789 -0
- metadata +418 -0
@@ -0,0 +1,530 @@
|
|
1
|
+
#
|
2
|
+
# remote-tk.rb - supports to control remote Tk interpreters
|
3
|
+
# by Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
4
|
+
|
5
|
+
if defined? MultiTkIp
|
6
|
+
fail RuntimeError, "'remote-tk' library must be required before requiring 'multi-tk'"
|
7
|
+
end
|
8
|
+
|
9
|
+
class MultiTkIp; end
|
10
|
+
class RemoteTkIp < MultiTkIp; end
|
11
|
+
|
12
|
+
class MultiTkIp
|
13
|
+
@@IP_TABLE = {}.taint unless defined?(@@IP_TABLE)
|
14
|
+
@@TK_TABLE_LIST = [].taint unless defined?(@@TK_TABLE_LIST)
|
15
|
+
def self._IP_TABLE; @@IP_TABLE; end
|
16
|
+
def self._TK_TABLE_LIST; @@TK_TABLE_LIST; end
|
17
|
+
|
18
|
+
@flag = true
|
19
|
+
def self._DEFAULT_MASTER
|
20
|
+
# work only once
|
21
|
+
if @flag
|
22
|
+
@flag = nil
|
23
|
+
@@DEFAULT_MASTER
|
24
|
+
else
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
class RemoteTkIp
|
30
|
+
@@IP_TABLE = MultiTkIp._IP_TABLE unless defined?(@@IP_TABLE)
|
31
|
+
@@TK_TABLE_LIST = MultiTkIp._TK_TABLE_LIST unless defined?(@@TK_TABLE_LIST)
|
32
|
+
end
|
33
|
+
class << MultiTkIp
|
34
|
+
undef _IP_TABLE
|
35
|
+
undef _TK_TABLE_LIST
|
36
|
+
end
|
37
|
+
|
38
|
+
require 'multi-tk'
|
39
|
+
|
40
|
+
class RemoteTkIp
|
41
|
+
if defined?(@@DEFAULT_MASTER)
|
42
|
+
MultiTkIp._DEFAULT_MASTER
|
43
|
+
else
|
44
|
+
@@DEFAULT_MASTER = MultiTkIp._DEFAULT_MASTER
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
###############################
|
50
|
+
|
51
|
+
class << RemoteTkIp
|
52
|
+
undef new_master, new_slave, new_safe_slave
|
53
|
+
undef new_trusted_slave, new_safeTk
|
54
|
+
|
55
|
+
def new(*args, &b)
|
56
|
+
ip = __new(*args)
|
57
|
+
ip.eval_proc(&b) if b
|
58
|
+
ip
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
class RemoteTkIp
|
63
|
+
def initialize(remote_ip, displayof=nil, timeout=5)
|
64
|
+
if $SAFE >= 4
|
65
|
+
fail SecurityError, "cannot access another interpreter at level #{$SAFE}"
|
66
|
+
end
|
67
|
+
|
68
|
+
@interp = MultiTkIp.__getip
|
69
|
+
if @interp.safe?
|
70
|
+
fail SecurityError, "safe-IP cannot create RemoteTkIp"
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
@interp.allow_ruby_exit = false
|
75
|
+
@appname = @interp._invoke('tk', 'appname')
|
76
|
+
@remote = remote_ip.to_s.dup.freeze
|
77
|
+
if displayof.kind_of?(TkWindow)
|
78
|
+
@displayof = displayof.path.dup.freeze
|
79
|
+
else
|
80
|
+
@displayof = nil
|
81
|
+
end
|
82
|
+
if self.deleted?
|
83
|
+
fail RuntimeError, "no Tk application named \"#{@remote}\""
|
84
|
+
end
|
85
|
+
|
86
|
+
@tk_windows = {}
|
87
|
+
@tk_table_list = []
|
88
|
+
@slave_ip_tbl = {}
|
89
|
+
@slave_ip_top = {}
|
90
|
+
|
91
|
+
@force_default_encoding ||= [false].taint
|
92
|
+
@encoding ||= [nil].taint
|
93
|
+
def @encoding.to_s; self.join(nil); end
|
94
|
+
|
95
|
+
@tk_windows.taint unless @tk_windows.tainted?
|
96
|
+
@tk_table_list.taint unless @tk_table_list.tainted?
|
97
|
+
@slave_ip_tbl.taint unless @slave_ip_tbl.tainted?
|
98
|
+
@slave_ip_top.taint unless @slave_ip_top.tainted?
|
99
|
+
|
100
|
+
@system = Object.new
|
101
|
+
|
102
|
+
@threadgroup = ThreadGroup.new
|
103
|
+
|
104
|
+
@safe_level = [$SAFE]
|
105
|
+
|
106
|
+
@wait_on_mainloop = [true, 0]
|
107
|
+
|
108
|
+
@cmd_queue = Queue.new
|
109
|
+
|
110
|
+
=begin
|
111
|
+
@cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog()
|
112
|
+
|
113
|
+
@threadgroup.add @cmd_receiver
|
114
|
+
@threadgroup.add @receiver_watchdog
|
115
|
+
|
116
|
+
@threadgroup.enclose
|
117
|
+
=end
|
118
|
+
@@DEFAULT_MASTER.assign_receiver_and_watchdog(self)
|
119
|
+
|
120
|
+
@@IP_TABLE[@threadgroup] = self
|
121
|
+
@@TK_TABLE_LIST.size.times{
|
122
|
+
(tbl = {}).tainted? || tbl.taint
|
123
|
+
@tk_table_list << tbl
|
124
|
+
}
|
125
|
+
|
126
|
+
@ret_val = TkVariable.new
|
127
|
+
if timeout > 0 && ! _available_check(timeout)
|
128
|
+
fail RuntimeError, "cannot create connection"
|
129
|
+
end
|
130
|
+
@ip_id = _create_connection
|
131
|
+
|
132
|
+
class << self
|
133
|
+
undef :instance_eval
|
134
|
+
end
|
135
|
+
|
136
|
+
self.freeze # defend against modification
|
137
|
+
end
|
138
|
+
|
139
|
+
def manipulable?
|
140
|
+
return true if (Thread.current.group == ThreadGroup::Default)
|
141
|
+
MultiTkIp.__getip == @interp && ! @interp.safe?
|
142
|
+
end
|
143
|
+
def self.manipulable?
|
144
|
+
true
|
145
|
+
end
|
146
|
+
|
147
|
+
def _is_master_of?(tcltkip_obj)
|
148
|
+
tcltkip_obj == @interp
|
149
|
+
end
|
150
|
+
protected :_is_master_of?
|
151
|
+
|
152
|
+
def _ip_id_
|
153
|
+
@ip_id
|
154
|
+
end
|
155
|
+
|
156
|
+
def _available_check(timeout = 5)
|
157
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
158
|
+
|
159
|
+
return nil if timeout < 1
|
160
|
+
@ret_val.value = ''
|
161
|
+
@interp._invoke('send', '-async', @remote,
|
162
|
+
'send', '-async', Tk.appname,
|
163
|
+
"set #{@ret_val.id} ready")
|
164
|
+
Tk.update
|
165
|
+
if @ret_val != 'ready'
|
166
|
+
(1..(timeout*5)).each{
|
167
|
+
sleep 0.2
|
168
|
+
Tk.update
|
169
|
+
break if @ret_val == 'ready'
|
170
|
+
}
|
171
|
+
end
|
172
|
+
@ret_val.value == 'ready'
|
173
|
+
end
|
174
|
+
private :_available_check
|
175
|
+
|
176
|
+
def _create_connection
|
177
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
178
|
+
|
179
|
+
ip_id = '_' + @interp._invoke('send', @remote, <<-'EOS') + '_'
|
180
|
+
if {[catch {set _rubytk_control_ip_id_} ret] != 0} {
|
181
|
+
set _rubytk_control_ip_id_ 0
|
182
|
+
} else {
|
183
|
+
set _rubytk_control_ip_id_ [expr $ret + 1]
|
184
|
+
}
|
185
|
+
return $_rubytk_control_ip_id_
|
186
|
+
EOS
|
187
|
+
|
188
|
+
@interp._invoke('send', @remote, <<-EOS)
|
189
|
+
proc rb_out#{ip_id} args {
|
190
|
+
send #{@appname} rb_out \$args
|
191
|
+
}
|
192
|
+
EOS
|
193
|
+
|
194
|
+
ip_id
|
195
|
+
end
|
196
|
+
private :_create_connection
|
197
|
+
|
198
|
+
def _appsend(enc_mode, async, *cmds)
|
199
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
200
|
+
|
201
|
+
p ['_appsend', [@remote, @displayof], enc_mode, async, cmds] if $DEBUG
|
202
|
+
if $SAFE >= 4
|
203
|
+
fail SecurityError, "cannot send commands at level 4"
|
204
|
+
elsif $SAFE >= 1 && cmds.find{|obj| obj.tainted?}
|
205
|
+
fail SecurityError, "cannot send tainted commands at level #{$SAFE}"
|
206
|
+
end
|
207
|
+
|
208
|
+
cmds = @interp._merge_tklist(*TkUtil::_conv_args([], enc_mode, *cmds))
|
209
|
+
if @displayof
|
210
|
+
if async
|
211
|
+
@interp.__invoke('send', '-async', '-displayof', @displayof,
|
212
|
+
'--', @remote, *cmds)
|
213
|
+
else
|
214
|
+
@interp.__invoke('send', '-displayof', @displayof,
|
215
|
+
'--', @remote, *cmds)
|
216
|
+
end
|
217
|
+
else
|
218
|
+
if async
|
219
|
+
@interp.__invoke('send', '-async', '--', @remote, *cmds)
|
220
|
+
else
|
221
|
+
@interp.__invoke('send', '--', @remote, *cmds)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
private :_appsend
|
226
|
+
|
227
|
+
def ready?(timeout=5)
|
228
|
+
if timeout < 0
|
229
|
+
fail ArgumentError, "timeout must be positive number"
|
230
|
+
end
|
231
|
+
_available_check(timeout)
|
232
|
+
end
|
233
|
+
|
234
|
+
def is_rubytk?
|
235
|
+
return false if _appsend(false, false, 'info', 'command', 'ruby') == ""
|
236
|
+
[ _appsend(false, false, 'ruby', 'RUBY_VERSION'),
|
237
|
+
_appsend(false, false, 'set', 'tk_patchLevel') ]
|
238
|
+
end
|
239
|
+
|
240
|
+
def appsend(async, *args)
|
241
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
242
|
+
|
243
|
+
if async != true && async != false && async != nil
|
244
|
+
args.unshift(async)
|
245
|
+
async = false
|
246
|
+
end
|
247
|
+
if @displayof
|
248
|
+
Tk.appsend_displayof(@remote, @displayof, async, *args)
|
249
|
+
else
|
250
|
+
Tk.appsend(@remote, async, *args)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
def rb_appsend(async, *args)
|
255
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
256
|
+
|
257
|
+
if async != true && async != false && async != nil
|
258
|
+
args.unshift(async)
|
259
|
+
async = false
|
260
|
+
end
|
261
|
+
if @displayof
|
262
|
+
Tk.rb_appsend_displayof(@remote, @displayof, async, *args)
|
263
|
+
else
|
264
|
+
Tk.rb_appsend(@remote, async, *args)
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
def create_slave(name, safe=false)
|
269
|
+
if safe
|
270
|
+
safe_opt = ''
|
271
|
+
else
|
272
|
+
safe_opt = '-safe'
|
273
|
+
end
|
274
|
+
_appsend(false, false, "interp create #{safe_opt} -- #{name}")
|
275
|
+
end
|
276
|
+
|
277
|
+
def make_safe
|
278
|
+
fail RuntimeError, 'cannot change safe mode of the remote interpreter'
|
279
|
+
end
|
280
|
+
|
281
|
+
def safe?
|
282
|
+
_appsend(false, false, 'interp issafe')
|
283
|
+
end
|
284
|
+
|
285
|
+
def safe_base?
|
286
|
+
false
|
287
|
+
end
|
288
|
+
|
289
|
+
def allow_ruby_exit?
|
290
|
+
false
|
291
|
+
end
|
292
|
+
|
293
|
+
def allow_ruby_exit= (mode)
|
294
|
+
fail RuntimeError, 'cannot change mode of the remote interpreter'
|
295
|
+
end
|
296
|
+
|
297
|
+
def delete
|
298
|
+
_appsend(false, true, 'exit')
|
299
|
+
end
|
300
|
+
|
301
|
+
def deleted?
|
302
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
303
|
+
|
304
|
+
if @displayof
|
305
|
+
lst = @interp._invoke_without_enc('winfo', 'interps',
|
306
|
+
'-displayof', @displayof)
|
307
|
+
else
|
308
|
+
lst = @interp._invoke_without_enc('winfo', 'interps')
|
309
|
+
end
|
310
|
+
# unless @interp._split_tklist(lst).index(@remote)
|
311
|
+
unless @interp._split_tklist(lst).index(_toUTF8(@remote))
|
312
|
+
true
|
313
|
+
else
|
314
|
+
false
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
def has_mainwindow?
|
319
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
320
|
+
|
321
|
+
begin
|
322
|
+
inf = @interp._invoke_without_enc('info', 'command', '.')
|
323
|
+
rescue Exception
|
324
|
+
return nil
|
325
|
+
end
|
326
|
+
if !inf.kind_of?(String) || inf != '.'
|
327
|
+
false
|
328
|
+
else
|
329
|
+
true
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
def invalid_namespace?
|
334
|
+
false
|
335
|
+
end
|
336
|
+
|
337
|
+
def restart
|
338
|
+
fail RuntimeError, 'cannot restart the remote interpreter'
|
339
|
+
end
|
340
|
+
|
341
|
+
def __eval(str)
|
342
|
+
_appsend(false, false, str)
|
343
|
+
end
|
344
|
+
def _eval(str)
|
345
|
+
_appsend(nil, false, str)
|
346
|
+
end
|
347
|
+
def _eval_without_enc(str)
|
348
|
+
_appsend(false, false, str)
|
349
|
+
end
|
350
|
+
def _eval_with_enc(str)
|
351
|
+
_appsend(true, false, str)
|
352
|
+
end
|
353
|
+
|
354
|
+
def _invoke(*args)
|
355
|
+
_appsend(nil, false, *args)
|
356
|
+
end
|
357
|
+
|
358
|
+
def __invoke(*args)
|
359
|
+
_appsend(false, false, *args)
|
360
|
+
end
|
361
|
+
def _invoke(*args)
|
362
|
+
_appsend(nil, false, *args)
|
363
|
+
end
|
364
|
+
def _invoke_without_enc(*args)
|
365
|
+
_appsend(false, false, *args)
|
366
|
+
end
|
367
|
+
def _invoke_with_enc(*args)
|
368
|
+
_appsend(true, false, *args)
|
369
|
+
end
|
370
|
+
|
371
|
+
def _toUTF8(str, encoding=nil)
|
372
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
373
|
+
@interp._toUTF8(str, encoding)
|
374
|
+
end
|
375
|
+
|
376
|
+
def _fromUTF8(str, encoding=nil)
|
377
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
378
|
+
@interp._fromUTF8(str, encoding)
|
379
|
+
end
|
380
|
+
|
381
|
+
def _thread_vwait(var_name)
|
382
|
+
_appsend(false, 'thread_vwait', varname)
|
383
|
+
end
|
384
|
+
|
385
|
+
def _thread_tkwait(mode, target)
|
386
|
+
_appsend(false, 'thread_tkwait', mode, target)
|
387
|
+
end
|
388
|
+
|
389
|
+
def _return_value
|
390
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
391
|
+
@interp._return_value
|
392
|
+
end
|
393
|
+
|
394
|
+
def _get_variable(var_name, flag)
|
395
|
+
# ignore flag
|
396
|
+
_appsend(false, 'set', TkComm::_get_eval_string(var_name))
|
397
|
+
end
|
398
|
+
def _get_variable2(var_name, index_name, flag)
|
399
|
+
# ignore flag
|
400
|
+
_appsend(false, 'set', "#{TkComm::_get_eval_string(var_name)}(#{TkComm::_get_eval_string(index_name)})")
|
401
|
+
end
|
402
|
+
|
403
|
+
def _set_variable(var_name, value, flag)
|
404
|
+
# ignore flag
|
405
|
+
_appsend(false, 'set', TkComm::_get_eval_string(var_name), TkComm::_get_eval_string(value))
|
406
|
+
end
|
407
|
+
def _set_variable2(var_name, index_name, value, flag)
|
408
|
+
# ignore flag
|
409
|
+
_appsend(false, 'set', "#{TkComm::_get_eval_string(var_name)}(#{TkComm::_get_eval_string(index_name)})", TkComm::_get_eval_string(value))
|
410
|
+
end
|
411
|
+
|
412
|
+
def _unset_variable(var_name, flag)
|
413
|
+
# ignore flag
|
414
|
+
_appsend(false, 'unset', TkComm::_get_eval_string(var_name))
|
415
|
+
end
|
416
|
+
def _unset_variable2(var_name, index_name, flag)
|
417
|
+
# ignore flag
|
418
|
+
_appsend(false, 'unset', "#{var_name}(#{index_name})")
|
419
|
+
end
|
420
|
+
|
421
|
+
def _get_global_var(var_name)
|
422
|
+
_appsend(false, 'set', TkComm::_get_eval_string(var_name))
|
423
|
+
end
|
424
|
+
def _get_global_var2(var_name, index_name)
|
425
|
+
_appsend(false, 'set', "#{TkComm::_get_eval_string(var_name)}(#{TkComm::_get_eval_string(index_name)})")
|
426
|
+
end
|
427
|
+
|
428
|
+
def _set_global_var(var_name, value)
|
429
|
+
_appsend(false, 'set', TkComm::_get_eval_string(var_name), TkComm::_get_eval_string(value))
|
430
|
+
end
|
431
|
+
def _set_global_var2(var_name, index_name, value)
|
432
|
+
_appsend(false, 'set', "#{TkComm::_get_eval_string(var_name)}(#{TkComm::_get_eval_string(index_name)})", TkComm::_get_eval_string(value))
|
433
|
+
end
|
434
|
+
|
435
|
+
def _unset_global_var(var_name)
|
436
|
+
_appsend(false, 'unset', TkComm::_get_eval_string(var_name))
|
437
|
+
end
|
438
|
+
def _unset_global_var2(var_name, index_name)
|
439
|
+
_appsend(false, 'unset', "#{var_name}(#{index_name})")
|
440
|
+
end
|
441
|
+
|
442
|
+
def _split_tklist(str)
|
443
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
444
|
+
@interp._split_tklist(str)
|
445
|
+
end
|
446
|
+
|
447
|
+
def _merge_tklist(*args)
|
448
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
449
|
+
@interp._merge_tklist(*args)
|
450
|
+
end
|
451
|
+
|
452
|
+
def _conv_listelement(str)
|
453
|
+
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
454
|
+
@interp._conv_listelement(str)
|
455
|
+
end
|
456
|
+
|
457
|
+
def _create_console
|
458
|
+
fail RuntimeError, 'not support "_create_console" on the remote interpreter'
|
459
|
+
end
|
460
|
+
|
461
|
+
def mainloop
|
462
|
+
fail RuntimeError, 'not support "mainloop" on the remote interpreter'
|
463
|
+
end
|
464
|
+
def mainloop_watchdog
|
465
|
+
fail RuntimeError, 'not support "mainloop_watchdog" on the remote interpreter'
|
466
|
+
end
|
467
|
+
def do_one_evant(flag = nil)
|
468
|
+
fail RuntimeError, 'not support "do_one_event" on the remote interpreter'
|
469
|
+
end
|
470
|
+
def mainloop_abort_on_exception
|
471
|
+
fail RuntimeError, 'not support "mainloop_abort_on_exception" on the remote interpreter'
|
472
|
+
end
|
473
|
+
def mainloop_abort_on_exception=(mode)
|
474
|
+
fail RuntimeError, 'not support "mainloop_abort_on_exception=" on the remote interpreter'
|
475
|
+
end
|
476
|
+
def set_eventloop_tick(*args)
|
477
|
+
fail RuntimeError, 'not support "set_eventloop_tick" on the remote interpreter'
|
478
|
+
end
|
479
|
+
def get_eventloop_tick
|
480
|
+
fail RuntimeError, 'not support "get_eventloop_tick" on the remote interpreter'
|
481
|
+
end
|
482
|
+
def set_no_event_wait(*args)
|
483
|
+
fail RuntimeError, 'not support "set_no_event_wait" on the remote interpreter'
|
484
|
+
end
|
485
|
+
def get_no_event_wait
|
486
|
+
fail RuntimeError, 'not support "get_no_event_wait" on the remote interpreter'
|
487
|
+
end
|
488
|
+
def set_eventloop_weight(*args)
|
489
|
+
fail RuntimeError, 'not support "set_eventloop_weight" on the remote interpreter'
|
490
|
+
end
|
491
|
+
def get_eventloop_weight
|
492
|
+
fail RuntimeError, 'not support "get_eventloop_weight" on the remote interpreter'
|
493
|
+
end
|
494
|
+
end
|
495
|
+
|
496
|
+
class << RemoteTkIp
|
497
|
+
def mainloop(*args)
|
498
|
+
fail RuntimeError, 'not support "mainloop" on the remote interpreter'
|
499
|
+
end
|
500
|
+
def mainloop_watchdog(*args)
|
501
|
+
fail RuntimeError, 'not support "mainloop_watchdog" on the remote interpreter'
|
502
|
+
end
|
503
|
+
def do_one_evant(flag = nil)
|
504
|
+
fail RuntimeError, 'not support "do_one_event" on the remote interpreter'
|
505
|
+
end
|
506
|
+
def mainloop_abort_on_exception
|
507
|
+
fail RuntimeError, 'not support "mainloop_abort_on_exception" on the remote interpreter'
|
508
|
+
end
|
509
|
+
def mainloop_abort_on_exception=(mode)
|
510
|
+
fail RuntimeError, 'not support "mainloop_abort_on_exception=" on the remote interpreter'
|
511
|
+
end
|
512
|
+
def set_eventloop_tick(*args)
|
513
|
+
fail RuntimeError, 'not support "set_eventloop_tick" on the remote interpreter'
|
514
|
+
end
|
515
|
+
def get_eventloop_tick
|
516
|
+
fail RuntimeError, 'not support "get_eventloop_tick" on the remote interpreter'
|
517
|
+
end
|
518
|
+
def set_no_event_wait(*args)
|
519
|
+
fail RuntimeError, 'not support "set_no_event_wait" on the remote interpreter'
|
520
|
+
end
|
521
|
+
def get_no_event_wait
|
522
|
+
fail RuntimeError, 'not support "get_no_event_wait" on the remote interpreter'
|
523
|
+
end
|
524
|
+
def set_eventloop_weight(*args)
|
525
|
+
fail RuntimeError, 'not support "set_eventloop_weight" on the remote interpreter'
|
526
|
+
end
|
527
|
+
def get_eventloop_weight
|
528
|
+
fail RuntimeError, 'not support "get_eventloop_weight" on the remote interpreter'
|
529
|
+
end
|
530
|
+
end
|