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.
Files changed (109) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/MANUAL_tcltklib.eng +0 -2
  4. data/MANUAL_tcltklib.ja +0 -2
  5. data/README.ActiveTcl +1 -1
  6. data/README.md +53 -1
  7. data/ext/tk/extconf.rb +4 -2
  8. data/ext/tk/old-extconf.rb +0 -1
  9. data/ext/tk/tcltklib.c +47 -149
  10. data/ext/tk/tkutil/extconf.rb +0 -2
  11. data/ext/tk/tkutil/tkutil.c +6 -9
  12. data/lib/multi-tk.rb +99 -320
  13. data/lib/remote-tk.rb +8 -25
  14. data/lib/tk.rb +49 -130
  15. data/lib/tk/autoload.rb +3 -3
  16. data/lib/tk/bgerror.rb +2 -2
  17. data/lib/tk/bindtag.rb +1 -1
  18. data/lib/tk/canvas.rb +7 -15
  19. data/lib/tk/canvastag.rb +11 -19
  20. data/lib/tk/entry.rb +1 -1
  21. data/lib/tk/font.rb +1 -1
  22. data/lib/tk/fontchooser.rb +1 -1
  23. data/lib/tk/grid.rb +4 -4
  24. data/lib/tk/image.rb +1 -1
  25. data/lib/tk/itemconfig.rb +4 -4
  26. data/lib/tk/itemfont.rb +3 -3
  27. data/lib/tk/listbox.rb +1 -1
  28. data/lib/tk/menu.rb +4 -4
  29. data/lib/tk/menuspec.rb +0 -1
  30. data/lib/tk/msgcat.rb +5 -5
  31. data/lib/tk/namespace.rb +14 -34
  32. data/lib/tk/optiondb.rb +3 -74
  33. data/lib/tk/optionobj.rb +1 -1
  34. data/lib/tk/scale.rb +3 -3
  35. data/lib/tk/scrollable.rb +4 -2
  36. data/lib/tk/selection.rb +5 -4
  37. data/lib/tk/text.rb +9 -17
  38. data/lib/tk/textmark.rb +1 -1
  39. data/lib/tk/texttag.rb +7 -15
  40. data/lib/tk/timer.rb +2 -2
  41. data/lib/tk/tk_mac.rb +18 -18
  42. data/lib/tk/validation.rb +6 -37
  43. data/lib/tk/variable.rb +10 -8
  44. data/lib/tk/virtevent.rb +1 -1
  45. data/lib/tk/winfo.rb +1 -1
  46. data/lib/tkextlib/blt/barchart.rb +0 -17
  47. data/lib/tkextlib/blt/bitmap.rb +1 -1
  48. data/lib/tkextlib/blt/component.rb +40 -40
  49. data/lib/tkextlib/blt/dragdrop.rb +6 -6
  50. data/lib/tkextlib/blt/graph.rb +0 -17
  51. data/lib/tkextlib/blt/stripchart.rb +0 -17
  52. data/lib/tkextlib/blt/tabset.rb +16 -31
  53. data/lib/tkextlib/blt/tree.rb +6 -6
  54. data/lib/tkextlib/blt/treeview.rb +14 -14
  55. data/lib/tkextlib/blt/watch.rb +1 -1
  56. data/lib/tkextlib/bwidget/labelentry.rb +6 -14
  57. data/lib/tkextlib/bwidget/listbox.rb +13 -29
  58. data/lib/tkextlib/bwidget/notebook.rb +6 -14
  59. data/lib/tkextlib/bwidget/progressdlg.rb +2 -2
  60. data/lib/tkextlib/bwidget/spinbox.rb +6 -14
  61. data/lib/tkextlib/bwidget/tree.rb +19 -35
  62. data/lib/tkextlib/itcl/incr_tcl.rb +2 -2
  63. data/lib/tkextlib/itk/incr_tk.rb +7 -29
  64. data/lib/tkextlib/iwidgets/calendar.rb +0 -15
  65. data/lib/tkextlib/iwidgets/entryfield.rb +1 -22
  66. data/lib/tkextlib/iwidgets/notebook.rb +2 -2
  67. data/lib/tkextlib/iwidgets/promptdialog.rb +1 -1
  68. data/lib/tkextlib/iwidgets/scrolledcanvas.rb +6 -14
  69. data/lib/tkextlib/iwidgets/spinner.rb +1 -1
  70. data/lib/tkextlib/iwidgets/tabnotebook.rb +2 -2
  71. data/lib/tkextlib/iwidgets/tabset.rb +1 -1
  72. data/lib/tkextlib/pkg_checker.rb +1 -1
  73. data/lib/tkextlib/tcllib/crosshair.rb +2 -2
  74. data/lib/tkextlib/tcllib/ctext.rb +2 -2
  75. data/lib/tkextlib/tcllib/plotchart.rb +5 -5
  76. data/lib/tkextlib/tcllib/tablelist_core.rb +3 -3
  77. data/lib/tkextlib/tcllib/validator.rb +6 -6
  78. data/lib/tkextlib/tile.rb +1 -2
  79. data/lib/tkextlib/tile/style.rb +1 -1
  80. data/lib/tkextlib/tile/treeview.rb +15 -22
  81. data/lib/tkextlib/tkDND/tkdnd.rb +63 -24
  82. data/lib/tkextlib/tkHTML/htmlwidget.rb +1 -1
  83. data/lib/tkextlib/tktable/tktable.rb +2 -2
  84. data/lib/tkextlib/treectrl/tktreectrl.rb +13 -21
  85. data/lib/tkextlib/vu/pie.rb +1 -1
  86. data/sample/binding_sample.rb +2 -2
  87. data/sample/cmd_res_test.rb +1 -1
  88. data/sample/demos-en/widget +21 -21
  89. data/sample/demos-jp/widget +4 -4
  90. data/sample/multi-ip_sample.rb +0 -3
  91. data/sample/multi-ip_sample2.rb +1 -1
  92. data/sample/resource.en +3 -3
  93. data/sample/resource.ja +3 -3
  94. data/sample/tcltklib/sample1.rb +2 -2
  95. data/sample/tkballoonhelp.rb +2 -2
  96. data/sample/tkextlib/tkHTML/ss.rb +0 -6
  97. data/sample/tkmulticolumnlist.rb +2 -2
  98. data/sample/tkmultilistframe.rb +2 -2
  99. data/sample/tkoptdb.rb +14 -16
  100. data/tk.gemspec +7 -8
  101. metadata +13 -15
  102. data/ChangeLog.tkextlib +0 -949
  103. data/old-README.tcltklib.ja +0 -159
  104. data/sample/binstr_usage.rb +0 -46
  105. data/sample/remote-ip_sample2.rb +0 -57
  106. data/sample/safe-tk.rb +0 -132
  107. data/sample/tkoptdb-safeTk.rb +0 -74
  108. data/sample/tktree.rb +0 -104
  109. data/sample/tktree.tcl +0 -305
