tk 0.2.0 → 0.3.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 (93) 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 +43 -0
  7. data/ext/tk/extconf.rb +4 -2
  8. data/ext/tk/old-extconf.rb +0 -1
  9. data/ext/tk/tcltklib.c +46 -148
  10. data/ext/tk/tkutil/extconf.rb +0 -2
  11. data/ext/tk/tkutil/tkutil.c +6 -9
  12. data/lib/multi-tk.rb +95 -315
  13. data/lib/remote-tk.rb +6 -23
  14. data/lib/tk.rb +41 -122
  15. data/lib/tk/bgerror.rb +2 -2
  16. data/lib/tk/bindtag.rb +1 -1
  17. data/lib/tk/canvas.rb +6 -14
  18. data/lib/tk/canvastag.rb +8 -16
  19. data/lib/tk/font.rb +1 -1
  20. data/lib/tk/fontchooser.rb +1 -1
  21. data/lib/tk/image.rb +1 -1
  22. data/lib/tk/menu.rb +4 -4
  23. data/lib/tk/msgcat.rb +5 -5
  24. data/lib/tk/namespace.rb +12 -32
  25. data/lib/tk/optiondb.rb +3 -73
  26. data/lib/tk/scale.rb +2 -2
  27. data/lib/tk/scrollable.rb +4 -2
  28. data/lib/tk/selection.rb +5 -4
  29. data/lib/tk/text.rb +8 -16
  30. data/lib/tk/textmark.rb +1 -1
  31. data/lib/tk/texttag.rb +7 -15
  32. data/lib/tk/timer.rb +2 -2
  33. data/lib/tk/tk_mac.rb +18 -18
  34. data/lib/tk/validation.rb +4 -35
  35. data/lib/tk/variable.rb +7 -5
  36. data/lib/tk/virtevent.rb +1 -1
  37. data/lib/tkextlib/blt/barchart.rb +0 -17
  38. data/lib/tkextlib/blt/bitmap.rb +1 -1
  39. data/lib/tkextlib/blt/component.rb +34 -34
  40. data/lib/tkextlib/blt/dragdrop.rb +6 -6
  41. data/lib/tkextlib/blt/graph.rb +0 -17
  42. data/lib/tkextlib/blt/stripchart.rb +0 -17
  43. data/lib/tkextlib/blt/tabset.rb +16 -31
  44. data/lib/tkextlib/blt/tree.rb +5 -5
  45. data/lib/tkextlib/blt/treeview.rb +14 -14
  46. data/lib/tkextlib/blt/watch.rb +1 -1
  47. data/lib/tkextlib/bwidget/labelentry.rb +6 -14
  48. data/lib/tkextlib/bwidget/listbox.rb +13 -29
  49. data/lib/tkextlib/bwidget/notebook.rb +6 -14
  50. data/lib/tkextlib/bwidget/spinbox.rb +6 -14
  51. data/lib/tkextlib/bwidget/tree.rb +19 -35
  52. data/lib/tkextlib/itcl/incr_tcl.rb +2 -2
  53. data/lib/tkextlib/itk/incr_tk.rb +7 -29
  54. data/lib/tkextlib/iwidgets/calendar.rb +0 -15
  55. data/lib/tkextlib/iwidgets/entryfield.rb +0 -21
  56. data/lib/tkextlib/iwidgets/notebook.rb +2 -2
  57. data/lib/tkextlib/iwidgets/scrolledcanvas.rb +6 -14
  58. data/lib/tkextlib/iwidgets/tabnotebook.rb +2 -2
  59. data/lib/tkextlib/tcllib/ctext.rb +2 -2
  60. data/lib/tkextlib/tcllib/plotchart.rb +5 -5
  61. data/lib/tkextlib/tcllib/validator.rb +6 -6
  62. data/lib/tkextlib/tile.rb +1 -1
  63. data/lib/tkextlib/tile/style.rb +1 -1
  64. data/lib/tkextlib/tile/treeview.rb +13 -20
  65. data/lib/tkextlib/tkDND/tkdnd.rb +6 -22
  66. data/lib/tkextlib/tkHTML/htmlwidget.rb +1 -1
  67. data/lib/tkextlib/tktable/tktable.rb +1 -1
  68. data/lib/tkextlib/treectrl/tktreectrl.rb +12 -20
  69. data/lib/tkextlib/vu/pie.rb +1 -1
  70. data/sample/binding_sample.rb +2 -2
  71. data/sample/cmd_res_test.rb +1 -1
  72. data/sample/demos-en/widget +21 -21
  73. data/sample/demos-jp/widget +4 -4
  74. data/sample/multi-ip_sample.rb +0 -3
  75. data/sample/multi-ip_sample2.rb +1 -1
  76. data/sample/resource.en +3 -3
  77. data/sample/resource.ja +3 -3
  78. data/sample/tcltklib/sample1.rb +2 -2
  79. data/sample/tkballoonhelp.rb +2 -2
  80. data/sample/tkextlib/tkHTML/ss.rb +0 -6
  81. data/sample/tkmulticolumnlist.rb +2 -2
  82. data/sample/tkmultilistframe.rb +2 -2
  83. data/sample/tkoptdb.rb +14 -16
  84. data/tk.gemspec +4 -4
  85. metadata +6 -13
  86. data/ChangeLog.tkextlib +0 -949
  87. data/old-README.tcltklib.ja +0 -159
  88. data/sample/binstr_usage.rb +0 -46
  89. data/sample/remote-ip_sample2.rb +0 -57
  90. data/sample/safe-tk.rb +0 -132
  91. data/sample/tkoptdb-safeTk.rb +0 -74
  92. data/sample/tktree.rb +0 -104
  93. 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,
