tk 0.1.0 → 0.4.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.
- checksums.yaml +5 -5
- data/.gitignore +2 -0
- data/MANUAL_tcltklib.eng +0 -2
- data/MANUAL_tcltklib.ja +0 -2
- data/README.ActiveTcl +1 -1
- data/README.md +53 -1
- data/ext/tk/extconf.rb +4 -2
- data/ext/tk/old-extconf.rb +0 -1
- data/ext/tk/tcltklib.c +47 -149
- data/ext/tk/tkutil/extconf.rb +0 -2
- data/ext/tk/tkutil/tkutil.c +6 -9
- data/lib/multi-tk.rb +99 -320
- data/lib/remote-tk.rb +8 -25
- data/lib/tk.rb +49 -130
- data/lib/tk/autoload.rb +3 -3
- data/lib/tk/bgerror.rb +2 -2
- data/lib/tk/bindtag.rb +1 -1
- data/lib/tk/canvas.rb +7 -15
- data/lib/tk/canvastag.rb +11 -19
- data/lib/tk/entry.rb +1 -1
- data/lib/tk/font.rb +1 -1
- data/lib/tk/fontchooser.rb +1 -1
- data/lib/tk/grid.rb +4 -4
- data/lib/tk/image.rb +1 -1
- data/lib/tk/itemconfig.rb +4 -4
- data/lib/tk/itemfont.rb +3 -3
- data/lib/tk/listbox.rb +1 -1
- data/lib/tk/menu.rb +4 -4
- data/lib/tk/menuspec.rb +0 -1
- data/lib/tk/msgcat.rb +5 -5
- data/lib/tk/namespace.rb +14 -34
- data/lib/tk/optiondb.rb +3 -74
- data/lib/tk/optionobj.rb +1 -1
- data/lib/tk/scale.rb +3 -3
- data/lib/tk/scrollable.rb +4 -2
- data/lib/tk/selection.rb +5 -4
- data/lib/tk/text.rb +9 -17
- data/lib/tk/textmark.rb +1 -1
- data/lib/tk/texttag.rb +7 -15
- data/lib/tk/timer.rb +2 -2
- data/lib/tk/tk_mac.rb +18 -18
- data/lib/tk/validation.rb +6 -37
- data/lib/tk/variable.rb +10 -8
- data/lib/tk/virtevent.rb +1 -1
- data/lib/tk/winfo.rb +1 -1
- data/lib/tkextlib/blt/barchart.rb +0 -17
- data/lib/tkextlib/blt/bitmap.rb +1 -1
- data/lib/tkextlib/blt/component.rb +40 -40
- data/lib/tkextlib/blt/dragdrop.rb +6 -6
- data/lib/tkextlib/blt/graph.rb +0 -17
- data/lib/tkextlib/blt/stripchart.rb +0 -17
- data/lib/tkextlib/blt/tabset.rb +16 -31
- data/lib/tkextlib/blt/tree.rb +6 -6
- data/lib/tkextlib/blt/treeview.rb +14 -14
- data/lib/tkextlib/blt/watch.rb +1 -1
- data/lib/tkextlib/bwidget/labelentry.rb +6 -14
- data/lib/tkextlib/bwidget/listbox.rb +13 -29
- data/lib/tkextlib/bwidget/notebook.rb +6 -14
- data/lib/tkextlib/bwidget/progressdlg.rb +2 -2
- data/lib/tkextlib/bwidget/spinbox.rb +6 -14
- data/lib/tkextlib/bwidget/tree.rb +19 -35
- data/lib/tkextlib/itcl/incr_tcl.rb +2 -2
- data/lib/tkextlib/itk/incr_tk.rb +7 -29
- data/lib/tkextlib/iwidgets/calendar.rb +0 -15
- data/lib/tkextlib/iwidgets/entryfield.rb +1 -22
- data/lib/tkextlib/iwidgets/notebook.rb +2 -2
- data/lib/tkextlib/iwidgets/promptdialog.rb +1 -1
- data/lib/tkextlib/iwidgets/scrolledcanvas.rb +6 -14
- data/lib/tkextlib/iwidgets/spinner.rb +1 -1
- data/lib/tkextlib/iwidgets/tabnotebook.rb +2 -2
- data/lib/tkextlib/iwidgets/tabset.rb +1 -1
- data/lib/tkextlib/pkg_checker.rb +1 -1
- data/lib/tkextlib/tcllib/crosshair.rb +2 -2
- data/lib/tkextlib/tcllib/ctext.rb +2 -2
- data/lib/tkextlib/tcllib/plotchart.rb +5 -5
- data/lib/tkextlib/tcllib/tablelist_core.rb +3 -3
- data/lib/tkextlib/tcllib/validator.rb +6 -6
- data/lib/tkextlib/tile.rb +1 -2
- data/lib/tkextlib/tile/style.rb +1 -1
- data/lib/tkextlib/tile/treeview.rb +15 -22
- data/lib/tkextlib/tkDND/tkdnd.rb +63 -24
- data/lib/tkextlib/tkHTML/htmlwidget.rb +1 -1
- data/lib/tkextlib/tktable/tktable.rb +2 -2
- data/lib/tkextlib/treectrl/tktreectrl.rb +13 -21
- data/lib/tkextlib/vu/pie.rb +1 -1
- data/sample/binding_sample.rb +2 -2
- data/sample/cmd_res_test.rb +1 -1
- data/sample/demos-en/widget +21 -21
- data/sample/demos-jp/widget +4 -4
- data/sample/multi-ip_sample.rb +0 -3
- data/sample/multi-ip_sample2.rb +1 -1
- data/sample/resource.en +3 -3
- data/sample/resource.ja +3 -3
- data/sample/tcltklib/sample1.rb +2 -2
- data/sample/tkballoonhelp.rb +2 -2
- data/sample/tkextlib/tkHTML/ss.rb +0 -6
- data/sample/tkmulticolumnlist.rb +2 -2
- data/sample/tkmultilistframe.rb +2 -2
- data/sample/tkoptdb.rb +14 -16
- data/tk.gemspec +7 -8
- metadata +13 -15
- data/ChangeLog.tkextlib +0 -949
- data/old-README.tcltklib.ja +0 -159
- data/sample/binstr_usage.rb +0 -46
- data/sample/remote-ip_sample2.rb +0 -57
- data/sample/safe-tk.rb +0 -132
- data/sample/tkoptdb-safeTk.rb +0 -74
- data/sample/tktree.rb +0 -104
- data/sample/tktree.tcl +0 -305
data/ext/tk/tkutil/extconf.rb
CHANGED
data/ext/tk/tkutil/tkutil.c
CHANGED
|
@@ -171,13 +171,6 @@ tk_obj_untrust(self, obj)
|
|
|
171
171
|
VALUE self;
|
|
172
172
|
VALUE obj;
|
|
173
173
|
{
|
|
174
|
-
#ifdef HAVE_RB_OBJ_TAINT
|
|
175
|
-
rb_obj_taint(obj);
|
|
176
|
-
#endif
|
|
177
|
-
#ifdef HAVE_RB_OBJ_UNTRUST
|
|
178
|
-
rb_obj_untrust(obj);
|
|
179
|
-
#endif
|
|
180
|
-
|
|
181
174
|
return obj;
|
|
182
175
|
}
|
|
183
176
|
|
|
@@ -190,7 +183,11 @@ tk_eval_cmd(argc, argv, self)
|
|
|
190
183
|
VALUE cmd, rest;
|
|
191
184
|
|
|
192
185
|
rb_scan_args(argc, argv, "1*", &cmd, &rest);
|
|
186
|
+
#ifdef RB_PASS_KEYWORDS
|
|
187
|
+
return rb_eval_cmd_kw(cmd, rest, 0);
|
|
188
|
+
#else
|
|
193
189
|
return rb_eval_cmd(cmd, rest, 0);
|
|
190
|
+
#endif
|
|
194
191
|
}
|
|
195
192
|
|
|
196
193
|
static VALUE
|
|
@@ -1142,7 +1139,7 @@ tcl2rb_string(self, value)
|
|
|
1142
1139
|
{
|
|
1143
1140
|
rb_check_type(value, T_STRING);
|
|
1144
1141
|
|
|
1145
|
-
if (RSTRING_PTR(value) == (char*)NULL) return
|
|
1142
|
+
if (RSTRING_PTR(value) == (char*)NULL) return rb_str_new2("");
|
|
1146
1143
|
|
|
1147
1144
|
return tkstr_to_str(value);
|
|
1148
1145
|
}
|
|
@@ -1154,7 +1151,7 @@ tcl2rb_num_or_str(self, value)
|
|
|
1154
1151
|
{
|
|
1155
1152
|
rb_check_type(value, T_STRING);
|
|
1156
1153
|
|
|
1157
|
-
if (RSTRING_PTR(value) == (char*)NULL) return
|
|
1154
|
+
if (RSTRING_PTR(value) == (char*)NULL) return rb_str_new2("");
|
|
1158
1155
|
|
|
1159
1156
|
return rb_rescue2(tkstr_to_number, value,
|
|
1160
1157
|
tkstr_to_str, value,
|
data/lib/multi-tk.rb
CHANGED
|
@@ -31,8 +31,8 @@ class << TclTkIp
|
|
|
31
31
|
end
|
|
32
32
|
obj = __new__(*args)
|
|
33
33
|
obj.instance_eval{
|
|
34
|
-
@force_default_encoding ||=
|
|
35
|
-
@encoding ||=
|
|
34
|
+
@force_default_encoding ||= [false]
|
|
35
|
+
@encoding ||= [nil]
|
|
36
36
|
def @encoding.to_s; self.join(nil); end
|
|
37
37
|
}
|
|
38
38
|
obj
|
|
@@ -88,26 +88,25 @@ class MultiTkIp
|
|
|
88
88
|
WITH_ENCODING = defined?(::Encoding.default_external)
|
|
89
89
|
#WITH_ENCODING = Object.const_defined?(:Encoding) && ::Encoding.class == Class
|
|
90
90
|
|
|
91
|
-
(@@SLAVE_IP_ID = ['slave'.freeze,
|
|
91
|
+
(@@SLAVE_IP_ID = ['slave'.freeze, '0']).instance_eval{
|
|
92
92
|
@mutex = Mutex.new
|
|
93
93
|
def mutex; @mutex; end
|
|
94
94
|
freeze
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
@@IP_TABLE =
|
|
97
|
+
@@IP_TABLE = {} unless defined?(@@IP_TABLE)
|
|
98
98
|
|
|
99
|
-
@@INIT_IP_ENV =
|
|
100
|
-
@@ADD_TK_PROCS =
|
|
99
|
+
@@INIT_IP_ENV = [] unless defined?(@@INIT_IP_ENV) # table of Procs
|
|
100
|
+
@@ADD_TK_PROCS = [] unless defined?(@@ADD_TK_PROCS) # table of [name, args, body]
|
|
101
101
|
|
|
102
|
-
@@TK_TABLE_LIST =
|
|
102
|
+
@@TK_TABLE_LIST = [] unless defined?(@@TK_TABLE_LIST)
|
|
103
103
|
|
|
104
104
|
unless defined?(@@TK_CMD_TBL)
|
|
105
|
-
@@TK_CMD_TBL =
|
|
105
|
+
@@TK_CMD_TBL = Object.new
|
|
106
106
|
|
|
107
|
-
|
|
108
|
-
tbl_obj = TkUtil.untrust(Hash.new{|hash,key|
|
|
107
|
+
tbl_obj = Hash.new{|hash,key|
|
|
109
108
|
fail IndexError, "unknown command ID '#{key}'"
|
|
110
|
-
}
|
|
109
|
+
}
|
|
111
110
|
@@TK_CMD_TBL.instance_variable_set('@tbl', tbl_obj)
|
|
112
111
|
|
|
113
112
|
class << @@TK_CMD_TBL
|
|
@@ -187,7 +186,7 @@ class MultiTkIp
|
|
|
187
186
|
@@CB_ENTRY_CLASS = Class.new(TkCallbackEntry){
|
|
188
187
|
def initialize(ip, cmd)
|
|
189
188
|
@ip = ip
|
|
190
|
-
@safe = safe =
|
|
189
|
+
@safe = safe = 0
|
|
191
190
|
# @cmd = cmd
|
|
192
191
|
cmd = MultiTkIp._proc_on_safelevel(&cmd)
|
|
193
192
|
@cmd = proc{|*args| cmd.call(safe, *args)}
|
|
@@ -267,7 +266,7 @@ class MultiTkIp
|
|
|
267
266
|
|
|
268
267
|
begin
|
|
269
268
|
@interp._eval_without_enc(@interp._merge_tklist('bgerror', msg))
|
|
270
|
-
rescue Exception
|
|
269
|
+
rescue Exception
|
|
271
270
|
warn("Warning (#{self}): " + msg)
|
|
272
271
|
end
|
|
273
272
|
end
|
|
@@ -302,8 +301,8 @@ class MultiTkIp
|
|
|
302
301
|
|
|
303
302
|
######################################
|
|
304
303
|
|
|
305
|
-
def set_cb_error(cmd =
|
|
306
|
-
@cb_error_proc[0] = cmd
|
|
304
|
+
def set_cb_error(cmd = nil, &block)
|
|
305
|
+
@cb_error_proc[0] = cmd || block
|
|
307
306
|
end
|
|
308
307
|
|
|
309
308
|
def cb_error(e)
|
|
@@ -315,26 +314,22 @@ class MultiTkIp
|
|
|
315
314
|
######################################
|
|
316
315
|
|
|
317
316
|
def set_safe_level(safe)
|
|
318
|
-
|
|
319
|
-
@safe_level[0] = safe
|
|
320
|
-
@cmd_queue.enq([@system, 'set_safe_level', safe])
|
|
321
|
-
end
|
|
322
|
-
@safe_level[0]
|
|
317
|
+
0
|
|
323
318
|
end
|
|
324
319
|
def safe_level=(safe)
|
|
325
|
-
|
|
320
|
+
0
|
|
326
321
|
end
|
|
327
322
|
def self.set_safe_level(safe)
|
|
328
|
-
|
|
323
|
+
0
|
|
329
324
|
end
|
|
330
325
|
def self.safe_level=(safe)
|
|
331
|
-
|
|
326
|
+
0
|
|
332
327
|
end
|
|
333
328
|
def safe_level
|
|
334
|
-
|
|
329
|
+
0
|
|
335
330
|
end
|
|
336
331
|
def self.safe_level
|
|
337
|
-
|
|
332
|
+
0
|
|
338
333
|
end
|
|
339
334
|
|
|
340
335
|
def wait_on_mainloop?
|
|
@@ -392,13 +387,11 @@ class MultiTkIp
|
|
|
392
387
|
end
|
|
393
388
|
end
|
|
394
389
|
|
|
395
|
-
def _receiver_eval_proc_core(
|
|
390
|
+
def _receiver_eval_proc_core(_safe_level, thread, cmd, *args)
|
|
396
391
|
begin
|
|
397
|
-
#ret = proc{$SAFE = safe_level; cmd.call(*args)}.call
|
|
398
|
-
#ret = cmd.call(safe_level, *args)
|
|
399
392
|
normal_ret = false
|
|
400
393
|
ret = catch(:IRB_EXIT) do # IRB hack
|
|
401
|
-
retval = cmd.call(
|
|
394
|
+
retval = cmd.call(0, *args)
|
|
402
395
|
normal_ret = true
|
|
403
396
|
retval
|
|
404
397
|
end
|
|
@@ -578,18 +571,18 @@ class MultiTkIp
|
|
|
578
571
|
end
|
|
579
572
|
end
|
|
580
573
|
|
|
581
|
-
def _receiver_eval_proc(last_thread,
|
|
574
|
+
def _receiver_eval_proc(last_thread, _safe_level, thread, cmd, *args)
|
|
582
575
|
if thread
|
|
583
576
|
Thread.new{
|
|
584
577
|
last_thread.join if last_thread
|
|
585
578
|
unless @interp.deleted?
|
|
586
|
-
_receiver_eval_proc_core(
|
|
579
|
+
_receiver_eval_proc_core(0, thread, cmd, *args)
|
|
587
580
|
end
|
|
588
581
|
}
|
|
589
582
|
else
|
|
590
583
|
Thread.new{
|
|
591
584
|
unless @interp.deleted?
|
|
592
|
-
_receiver_eval_proc_core(
|
|
585
|
+
_receiver_eval_proc_core(0, thread, cmd, *args)
|
|
593
586
|
end
|
|
594
587
|
}
|
|
595
588
|
last_thread
|
|
@@ -616,11 +609,11 @@ class MultiTkIp
|
|
|
616
609
|
end
|
|
617
610
|
end
|
|
618
611
|
|
|
619
|
-
def _create_receiver_and_watchdog(lvl =
|
|
620
|
-
lvl =
|
|
612
|
+
def _create_receiver_and_watchdog(lvl = 0)
|
|
613
|
+
lvl = 0
|
|
621
614
|
|
|
622
615
|
# command-procedures receiver
|
|
623
|
-
receiver = Thread.new(lvl){|
|
|
616
|
+
receiver = Thread.new(lvl){|_safe_level|
|
|
624
617
|
last_thread = {}
|
|
625
618
|
|
|
626
619
|
loop do
|
|
@@ -629,11 +622,6 @@ class MultiTkIp
|
|
|
629
622
|
if thread == @system
|
|
630
623
|
# control command
|
|
631
624
|
case cmd
|
|
632
|
-
when 'set_safe_level'
|
|
633
|
-
begin
|
|
634
|
-
safe_level = args[0] if safe_level < args[0]
|
|
635
|
-
rescue Exception
|
|
636
|
-
end
|
|
637
625
|
when 'call_mainloop'
|
|
638
626
|
thread = args.shift
|
|
639
627
|
_check_and_return(thread,
|
|
@@ -645,7 +633,7 @@ class MultiTkIp
|
|
|
645
633
|
else
|
|
646
634
|
# procedure
|
|
647
635
|
last_thread[thread] = _receiver_eval_proc(last_thread[thread],
|
|
648
|
-
|
|
636
|
+
0, thread,
|
|
649
637
|
cmd, *args)
|
|
650
638
|
end
|
|
651
639
|
end
|
|
@@ -671,7 +659,7 @@ class MultiTkIp
|
|
|
671
659
|
loop do
|
|
672
660
|
Thread.pass
|
|
673
661
|
begin
|
|
674
|
-
thread,
|
|
662
|
+
thread, _, *_ = @cmd_queue.deq(true) # non-block
|
|
675
663
|
rescue ThreadError
|
|
676
664
|
# queue is empty
|
|
677
665
|
retry_count -= 1
|
|
@@ -717,15 +705,15 @@ class MultiTkIp
|
|
|
717
705
|
|
|
718
706
|
@@DEFAULT_MASTER = self.allocate
|
|
719
707
|
@@DEFAULT_MASTER.instance_eval{
|
|
720
|
-
@tk_windows =
|
|
708
|
+
@tk_windows = {}
|
|
721
709
|
|
|
722
|
-
@tk_table_list =
|
|
710
|
+
@tk_table_list = []
|
|
723
711
|
|
|
724
|
-
@slave_ip_tbl =
|
|
712
|
+
@slave_ip_tbl = {}
|
|
725
713
|
|
|
726
|
-
@slave_ip_top =
|
|
714
|
+
@slave_ip_top = {}
|
|
727
715
|
|
|
728
|
-
@evloop_thread =
|
|
716
|
+
@evloop_thread = []
|
|
729
717
|
|
|
730
718
|
unless keys.kind_of? Hash
|
|
731
719
|
fail ArgumentError, "expecting a Hash object for the 2nd argument"
|
|
@@ -808,28 +796,28 @@ class MultiTkIp
|
|
|
808
796
|
end
|
|
809
797
|
|
|
810
798
|
@interp.instance_eval{
|
|
811
|
-
@force_default_encoding ||=
|
|
812
|
-
@encoding ||=
|
|
799
|
+
@force_default_encoding ||= [false]
|
|
800
|
+
@encoding ||= [nil]
|
|
813
801
|
def @encoding.to_s; self.join(nil); end
|
|
814
802
|
}
|
|
815
803
|
|
|
816
804
|
@ip_name = nil
|
|
817
805
|
|
|
818
|
-
@callback_status =
|
|
806
|
+
@callback_status = []
|
|
819
807
|
|
|
820
808
|
@system = Object.new
|
|
821
809
|
|
|
822
|
-
@wait_on_mainloop =
|
|
810
|
+
@wait_on_mainloop = [true, 0]
|
|
823
811
|
|
|
824
812
|
@threadgroup = Thread.current.group
|
|
825
813
|
|
|
826
814
|
@safe_base = false
|
|
827
815
|
|
|
828
|
-
@safe_level = [
|
|
816
|
+
@safe_level = [0]
|
|
829
817
|
|
|
830
818
|
@cmd_queue = MultiTkIp::Command_Queue.new(@interp)
|
|
831
819
|
|
|
832
|
-
@cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog(
|
|
820
|
+
@cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog(0)
|
|
833
821
|
|
|
834
822
|
@threadgroup.add @cmd_receiver
|
|
835
823
|
@threadgroup.add @receiver_watchdog
|
|
@@ -902,7 +890,7 @@ class MultiTkIp
|
|
|
902
890
|
begin
|
|
903
891
|
req.ret[0] = req.target.instance_eval{
|
|
904
892
|
@cmd_receiver, @receiver_watchdog =
|
|
905
|
-
_create_receiver_and_watchdog(
|
|
893
|
+
_create_receiver_and_watchdog(0)
|
|
906
894
|
@threadgroup.add @cmd_receiver
|
|
907
895
|
@threadgroup.add @receiver_watchdog
|
|
908
896
|
@threadgroup.enclose
|
|
@@ -940,7 +928,6 @@ class MultiTkIp
|
|
|
940
928
|
|
|
941
929
|
@init_ip_env_queue = Queue.new
|
|
942
930
|
Thread.new{
|
|
943
|
-
current = Thread.current
|
|
944
931
|
loop {
|
|
945
932
|
mtx, cond, ret, table, script = @init_ip_env_queue.deq
|
|
946
933
|
begin
|
|
@@ -1194,8 +1181,8 @@ class MultiTkIp
|
|
|
1194
1181
|
ip_name = _create_slave_ip_name
|
|
1195
1182
|
slave_ip = @interp.create_slave(ip_name, true)
|
|
1196
1183
|
slave_ip.instance_eval{
|
|
1197
|
-
@force_default_encoding ||=
|
|
1198
|
-
@encoding ||=
|
|
1184
|
+
@force_default_encoding ||= [false]
|
|
1185
|
+
@encoding ||= [nil]
|
|
1199
1186
|
def @encoding.to_s; self.join(nil); end
|
|
1200
1187
|
}
|
|
1201
1188
|
@slave_ip_tbl[ip_name] = slave_ip
|
|
@@ -1242,8 +1229,8 @@ class MultiTkIp
|
|
|
1242
1229
|
ip_name = _create_slave_ip_name
|
|
1243
1230
|
slave_ip = @interp.create_slave(ip_name, false)
|
|
1244
1231
|
slave_ip.instance_eval{
|
|
1245
|
-
@force_default_encoding ||=
|
|
1246
|
-
@encoding ||=
|
|
1232
|
+
@force_default_encoding ||= [false]
|
|
1233
|
+
@encoding ||= [nil]
|
|
1247
1234
|
def @encoding.to_s; self.join(nil); end
|
|
1248
1235
|
}
|
|
1249
1236
|
slave_ip._invoke('set', 'argv0', name) if name.kind_of?(String)
|
|
@@ -1288,14 +1275,6 @@ class MultiTkIp
|
|
|
1288
1275
|
@slave_ip_top = {}
|
|
1289
1276
|
@cb_error_proc = []
|
|
1290
1277
|
@evloop_thread = []
|
|
1291
|
-
|
|
1292
|
-
TkUtil.untrust(@tk_windows) unless @tk_windows.tainted?
|
|
1293
|
-
TkUtil.untrust(@tk_table_list) unless @tk_table_list.tainted?
|
|
1294
|
-
TkUtil.untrust(@slave_ip_tbl) unless @slave_ip_tbl.tainted?
|
|
1295
|
-
TkUtil.untrust(@slave_ip_top) unless @slave_ip_top.tainted?
|
|
1296
|
-
TkUtil.untrust(@cb_error_proc) unless @cb_error_proc.tainted?
|
|
1297
|
-
TkUtil.untrust(@evloop_thread) unless @evloop_thread.tainted?
|
|
1298
|
-
|
|
1299
1278
|
@callback_status = []
|
|
1300
1279
|
|
|
1301
1280
|
name, safe, safe_opts, tk_opts = _parse_slaveopts(keys)
|
|
@@ -1309,30 +1288,12 @@ class MultiTkIp
|
|
|
1309
1288
|
unless WITH_RUBY_VM
|
|
1310
1289
|
@interp = TclTkIp.new(name, _keys2opts(tk_opts))
|
|
1311
1290
|
@interp.instance_eval{
|
|
1312
|
-
@force_default_encoding ||=
|
|
1313
|
-
@encoding ||=
|
|
1291
|
+
@force_default_encoding ||= [false]
|
|
1292
|
+
@encoding ||= [nil]
|
|
1314
1293
|
def @encoding.to_s; self.join(nil); end
|
|
1315
1294
|
}
|
|
1316
1295
|
|
|
1317
1296
|
else ### Ruby 1.9 !!!!!!!!!!!
|
|
1318
|
-
=begin
|
|
1319
|
-
@interp_thread = Thread.new{
|
|
1320
|
-
Thread.current[:interp] = interp = TclTkIp.new(name, _keys2opts(tk_opts))
|
|
1321
|
-
interp.instance_eval{
|
|
1322
|
-
@force_default_encoding ||= TkUtil.untrust([false])
|
|
1323
|
-
@encoding ||= TkUtil.untrust([nil])
|
|
1324
|
-
def @encoding.to_s; self.join(nil); end
|
|
1325
|
-
}
|
|
1326
|
-
|
|
1327
|
-
#sleep
|
|
1328
|
-
TclTkLib.mainloop(true)
|
|
1329
|
-
}
|
|
1330
|
-
until @interp_thread[:interp]
|
|
1331
|
-
Thread.pass
|
|
1332
|
-
end
|
|
1333
|
-
# INTERP_THREAD.run
|
|
1334
|
-
@interp = @interp_thread[:interp]
|
|
1335
|
-
=end
|
|
1336
1297
|
@interp_thread = Thread.new{
|
|
1337
1298
|
current = Thread.current
|
|
1338
1299
|
begin
|
|
@@ -1390,20 +1351,13 @@ class MultiTkIp
|
|
|
1390
1351
|
end
|
|
1391
1352
|
|
|
1392
1353
|
@interp.instance_eval{
|
|
1393
|
-
@force_default_encoding ||=
|
|
1394
|
-
@encoding ||=
|
|
1354
|
+
@force_default_encoding ||= [false]
|
|
1355
|
+
@encoding ||= [nil]
|
|
1395
1356
|
def @encoding.to_s; self.join(nil); end
|
|
1396
1357
|
}
|
|
1397
1358
|
|
|
1398
1359
|
@ip_name = nil
|
|
1399
1360
|
|
|
1400
|
-
if safe
|
|
1401
|
-
safe = $SAFE if safe < $SAFE
|
|
1402
|
-
@safe_level = [safe]
|
|
1403
|
-
else
|
|
1404
|
-
@safe_level = [$SAFE]
|
|
1405
|
-
end
|
|
1406
|
-
|
|
1407
1361
|
else
|
|
1408
1362
|
# create slave-ip
|
|
1409
1363
|
if safeip || master.safe?
|
|
@@ -1412,22 +1366,10 @@ class MultiTkIp
|
|
|
1412
1366
|
name, tk_opts)
|
|
1413
1367
|
# @interp_thread = nil if RUBY_VERSION < '1.9.0' ### !!!!!!!!!!!
|
|
1414
1368
|
@interp_thread = nil unless WITH_RUBY_VM ### Ruby 1.9 !!!!!!!!!!!
|
|
1415
|
-
if safe
|
|
1416
|
-
safe = master.safe_level if safe < master.safe_level
|
|
1417
|
-
@safe_level = [safe]
|
|
1418
|
-
else
|
|
1419
|
-
@safe_level = [1]
|
|
1420
|
-
end
|
|
1421
1369
|
else
|
|
1422
1370
|
@interp, @ip_name = master.__create_trusted_slave_obj(name, tk_opts)
|
|
1423
1371
|
# @interp_thread = nil if RUBY_VERSION < '1.9.0' ### !!!!!!!!!!!
|
|
1424
1372
|
@interp_thread = nil unless WITH_RUBY_VM ### Ruby 1.9 !!!!!!!!!!!
|
|
1425
|
-
if safe
|
|
1426
|
-
safe = master.safe_level if safe < master.safe_level
|
|
1427
|
-
@safe_level = [safe]
|
|
1428
|
-
else
|
|
1429
|
-
@safe_level = [master.safe_level]
|
|
1430
|
-
end
|
|
1431
1373
|
end
|
|
1432
1374
|
@set_alias_proc = proc{|name|
|
|
1433
1375
|
master._invoke('interp', 'alias', @ip_name, name, '', name)
|
|
@@ -1436,8 +1378,7 @@ class MultiTkIp
|
|
|
1436
1378
|
|
|
1437
1379
|
@system = Object.new
|
|
1438
1380
|
|
|
1439
|
-
@wait_on_mainloop =
|
|
1440
|
-
# @wait_on_mainloop = TkUtil.untrust([false, 0])
|
|
1381
|
+
@wait_on_mainloop = [true, 0]
|
|
1441
1382
|
|
|
1442
1383
|
@threadgroup = ThreadGroup.new
|
|
1443
1384
|
|
|
@@ -1445,19 +1386,11 @@ class MultiTkIp
|
|
|
1445
1386
|
|
|
1446
1387
|
@cmd_queue = MultiTkIp::Command_Queue.new(@interp)
|
|
1447
1388
|
|
|
1448
|
-
=begin
|
|
1449
|
-
@cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog(@safe_level[0])
|
|
1450
|
-
|
|
1451
|
-
@threadgroup.add @cmd_receiver
|
|
1452
|
-
@threadgroup.add @receiver_watchdog
|
|
1453
|
-
|
|
1454
|
-
@threadgroup.enclose
|
|
1455
|
-
=end
|
|
1456
1389
|
@@DEFAULT_MASTER.assign_receiver_and_watchdog(self)
|
|
1457
1390
|
|
|
1458
1391
|
@@IP_TABLE[@threadgroup] = self
|
|
1459
1392
|
@@TK_TABLE_LIST.size.times{
|
|
1460
|
-
@tk_table_list <<
|
|
1393
|
+
@tk_table_list << {}
|
|
1461
1394
|
}
|
|
1462
1395
|
_init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS)
|
|
1463
1396
|
|
|
@@ -1510,7 +1443,7 @@ class MultiTkIp
|
|
|
1510
1443
|
super(interp){|ip| Thread.current[:callback_ip] = ip; blk.call}
|
|
1511
1444
|
end
|
|
1512
1445
|
|
|
1513
|
-
@table =
|
|
1446
|
+
@table = Hash.new{|h,k| h[k] = []}
|
|
1514
1447
|
def self.table
|
|
1515
1448
|
@table
|
|
1516
1449
|
end
|
|
@@ -1551,7 +1484,7 @@ class << MultiTkIp
|
|
|
1551
1484
|
alias __new new
|
|
1552
1485
|
private :__new
|
|
1553
1486
|
|
|
1554
|
-
def new_master(
|
|
1487
|
+
def new_master(_safe=nil, keys={}, &blk)
|
|
1555
1488
|
if MultiTkIp::WITH_RUBY_VM
|
|
1556
1489
|
#### TODO !!!!!!
|
|
1557
1490
|
fail RuntimeError,
|
|
@@ -1572,11 +1505,8 @@ class << MultiTkIp
|
|
|
1572
1505
|
end
|
|
1573
1506
|
|
|
1574
1507
|
ip = __new(__getip, nil, keys)
|
|
1575
|
-
#ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?
|
|
1576
1508
|
if block_given?
|
|
1577
|
-
|
|
1578
|
-
#Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; yield}.call)}
|
|
1579
|
-
ip._proc_on_safelevel(&blk).call(ip.safe_level)
|
|
1509
|
+
ip._proc_on_safelevel(&blk).call(0)
|
|
1580
1510
|
end
|
|
1581
1511
|
ip
|
|
1582
1512
|
end
|
|
@@ -1598,11 +1528,8 @@ class << MultiTkIp
|
|
|
1598
1528
|
end
|
|
1599
1529
|
|
|
1600
1530
|
ip = __new(__getip, false, keys)
|
|
1601
|
-
# ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?
|
|
1602
1531
|
if block_given?
|
|
1603
|
-
|
|
1604
|
-
#Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; yield}.call)}
|
|
1605
|
-
ip._proc_on_safelevel(&blk).call(ip.safe_level)
|
|
1532
|
+
ip._proc_on_safelevel(&blk).call(0)
|
|
1606
1533
|
end
|
|
1607
1534
|
ip
|
|
1608
1535
|
end
|
|
@@ -1621,11 +1548,8 @@ class << MultiTkIp
|
|
|
1621
1548
|
end
|
|
1622
1549
|
|
|
1623
1550
|
ip = __new(__getip, true, keys)
|
|
1624
|
-
# ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?
|
|
1625
1551
|
if block_given?
|
|
1626
|
-
|
|
1627
|
-
#Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; yield}.call)}
|
|
1628
|
-
ip._proc_on_safelevel(&blk).call(ip.safe_level)
|
|
1552
|
+
ip._proc_on_safelevel(&blk).call(0)
|
|
1629
1553
|
end
|
|
1630
1554
|
ip
|
|
1631
1555
|
end
|
|
@@ -1759,7 +1683,7 @@ class MultiTkIp
|
|
|
1759
1683
|
|
|
1760
1684
|
def _add_new_tables
|
|
1761
1685
|
(@@TK_TABLE_LIST.size - @tk_table_list.size).times{
|
|
1762
|
-
@tk_table_list <<
|
|
1686
|
+
@tk_table_list << {}
|
|
1763
1687
|
}
|
|
1764
1688
|
end
|
|
1765
1689
|
|
|
@@ -1850,7 +1774,8 @@ class MultiTkIp
|
|
|
1850
1774
|
return obj
|
|
1851
1775
|
end
|
|
1852
1776
|
|
|
1853
|
-
def self.init_ip_env(script =
|
|
1777
|
+
def self.init_ip_env(script = nil, &block)
|
|
1778
|
+
script ||= block
|
|
1854
1779
|
@@INIT_IP_ENV << script
|
|
1855
1780
|
if __getip.slave?
|
|
1856
1781
|
begin
|
|
@@ -1911,82 +1836,12 @@ class MultiTkIp
|
|
|
1911
1836
|
@@CB_ENTRY_CLASS.new(__getip, cmd).freeze
|
|
1912
1837
|
end
|
|
1913
1838
|
|
|
1914
|
-
=begin
|
|
1915
|
-
def cb_eval(cmd, *args)
|
|
1916
|
-
#self.eval_callback{ TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *args)) }
|
|
1917
|
-
#ret = self.eval_callback{ TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *args)) }
|
|
1918
|
-
ret = self.eval_callback(*args){|safe, *params|
|
|
1919
|
-
$SAFE=safe if $SAFE < safe
|
|
1920
|
-
TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params))
|
|
1921
|
-
}
|
|
1922
|
-
if ret.kind_of?(Exception)
|
|
1923
|
-
raise ret
|
|
1924
|
-
end
|
|
1925
|
-
ret
|
|
1926
|
-
end
|
|
1927
|
-
=end
|
|
1928
1839
|
def cb_eval(cmd, *args)
|
|
1929
1840
|
self.eval_callback(*args,
|
|
1930
1841
|
&_proc_on_safelevel{|*params|
|
|
1931
1842
|
TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params))
|
|
1932
1843
|
})
|
|
1933
1844
|
end
|
|
1934
|
-
=begin
|
|
1935
|
-
def cb_eval(cmd, *args)
|
|
1936
|
-
self.eval_callback(*args){|safe, *params|
|
|
1937
|
-
$SAFE=safe if $SAFE < safe
|
|
1938
|
-
# TkUtil.eval_cmd(cmd, *params)
|
|
1939
|
-
TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params))
|
|
1940
|
-
}
|
|
1941
|
-
end
|
|
1942
|
-
=end
|
|
1943
|
-
=begin
|
|
1944
|
-
def cb_eval(cmd, *args)
|
|
1945
|
-
@callback_status[0] ||= TkVariable.new
|
|
1946
|
-
@callback_status[1] ||= TkVariable.new
|
|
1947
|
-
st, val = @callback_status
|
|
1948
|
-
th = Thread.new{
|
|
1949
|
-
self.eval_callback(*args){|safe, *params|
|
|
1950
|
-
#p [status, val, safe, *params]
|
|
1951
|
-
$SAFE=safe if $SAFE < safe
|
|
1952
|
-
begin
|
|
1953
|
-
TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params))
|
|
1954
|
-
rescue TkCallbackContinue
|
|
1955
|
-
st.value = 4
|
|
1956
|
-
rescue TkCallbackBreak
|
|
1957
|
-
st.value = 3
|
|
1958
|
-
rescue TkCallbackReturn
|
|
1959
|
-
st.value = 2
|
|
1960
|
-
rescue Exception => e
|
|
1961
|
-
val.value = e.message
|
|
1962
|
-
st.value = 1
|
|
1963
|
-
else
|
|
1964
|
-
st.value = 0
|
|
1965
|
-
end
|
|
1966
|
-
}
|
|
1967
|
-
}
|
|
1968
|
-
begin
|
|
1969
|
-
st.wait
|
|
1970
|
-
status = st.numeric
|
|
1971
|
-
retval = val.value
|
|
1972
|
-
rescue => e
|
|
1973
|
-
fail e
|
|
1974
|
-
end
|
|
1975
|
-
|
|
1976
|
-
if status == 1
|
|
1977
|
-
fail RuntimeError, retval
|
|
1978
|
-
elsif status == 2
|
|
1979
|
-
fail TkCallbackReturn, "Tk callback returns 'return' status"
|
|
1980
|
-
elsif status == 3
|
|
1981
|
-
fail TkCallbackBreak, "Tk callback returns 'break' status"
|
|
1982
|
-
elsif status == 4
|
|
1983
|
-
fail TkCallbackContinue, "Tk callback returns 'continue' status"
|
|
1984
|
-
else
|
|
1985
|
-
''
|
|
1986
|
-
end
|
|
1987
|
-
end
|
|
1988
|
-
=end
|
|
1989
|
-
|
|
1990
1845
|
end
|
|
1991
1846
|
|
|
1992
1847
|
# pseudo-toplevel operation support
|
|
@@ -2038,15 +1893,6 @@ end
|
|
|
2038
1893
|
if (!defined?(Use_PseudoToplevel_Feature_of_MultiTkIp) ||
|
|
2039
1894
|
Use_PseudoToplevel_Feature_of_MultiTkIp)
|
|
2040
1895
|
module MultiTkIp_PseudoToplevel_Evaluable
|
|
2041
|
-
#def pseudo_toplevel_eval(body = Proc.new)
|
|
2042
|
-
# Thread.current[:TOPLEVEL] = self
|
|
2043
|
-
# begin
|
|
2044
|
-
# body.call
|
|
2045
|
-
# ensure
|
|
2046
|
-
# Thread.current[:TOPLEVEL] = nil
|
|
2047
|
-
# end
|
|
2048
|
-
#end
|
|
2049
|
-
|
|
2050
1896
|
def pseudo_toplevel_evaluable?
|
|
2051
1897
|
@pseudo_toplevel_evaluable
|
|
2052
1898
|
end
|
|
@@ -2062,25 +1908,25 @@ if (!defined?(Use_PseudoToplevel_Feature_of_MultiTkIp) ||
|
|
|
2062
1908
|
end
|
|
2063
1909
|
|
|
2064
1910
|
class Object
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
end
|
|
1911
|
+
include(Module.new do
|
|
1912
|
+
private
|
|
1913
|
+
def method_missing(id, *args)
|
|
1914
|
+
begin
|
|
1915
|
+
has_top = (top = MultiTkIp.__getip.__pseudo_toplevel) &&
|
|
1916
|
+
top.respond_to?(:pseudo_toplevel_evaluable?) &&
|
|
1917
|
+
top.pseudo_toplevel_evaluable? &&
|
|
1918
|
+
top.respond_to?(id)
|
|
1919
|
+
rescue Exception
|
|
1920
|
+
has_top = false
|
|
1921
|
+
end
|
|
2077
1922
|
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
1923
|
+
if has_top
|
|
1924
|
+
top.__send__(id, *args)
|
|
1925
|
+
else
|
|
1926
|
+
super
|
|
1927
|
+
end
|
|
2082
1928
|
end
|
|
2083
|
-
end
|
|
1929
|
+
end)
|
|
2084
1930
|
end
|
|
2085
1931
|
else
|
|
2086
1932
|
# dummy
|
|
@@ -2104,22 +1950,8 @@ class MultiTkIp
|
|
|
2104
1950
|
_proc_on_safelevel(&cmd)
|
|
2105
1951
|
end
|
|
2106
1952
|
else
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
# avoid security error on Exception objects
|
|
2110
|
-
untrust_proc = proc{|err|
|
|
2111
|
-
begin
|
|
2112
|
-
err.untrust if err.respond_to?(:untrust)
|
|
2113
|
-
rescue SecurityError
|
|
2114
|
-
end
|
|
2115
|
-
err
|
|
2116
|
-
}
|
|
2117
|
-
$SAFE=safe if $SAFE < safe;
|
|
2118
|
-
begin
|
|
2119
|
-
yield(*args)
|
|
2120
|
-
rescue Exception => e
|
|
2121
|
-
fail untrust_proc.call(e)
|
|
2122
|
-
end
|
|
1953
|
+
Proc.new{|_safe, *args|
|
|
1954
|
+
yield(*args)
|
|
2123
1955
|
}
|
|
2124
1956
|
end
|
|
2125
1957
|
end
|
|
@@ -2128,9 +1960,8 @@ class MultiTkIp
|
|
|
2128
1960
|
end
|
|
2129
1961
|
|
|
2130
1962
|
def _proc_on_current_safelevel(cmd=nil, &blk) # require a block for eval
|
|
2131
|
-
safe = $SAFE
|
|
2132
1963
|
cmd = _proc_on_safelevel(cmd, &blk)
|
|
2133
|
-
Proc.new{|*args| cmd.call(
|
|
1964
|
+
Proc.new{|*args| cmd.call(0, *args)}
|
|
2134
1965
|
end
|
|
2135
1966
|
def MultiTkIp._proc_on_current_safelevel(cmd=nil, &blk)
|
|
2136
1967
|
MultiTkIp.__getip._proc_on_current_safelevel(cmd, &blk)
|
|
@@ -2149,7 +1980,7 @@ class MultiTkIp
|
|
|
2149
1980
|
if @cmd_receiver == Thread.current ||
|
|
2150
1981
|
(!req_val && TclTkLib.mainloop_thread? != false) # callback
|
|
2151
1982
|
begin
|
|
2152
|
-
ret = cmd.call(
|
|
1983
|
+
ret = cmd.call(0, *args)
|
|
2153
1984
|
rescue SystemExit => e
|
|
2154
1985
|
# exit IP
|
|
2155
1986
|
warn("Warning: "+ e.inspect + " on " + self.inspect) if $DEBUG
|
|
@@ -2232,12 +2063,8 @@ class MultiTkIp
|
|
|
2232
2063
|
|
|
2233
2064
|
if false && WITH_RUBY_VM ### Ruby 1.9
|
|
2234
2065
|
# Not stable, so disable this feature
|
|
2235
|
-
def eval_callback(*args)
|
|
2236
|
-
|
|
2237
|
-
cmd = Proc.new
|
|
2238
|
-
else
|
|
2239
|
-
cmd = args.shift
|
|
2240
|
-
end
|
|
2066
|
+
def eval_callback(*args, &block)
|
|
2067
|
+
cmd = block || args.shift
|
|
2241
2068
|
begin
|
|
2242
2069
|
if @@CALLBACK_SUBTHREAD.table[self].index(Thread.current)
|
|
2243
2070
|
last_th = nil
|
|
@@ -2258,12 +2085,8 @@ if false && WITH_RUBY_VM ### Ruby 1.9
|
|
|
2258
2085
|
end
|
|
2259
2086
|
end
|
|
2260
2087
|
else ### Ruby 1.8
|
|
2261
|
-
def eval_callback(*args)
|
|
2262
|
-
|
|
2263
|
-
cmd = Proc.new
|
|
2264
|
-
else
|
|
2265
|
-
cmd = args.shift
|
|
2266
|
-
end
|
|
2088
|
+
def eval_callback(*args, &block)
|
|
2089
|
+
cmd = block || args.shift
|
|
2267
2090
|
begin
|
|
2268
2091
|
eval_proc_core(false, cmd, *args)
|
|
2269
2092
|
rescue Exception=>e
|
|
@@ -2300,47 +2123,11 @@ end
|
|
|
2300
2123
|
*args)
|
|
2301
2124
|
end
|
|
2302
2125
|
end
|
|
2303
|
-
=begin
|
|
2304
|
-
def eval_proc(*args)
|
|
2305
|
-
# The scope of the eval-block of 'eval_proc' method is different from
|
|
2306
|
-
# the external. If you want to pass local values to the eval-block,
|
|
2307
|
-
# use arguments of eval_proc method. They are passed to block-arguments.
|
|
2308
|
-
if block_given?
|
|
2309
|
-
cmd = Proc.new
|
|
2310
|
-
else
|
|
2311
|
-
unless (cmd = args.shift)
|
|
2312
|
-
fail ArgumentError, "A Proc or Method object is expected for 1st argument"
|
|
2313
|
-
end
|
|
2314
|
-
end
|
|
2315
|
-
if TclTkLib.mainloop_thread? == true
|
|
2316
|
-
# call from eventloop
|
|
2317
|
-
current = Thread.current
|
|
2318
|
-
backup_ip = current[:callback_ip]
|
|
2319
|
-
current[:callback_ip] = self
|
|
2320
|
-
begin
|
|
2321
|
-
eval_proc_core(false,
|
|
2322
|
-
proc{|safe, *params|
|
|
2323
|
-
$SAFE=safe if $SAFE < safe
|
|
2324
|
-
cmd.call(*params)
|
|
2325
|
-
}, *args)
|
|
2326
|
-
ensure
|
|
2327
|
-
current[:callback_ip] = backup_ip
|
|
2328
|
-
end
|
|
2329
|
-
else
|
|
2330
|
-
eval_proc_core(true,
|
|
2331
|
-
proc{|safe, *params|
|
|
2332
|
-
$SAFE=safe if $SAFE < safe
|
|
2333
|
-
Thread.new(*params, &cmd).value
|
|
2334
|
-
},
|
|
2335
|
-
*args)
|
|
2336
|
-
end
|
|
2337
|
-
end
|
|
2338
|
-
=end
|
|
2339
2126
|
alias call eval_proc
|
|
2340
2127
|
|
|
2341
|
-
def bg_eval_proc(*args)
|
|
2342
|
-
if
|
|
2343
|
-
cmd =
|
|
2128
|
+
def bg_eval_proc(*args, &block)
|
|
2129
|
+
if block
|
|
2130
|
+
cmd = block
|
|
2344
2131
|
else
|
|
2345
2132
|
unless (cmd = args.shift)
|
|
2346
2133
|
fail ArgumentError, "A Proc or Method object is expected for 1st argument"
|
|
@@ -2348,14 +2135,6 @@ end
|
|
|
2348
2135
|
end
|
|
2349
2136
|
Thread.new{
|
|
2350
2137
|
eval_proc(cmd, *args)
|
|
2351
|
-
=begin
|
|
2352
|
-
eval_proc_core(false,
|
|
2353
|
-
proc{|safe, *params|
|
|
2354
|
-
$SAFE=safe if $SAFE < safe
|
|
2355
|
-
Thread.new(*params, &cmd).value
|
|
2356
|
-
},
|
|
2357
|
-
safe_level, *args)
|
|
2358
|
-
=end
|
|
2359
2138
|
}
|
|
2360
2139
|
end
|
|
2361
2140
|
alias background_eval_proc bg_eval_proc
|
|
@@ -2371,8 +2150,7 @@ end
|
|
|
2371
2150
|
|
|
2372
2151
|
eval_proc_core(true,
|
|
2373
2152
|
proc{|safe|
|
|
2374
|
-
Kernel.eval(
|
|
2375
|
-
*eval_args)
|
|
2153
|
+
Kernel.eval(cmd, *eval_args)
|
|
2376
2154
|
})
|
|
2377
2155
|
end
|
|
2378
2156
|
alias eval_str eval_string
|
|
@@ -2385,8 +2163,7 @@ end
|
|
|
2385
2163
|
Thread.new{
|
|
2386
2164
|
eval_proc_core(true,
|
|
2387
2165
|
proc{|safe|
|
|
2388
|
-
Kernel.eval(
|
|
2389
|
-
*eval_args)
|
|
2166
|
+
Kernel.eval(cmd, *eval_args)
|
|
2390
2167
|
})
|
|
2391
2168
|
}
|
|
2392
2169
|
end
|
|
@@ -2538,7 +2315,7 @@ class << MultiTkIp
|
|
|
2538
2315
|
__getip.allow_ruby_exit?
|
|
2539
2316
|
end
|
|
2540
2317
|
|
|
2541
|
-
def allow_ruby_exit=
|
|
2318
|
+
def allow_ruby_exit=(mode)
|
|
2542
2319
|
__getip.allow_ruby_exit = mode
|
|
2543
2320
|
end
|
|
2544
2321
|
|
|
@@ -2864,7 +2641,7 @@ class MultiTkIp
|
|
|
2864
2641
|
@interp.allow_ruby_exit?
|
|
2865
2642
|
end
|
|
2866
2643
|
|
|
2867
|
-
def allow_ruby_exit=
|
|
2644
|
+
def allow_ruby_exit=(mode)
|
|
2868
2645
|
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
|
2869
2646
|
@interp.allow_ruby_exit = mode
|
|
2870
2647
|
end
|
|
@@ -3348,21 +3125,22 @@ class MultiTkIp
|
|
|
3348
3125
|
self
|
|
3349
3126
|
end
|
|
3350
3127
|
|
|
3351
|
-
def set_bgerror_handler(cmd =
|
|
3128
|
+
def set_bgerror_handler(cmd = nil, slave = nil, &b)
|
|
3129
|
+
cmd ||= b
|
|
3352
3130
|
raise SecurityError, "no permission to manipulate" unless self.manipulable?
|
|
3353
3131
|
|
|
3354
3132
|
unless TkComm._callback_entry?(cmd)
|
|
3355
3133
|
if !slave && b
|
|
3356
3134
|
slave = cmd
|
|
3357
|
-
cmd =
|
|
3135
|
+
cmd = b
|
|
3358
3136
|
end
|
|
3359
3137
|
end
|
|
3360
3138
|
slave = '' unless slave
|
|
3361
3139
|
|
|
3362
3140
|
@interp._invoke('interp', 'bgerror', _slavearg(slave), cmd)
|
|
3363
3141
|
end
|
|
3364
|
-
def self.bgerror(cmd =
|
|
3365
|
-
__getip.bgerror(cmd, slave, &b)
|
|
3142
|
+
def self.bgerror(cmd = nil, slave = nil, &b)
|
|
3143
|
+
__getip.bgerror(cmd || b, slave, &b)
|
|
3366
3144
|
end
|
|
3367
3145
|
|
|
3368
3146
|
def get_bgerror_handler(slave = '')
|
|
@@ -3579,7 +3357,8 @@ class MultiTkIp
|
|
|
3579
3357
|
ip._eval("::safe::interpFindInAccessPath #{@ip_name} #{dir}")
|
|
3580
3358
|
end
|
|
3581
3359
|
|
|
3582
|
-
def safeip_set_log_cmd(cmd =
|
|
3360
|
+
def safeip_set_log_cmd(cmd = nil, &block)
|
|
3361
|
+
cmd ||= block
|
|
3583
3362
|
ip = MultiTkIp.__getip
|
|
3584
3363
|
ip._eval("::safe::setLogCmd #{@ip_name} #{_get_eval_string(cmd)}")
|
|
3585
3364
|
end
|