@@ -3,8 +3,6 @@ begin
3
3
  require 'mkmf'
4
4
 
5
5
  have_func("rb_obj_instance_exec", "ruby.h")
6
- have_func("rb_obj_untrust", "ruby.h")
7
- have_func("rb_obj_taint", "ruby.h")
8
6
  have_func("rb_sym2str", "ruby.h")
9
7
  have_func("rb_id2str", "ruby.h")
10
8
  have_func("rb_ary_cat", "ruby.h")
@@ -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 rb_tainted_str_new2("");
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 rb_tainted_str_new2("");
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 ||= TkUtil.untrust([false])
35
- @encoding ||= TkUtil.untrust([nil])
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, TkUtil.untrust('0')]).instance_eval{
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 = TkUtil.untrust({}) unless defined?(@@IP_TABLE)
97
+ @@IP_TABLE = {} unless defined?(@@IP_TABLE)
98
98
 
99
- @@INIT_IP_ENV = TkUtil.untrust([]) unless defined?(@@INIT_IP_ENV) # table of Procs
100
- @@ADD_TK_PROCS = TkUtil.untrust([]) unless defined?(@@ADD_TK_PROCS) # table of [name, args, body]
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 = TkUtil.untrust([]) unless defined?(@@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 = TkUtil.untrust(Object.new)
105
+ @@TK_CMD_TBL = Object.new
106
106
 
107
- # @@TK_CMD_TBL.instance_variable_set('@tbl', {}.taint)
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 = $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 => e
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 = Proc.new)
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
- if safe > @safe_level[0]
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
- set_safe_level(safe)
320
+ 0
326
321
  end
327
322
  def self.set_safe_level(safe)
328
- __getip.set_safe_level(safe)
323
+ 0
329
324
  end
330
325
  def self.safe_level=(safe)
331
- self.set_safe_level(safe)
326
+ 0
332
327
  end
333
328
  def safe_level
334
- @safe_level[0]
329
+ 0
335
330
  end
336
331
  def self.safe_level
337
- __getip.safe_level
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(safe_level, thread, cmd, *args)
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(safe_level, *args)
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, safe_level, thread, cmd, *args)
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(safe_level, thread, cmd, *args)
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(safe_level, thread, cmd, *args)
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 = $SAFE)
620
- lvl = $SAFE if lvl < $SAFE
612
+ def _create_receiver_and_watchdog(lvl = 0)
613
+ lvl = 0
621
614
 