@@ -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)}
@@ -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
@@ -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
@@ -1194,8 +1182,8 @@ class MultiTkIp
1194
1182
  ip_name = _create_slave_ip_name
1195
1183
  slave_ip = @interp.create_slave(ip_name, true)
1196
1184
  slave_ip.instance_eval{
1197
- @force_default_encoding ||= TkUtil.untrust([false])
1198
- @encoding ||= TkUtil.untrust([nil])
1185
+ @force_default_encoding ||= [false]
1186
+ @encoding ||= [nil]
1199
1187
  def @encoding.to_s; self.join(nil); end
1200
1188
  }
1201
1189
  @slave_ip_tbl[ip_name] = slave_ip
@@ -1242,8 +1230,8 @@ class MultiTkIp
1242
1230
  ip_name = _create_slave_ip_name
1243
1231
  slave_ip = @interp.create_slave(ip_name, false)
1244
1232
  slave_ip.instance_eval{
1245
- @force_default_encoding ||= TkUtil.untrust([false])
1246
- @encoding ||= TkUtil.untrust([nil])
1233
+ @force_default_encoding ||= [false]
1234
+ @encoding ||= [nil]
1247
1235
  def @encoding.to_s; self.join(nil); end
1248
1236
  }
1249
1237
  slave_ip._invoke('set', 'argv0', name) if name.kind_of?(String)
@@ -1288,14 +1276,6 @@ class MultiTkIp
1288
1276
  @slave_ip_top = {}
1289
1277
  @cb_error_proc = []
1290
1278
  @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
1279
  @callback_status = []
1300
1280
 
1301
1281
  name, safe, safe_opts, tk_opts = _parse_slaveopts(keys)
@@ -1309,30 +1289,12 @@ class MultiTkIp
1309
1289
  unless WITH_RUBY_VM
1310
1290
  @interp = TclTkIp.new(name, _keys2opts(tk_opts))
1311
1291
  @interp.instance_eval{
1312
- @force_default_encoding ||= TkUtil.untrust([false])
1313
- @encoding ||= TkUtil.untrust([nil])
1292
+ @force_default_encoding ||= [false]
1293
+ @encoding ||= [nil]
1314
1294
  def @encoding.to_s; self.join(nil); end
1315
1295
  }
1316
1296
 
1317
1297
  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
1298
  @interp_thread = Thread.new{
1337
1299
  current = Thread.current
1338
1300
  begin
@@ -1390,20 +1352,13 @@ class MultiTkIp
1390
1352
  end
1391
1353
 
1392
1354
  @interp.instance_eval{
1393
- @force_default_encoding ||= TkUtil.untrust([false])
1394
- @encoding ||= TkUtil.untrust([nil])
1355
+ @force_default_encoding ||= [false]
1356
+ @encoding ||= [nil]
1395
1357
  def @encoding.to_s; self.join(nil); end
1396
1358
  }
1397
1359
 
1398
1360
  @ip_name = nil
1399
1361
 
1400
- if safe
1401
- safe = $SAFE if safe < $SAFE
1402
- @safe_level = [safe]
1403
- else
1404
- @safe_level = [$SAFE]
1405
- end
1406
-
1407
1362
  else
1408
1363
  # create slave-ip
1409
1364
  if safeip || master.safe?
@@ -1412,22 +1367,10 @@ class MultiTkIp
1412
1367
  name, tk_opts)
