2003-08-01 00:58:55 -04:00
#!/usr/bin/env ruby
require 'multi-tk'
TkMessage . new ( :text = > <<EOM).pack
This is a sample of the safe - Tk slave interpreter . \
2004-09-13 03:25:02 -04:00
On the slave interpreter , 'tkoptdb.rb' demo is running .
( NOTE :: a safe - Tk interpreter can ' t read options \
2003-09-07 03:10:44 -04:00
from a file . Options are given by the master interpreter \
in this script . )
2003-08-01 00:58:55 -04:00
The window shown this message is a root widget of \
the default master interpreter . The other window \
is a toplevel widget of the master interpreter , and it \
2004-09-13 03:25:02 -04:00
has a container frame of the safe - Tk slave interpreter .
'exit' on the slave interpreter exits the slave only . \
You can also delete the slave by the button on the toplevel widget .
2003-08-01 00:58:55 -04:00
EOM
2003-09-07 03:10:44 -04:00
if ENV [ 'LANG' ] =~ / ^ja /
# read Japanese resource
ent = TkOptionDB . read_entries ( File . expand_path ( 'resource.ja' ,
File . dirname ( __FILE__ ) ) ,
'euc-jp' )
else
# read English resource
ent = TkOptionDB . read_entries ( File . expand_path ( 'resource.en' ,
File . dirname ( __FILE__ ) ) )
end
2003-08-01 00:58:55 -04:00
file = File . expand_path ( 'tkoptdb.rb' , File . dirname ( __FILE__ ) )
2004-09-02 13:17:20 -04:00
ip = MultiTkIp . new_safeTk {
# When a block is given to 'new_safeTk' method,
# the block is evaluated on $SAFE==4.
ent . each { | pat , val | Tk . tk_call ( 'option' , 'add' , pat , val ) }
}
2004-09-13 03:25:02 -04:00
print " ip.eval_proc{$SAFE} ==> " , ip . eval_proc { $SAFE } , " \n "
ret = ip . eval_proc {
2004-09-02 13:17:20 -04:00
# When a block is given to 'eval_proc' method,
# the block is evaluated on the IP's current safe level.
2004-09-13 03:25:02 -04:00
# So, the followings raises an exception.
# An Exception object of the exception is returned as a
# return value of this method.
2003-09-07 03:10:44 -04:00
load file
}
2004-09-13 03:25:02 -04:00
print " ip.eval_proc{}, which includes insecure operiation in the given block, returns an exception object: " , ret . inspect , " \n "
print " If a proc object is given, the proc is evaluated on the safe-level which is kept on the proc :: ip.eval_proc( proc{$SAFE} ) ==> " , ip . eval_proc ( proc { $SAFE } ) , " \n "
2004-09-02 13:17:20 -04:00
2004-09-13 03:25:02 -04:00
safe0_cmd = Proc . new {
# This proc object keeps current safe-level ($SAFE==0).
2004-09-02 13:17:20 -04:00
load file
2004-09-13 03:25:02 -04:00
}
ip . eval_proc ( safe0_cmd )
2004-09-02 13:17:20 -04:00
2003-09-07 03:10:44 -04:00
# Tk.mainloop is ignored on the slave-IP
2003-08-01 00:58:55 -04:00
2003-09-07 03:10:44 -04:00
Tk . mainloop