622
615
  # command-procedures receiver
623
- receiver = Thread.new(lvl){|safe_level|
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
- safe_level, thread,
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, cmd, *args = @cmd_queue.deq(true) # non-block
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 = TkUtil.untrust({})
708
+ @tk_windows = {}
721
709
 
722
- @tk_table_list = TkUtil.untrust([])
710
+ @tk_table_list = []
723
711
 
724
- @slave_ip_tbl = TkUtil.untrust({})
712
+ @slave_ip_tbl = {}
725
713
 
726
- @slave_ip_top = TkUtil.untrust({})
714
+ @slave_ip_top = {}
727
715
 
728
- @evloop_thread = TkUtil.untrust([])
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 ||= TkUtil.untrust([false])
812
- @encoding ||= TkUtil.untrust([nil])
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 = TkUtil.untrust([])
806
+ @callback_status = []
819
807
 
820
808
  @system = Object.new
821
809
 
822
- @wait_on_mainloop = TkUtil.untrust([true, 0])
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 = [$SAFE]
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(@safe_level[0])
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(@safe_level[0])
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 ||= TkUtil.untrust([false])
1198
- @encoding ||= TkUtil.untrust([nil])
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 ||= TkUtil.untrust([false])
1246
- @encoding ||= TkUtil.untrust([nil])
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 ||= TkUtil.untrust([false])
1313
- @encoding ||= TkUtil.untrust([nil])
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 ||= TkUtil.untrust([false])
1394
- @encoding ||= TkUtil.untrust([nil])
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 = TkUtil.untrust([true, 0])
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 << TkUtil.untrust({})
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 = TkUtil.untrust(Hash.new{|h,k| h[k] = TkUtil.untrust([])})
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(safe=nil, keys={}, &blk)
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
- #Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call)}
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
- #Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call)}
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
- #Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call)}
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 << TkUtil.untrust({})
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 = Proc.new)
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
- alias __method_missing_alias_for_MultiTkIp__ method_missing
2066
- private :__method_missing_alias_for_MultiTkIp__
2067
-
2068
- def method_missing(id, *args)
2069
- begin
2070
- has_top = (top = MultiTkIp.__getip.__pseudo_toplevel) &&
2071
- top.respond_to?(:pseudo_toplevel_evaluable?) &&
2072
- top.pseudo_toplevel_evaluable? &&
2073
- top.respond_to?(id)
2074
- rescue Exception => e
2075
- has_top = false
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
- if has_top
2079
- top.__send__(id, *args)
2080
- else
2081
- __method_missing_alias_for_MultiTkIp__(id, *args)
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
- #Proc.new{|safe, *args| $SAFE=safe if $SAFE < safe; yield(*args)}
2108
- Proc.new{|safe, *args|
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(safe, *args)}
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(safe_level, *args)
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
- if block_given?
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
- if block_given?
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 block_given?
2343
- cmd = Proc.new
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("$SAFE=#{safe} if $SAFE < #{safe};" << cmd,
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("$SAFE=#{safe} if $SAFE < #{safe};" << cmd,
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= (mode)
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= (mode)
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 = Proc.new, slave = nil, &b)
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 = Proc.new(&b)
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 = Proc.new, slave = nil, &b)
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 = Proc.new)
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