1413
1368
  # @interp_thread = nil if RUBY_VERSION < '1.9.0' ### !!!!!!!!!!!
1414
1369
  @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
1370
  else
1422
1371
  @interp, @ip_name = master.__create_trusted_slave_obj(name, tk_opts)
1423
1372
  # @interp_thread = nil if RUBY_VERSION < '1.9.0' ### !!!!!!!!!!!
1424
1373
  @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
1374
  end
1432
1375
  @set_alias_proc = proc{|name|
1433
1376
  master._invoke('interp', 'alias', @ip_name, name, '', name)
@@ -1436,8 +1379,7 @@ class MultiTkIp
1436
1379
 
1437
1380
  @system = Object.new
1438
1381
 
1439
- @wait_on_mainloop = TkUtil.untrust([true, 0])
1440
- # @wait_on_mainloop = TkUtil.untrust([false, 0])
1382
+ @wait_on_mainloop = [true, 0]
1441
1383
 
1442
1384
  @threadgroup = ThreadGroup.new
1443
1385
 
@@ -1445,19 +1387,11 @@ class MultiTkIp
1445
1387
 
1446
1388
  @cmd_queue = MultiTkIp::Command_Queue.new(@interp)
1447
1389
 
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
1390
  @@DEFAULT_MASTER.assign_receiver_and_watchdog(self)
1457
1391
 
1458
1392
  @@IP_TABLE[@threadgroup] = self
1459
1393
  @@TK_TABLE_LIST.size.times{
1460
- @tk_table_list << TkUtil.untrust({})
1394
+ @tk_table_list << {}
1461
1395
  }
1462
1396
  _init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS)
1463
1397
 
@@ -1510,7 +1444,7 @@ class MultiTkIp
1510
1444
  super(interp){|ip| Thread.current[:callback_ip] = ip; blk.call}
1511
1445
  end
1512
1446
 
1513
- @table = TkUtil.untrust(Hash.new{|h,k| h[k] = TkUtil.untrust([])})
1447
+ @table = Hash.new{|h,k| h[k] = []}
1514
1448
  def self.table
1515
1449
  @table
1516
1450
  end
@@ -1551,7 +1485,7 @@ class << MultiTkIp
1551
1485
  alias __new new
1552
1486
  private :__new
1553
1487
 
1554
- def new_master(safe=nil, keys={}, &blk)
1488
+ def new_master(_safe=nil, keys={}, &blk)
1555
1489
  if MultiTkIp::WITH_RUBY_VM
1556
1490
  #### TODO !!!!!!
1557
1491
  fail RuntimeError,
@@ -1572,11 +1506,8 @@ class << MultiTkIp
1572
1506
  end
1573
1507
 
1574
1508
  ip = __new(__getip, nil, keys)
1575
- #ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?
1576
1509
  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)
1510
+ ip._proc_on_safelevel(&blk).call(0)
1580
1511
  end
1581
1512
  ip
1582
1513
  end
@@ -1598,11 +1529,8 @@ class << MultiTkIp
1598
1529
  end
1599
1530
 
1600
1531
  ip = __new(__getip, false, keys)
1601
- # ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?
1602
1532
  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)
1533
+ ip._proc_on_safelevel(&blk).call(0)
1606
1534
  end
1607
1535
  ip
1608
1536
  end
@@ -1621,11 +1549,8 @@ class << MultiTkIp
1621
1549
  end
1622
1550
 
1623
1551
  ip = __new(__getip, true, keys)
1624
- # ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?
1625
1552
  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)
1553
+ ip._proc_on_safelevel(&blk).call(0)
1629
1554
  end
1630
1555
  ip
1631
1556
  end
@@ -1759,7 +1684,7 @@ class MultiTkIp
1759
1684
 
1760
1685
  def _add_new_tables
1761
1686
  (@@TK_TABLE_LIST.size - @tk_table_list.size).times{
1762
- @tk_table_list << TkUtil.untrust({})
1687
+ @tk_table_list << {}
1763
1688
  }
1764
1689
  end
1765
1690
 
@@ -1850,7 +1775,8 @@ class MultiTkIp
1850
1775
  return obj
1851
1776
  end
1852
1777
 
1853
- def self.init_ip_env(script = Proc.new)
1778
+ def self.init_ip_env(script = nil, &block)
1779
+ script ||= block
1854
1780
  @@INIT_IP_ENV << script
1855
1781
  if __getip.slave?
1856
1782
  begin
@@ -1911,82 +1837,12 @@ class MultiTkIp
1911
1837
  @@CB_ENTRY_CLASS.new(__getip, cmd).freeze
1912
1838
  end
1913
1839
 
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
1840
  def cb_eval(cmd, *args)
1929
1841
  self.eval_callback(*args,
1930
1842
  &_proc_on_safelevel{|*params|
1931
1843
  TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params))
1932
1844
  })
1933
1845
  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
1846
  end
1991
1847
 
1992
1848
  # pseudo-toplevel operation support
@@ -2038,15 +1894,6 @@ end
2038
1894
  if (!defined?(Use_PseudoToplevel_Feature_of_MultiTkIp) ||
2039
1895
  Use_PseudoToplevel_Feature_of_MultiTkIp)
2040
1896
  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
1897
  def pseudo_toplevel_evaluable?
2051
1898
  @pseudo_toplevel_evaluable
2052
1899
  end
@@ -2062,25 +1909,25 @@ if (!defined?(Use_PseudoToplevel_Feature_of_MultiTkIp) ||
2062
1909
  end
2063
1910
 
2064
1911
  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
1912
+ include(Module.new do
1913
+ private
1914
+ def method_missing(id, *args)
1915
+ begin
1916
+ has_top = (top = MultiTkIp.__getip.__pseudo_toplevel) &&
1917
+ top.respond_to?(:pseudo_toplevel_evaluable?) &&
1918
+ top.pseudo_toplevel_evaluable? &&
1919
+ top.respond_to?(id)
1920
+ rescue Exception => e
1921
+ has_top = false
1922
+ end
2077
1923
 
2078
- if has_top
2079
- top.__send__(id, *args)
2080
- else
2081
- __method_missing_alias_for_MultiTkIp__(id, *args)
1924
+ if has_top
1925
+ top.__send__(id, *args)
1926
+ else
1927
+ super
1928
+ end
2082
1929
  end
2083
- end
1930
+ end)
2084
1931
  end
2085
1932
  else
2086
1933
  # dummy
@@ -2104,22 +1951,8 @@ class MultiTkIp
2104
1951
  _proc_on_safelevel(&cmd)
2105
1952
  end
2106
1953
  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
1954
+ Proc.new{|_safe, *args|
1955
+ yield(*args)
2123
1956
  }
2124
1957
  end
2125
1958
  end
@@ -2128,9 +1961,8 @@ class MultiTkIp
2128
1961
  end
2129
1962
 
2130
1963
  def _proc_on_current_safelevel(cmd=nil, &blk) # require a block for eval
2131
- safe = $SAFE
2132
1964
  cmd = _proc_on_safelevel(cmd, &blk)
2133
- Proc.new{|*args| cmd.call(safe, *args)}
1965
+ Proc.new{|*args| cmd.call(0, *args)}
2134
1966
  end
2135
1967
  def MultiTkIp._proc_on_current_safelevel(cmd=nil, &blk)
2136
1968
  MultiTkIp.__getip._proc_on_current_safelevel(cmd, &blk)
@@ -2149,7 +1981,7 @@ class MultiTkIp
2149
1981
  if @cmd_receiver == Thread.current ||
2150
1982
  (!req_val && TclTkLib.mainloop_thread? != false) # callback
2151
1983
  begin
2152
- ret = cmd.call(safe_level, *args)
1984
+ ret = cmd.call(0, *args)
2153
1985
  rescue SystemExit => e
2154
1986
  # exit IP
2155
1987
  warn("Warning: "+ e.inspect + " on " + self.inspect) if $DEBUG
@@ -2232,12 +2064,8 @@ class MultiTkIp
2232
2064
 
2233
2065
  if false && WITH_RUBY_VM ### Ruby 1.9
2234
2066
  # 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
2067
+ def eval_callback(*args, &block)
2068
+ cmd = block || args.shift
2241
2069
  begin
2242
2070
  if @@CALLBACK_SUBTHREAD.table[self].index(Thread.current)
2243
2071
  last_th = nil
@@ -2258,12 +2086,8 @@ if false && WITH_RUBY_VM ### Ruby 1.9
2258
2086
  end
2259
2087
  end
2260
2088
  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
2089
+ def eval_callback(*args, &block)
2090
+ cmd = block || args.shift
2267
2091
  begin
2268
2092
  eval_proc_core(false, cmd, *args)
2269
2093
  rescue Exception=>e
@@ -2300,47 +2124,11 @@ end
2300
2124
  *args)
2301
2125
  end
2302
2126
  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
2127
  alias call eval_proc
2340
2128
 
2341
- def bg_eval_proc(*args)
2342
- if block_given?
2343
- cmd = Proc.new
2129
+ def bg_eval_proc(*args, &block)
2130
+ if block
2131
+ cmd = block
2344
2132
  else
2345
2133
  unless (cmd = args.shift)
2346
2134
  fail ArgumentError, "A Proc or Method object is expected for 1st argument"
@@ -2348,14 +2136,6 @@ end
2348
2136
  end
2349
2137
  Thread.new{
2350
2138
  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
2139
  }
2360
2140
  end
2361
2141
  alias background_eval_proc bg_eval_proc
@@ -2371,8 +2151,7 @@ end
2371
2151
 
2372
2152
  eval_proc_core(true,
2373
2153
  proc{|safe|
2374
- Kernel.eval("$SAFE=#{safe} if $SAFE < #{safe};" << cmd,
2375
- *eval_args)
2154
+ Kernel.eval(cmd, *eval_args)
2376
2155
  })
2377
2156
  end
2378
2157
  alias eval_str eval_string
@@ -2385,8 +2164,7 @@ end
2385
2164
  Thread.new{
2386
2165
  eval_proc_core(true,
2387
2166
  proc{|safe|
2388
- Kernel.eval("$SAFE=#{safe} if $SAFE < #{safe};" << cmd,
2389
- *eval_args)
2167
+ Kernel.eval(cmd, *eval_args)
2390
2168
  })
2391
2169
  }
2392
2170
  end
@@ -3348,21 +3126,22 @@ class MultiTkIp
3348
3126
  self
3349
3127
  end
3350
3128
 
3351
- def set_bgerror_handler(cmd = Proc.new, slave = nil, &b)
3129
+ def set_bgerror_handler(cmd = nil, slave = nil, &b)
3130
+ cmd ||= b
3352
3131
  raise SecurityError, "no permission to manipulate" unless self.manipulable?
3353
3132
 
3354
3133
  unless TkComm._callback_entry?(cmd)
3355
3134
  if !slave && b
3356
3135
  slave = cmd
3357
- cmd = Proc.new(&b)
3136
+ cmd = b
3358
3137
  end
3359
3138
  end
3360
3139
  slave = '' unless slave
3361
3140
 
3362
3141
  @interp._invoke('interp', 'bgerror', _slavearg(slave), cmd)
3363
3142
  end
3364
- def self.bgerror(cmd = Proc.new, slave = nil, &b)
3365
- __getip.bgerror(cmd, slave, &b)
3143
+ def self.bgerror(cmd = nil, slave = nil, &b)
3144
+ __getip.bgerror(cmd || b, slave, &b)
3366
3145
  end
3367
3146
 
3368
3147
  def get_bgerror_handler(slave = '')
@@ -3579,7 +3358,8 @@ class MultiTkIp
3579
3358
  ip._eval("::safe::interpFindInAccessPath #{@ip_name} #{dir}")
3580
3359
  end
3581
3360
 
3582
- def safeip_set_log_cmd(cmd = Proc.new)
3361
+ def safeip_set_log_cmd(cmd = nil, &block)
3362
+ cmd ||= block
3583
3363
  ip = MultiTkIp.__getip
3584
3364
  ip._eval("::safe::setLogCmd #{@ip_name} #{_get_eval_string(cmd)}")
3585
3365
  end