The Backyard - rb2exe.hta Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
<?xml version="1.0" encoding="shift_JIS"?>
<html>
<head>
<title>Rb2Exe</title>
<script type="text/RubyScript">
require 'stringio'
require 'dl/win32'
require 'exerb/config'
require 'exerb/utility'
require 'exerb/version'
WINDOW_WIDTH = 680
WINDOW_HEIGHT = 460
WSH = WIN32OLE.new('WScript.Shell')
def run
script = elem('script').value
return if check_script(script)
WSH.currentDirectory = File.dirname(script)
elem('runbutton').disabled = true
cmd = "\"#{RUBY_DIRECTORY}\\#{selected('command')}.bat\" #{make_options} #{File.basename(script)}"
cmd << " #{elem('params').value}" if mkexy?
execute(cmd, File.basename(script, '.*'))
end
def init
elem('info').innerHTML = version_html
init_core(Exerb::CORE_NAME.keys.sort.select do |core|
Exerb::Utility.find_core_by_name(core)
end)
Window.resizeTo WINDOW_WIDTH, WINDOW_HEIGHT
#Window.moveTo(100, 0)
end
def gen_exe(exy)
execute("\"#{RUBY_DIRECTORY}\\exerb.bat\" #{exy}")
end
private
def execute(cmd, file = nil)
exec = WSH.Exec(cmd)
out = ''
err = ''
timer = Window.setInterval(
Proc.new do
out << exec.stdOut.readAll
err << exec.stdErr.readAll
unless exec.status == 0 # 0: job is still running
Window.clearInterval(timer)
elem('runbutton').disabled = false
elem('result').innerHTML = create_html(out.strip, err.strip, file)
vanish false
end
end, 100)
end
def write_result(io, title, data)
io << '<h3>'
io << title
io << '</h3>'
return if data.size == 0
io << "<p><pre>\n"
io << data
io << "\n</pre></p>\n"
end
def add_exerb(io, fbase)
File.open("#{fbase}.exy", 'r') do |f|
write_result(io, "#{fbase}.exy", f.read)
end
io << '<div style="text-align: center;">'
io << "<input type=\"button\" onclick=\"gen_exe(\'#{fbase}.exy\');\" value=\"Exerb\">"
io << '</div>'
end
def create_html(out, err, fbase = nil)
io = StringIO.new(ret = '')
if out.size == 0 && err.size == 0
write_result(io, "#{(mkexy? && fbase) ? 'mkexy' : 'exerb'} success !", '')
else
if out.size > 0
write_result(io, '出力内容', out)
end
if err.size > 0
write_result(io, 'エラー', err)
end
end
if err.size == 0 && fbase && mkexy?
add_exerb(io, fbase)
end
io << '<p>---- click here ----</p>'
io.close
ret
end
def version_html
"Ruby #{RUBY_VERSION}<br/>Exerb #{Exerb::VERSION}"
end
def init_core(cores)
cores.each do |c|
opt = Window.document.createElement('OPTION')
elem('core').add opt
opt.innerText = c
opt.value = c
end
end
def check_script(script)
if !script || script.size == 0
msg = 'スクリプトファイルを選択してください'
elsif !File.exist?(script)
msg = "#{script}が見つかりません"
end
if msg
Window.alert msg
end
msg
end
def make_options
if mkexy?
"-K#{selected('kcode')[0..0]}"
else
"-c#{selected('core')} -k#{selected('kcode')}"
end
end
def toggle_param
[['coreparam', false], ['cmdparams', true]].each do |id, mkexy|
elem(id).style.display = (mkexy? == mkexy) ? 'inline' : 'none'
end
end
def elem(id)
Window.document.getElementById(id)
end
def selected(id)
elem(id).options.item(elem(id).selectedIndex).text
end
def mkexy?
selected('command') == 'mkexy'
end
def vanish(result)
[['result', true ], ['form', false], ['info', false]].each do |id, rx|
elem(id).style.display = (result == rx) ? 'none' : 'inline'
end
end
def ruby_path
get_module_handle = Win32API.new('Kernel32.dll', 'GetModuleHandleA', 'P', 'L')
hmodule = get_module_handle.call('msvcrt-ruby18.dll')
get_module_filename = Win32API.new('Kernel32.dll',
'GetModuleFileNameA', 'LPL', 'L')
buff = "\0" * 256
len = get_module_filename.call(hmodule, buff, 256)
if len == 256
Window.alert('bad direcotry name')
return nil
end
File.dirname(buff.rstrip)
end
RUBY_DIRECTORY = ruby_path
</script>
<style type="text/css">
body {
background-color: #b0e0e6;
}
div {
padding-top: 1em;
}
.options {
margin-right: 1em;
}
span#cmdparams {
margin-top: 1em;
width: 100%;
}
div#run {
margin-top: 1em;
margin-bottom: 0.5em;
margin-left: 30%;
margin-right: 30%;
text-align: center;
}
.button-separator {
width: 5%;
}
div#info {
position: absolute;
bottom: 0px;
width: 100%;
border-top: groove ;
text-align: right;
}
div#result {
background-color: #ffe4c4;
position: absolute;
top: 10;
left: 10;
width: 90%;
display: none;
}
</style>
</head>
<body scroll="auto" onload="init();">
<form id="form">
<div id="target">
<label for="script">スクリプトファイル</label>
<input id="script" type="file" size="64"/>
</div>
<div id="options">
<span class="options">
<label for="command">コマンド</label>
<select id="command" value="mkexy" onchange="toggle_param();">
<option>mkexy</option>
<option>exerb</option>
</select>
</span>
<span class="options">
<label for="kcode">文字コード</label>
<select id="kcode" value="sjis">
<option>sjis</option>
<option>utf8</option>
<option>euc</option>
<option>none</option>
</select>
</span>
<span id="coreparam" class="options" style="display: none;">
<label for="core">コア</label>
<select id="core">
</select>
</span>
<span id="cmdparams" style="display: inline;">
<label for="params">スクリプト実行パラメータ</label>
<input id="params" type="input" size="80"/>
</span>
</div>
<div id="run">
<input id="runbutton" type="button" onclick="run" value="実行"/>
<span class="button-separator"> </span>
<input type="reset"/>
</div>
</form>
<div id="result" onclick="vanish(true);"></div>
<div id="info"/>
</body>
</html>
<html>
<head>
<title>Rb2Exe</title>
<script type="text/RubyScript">
require 'stringio'
require 'dl/win32'
require 'exerb/config'
require 'exerb/utility'
require 'exerb/version'
WINDOW_WIDTH = 680
WINDOW_HEIGHT = 460
WSH = WIN32OLE.new('WScript.Shell')
def run
script = elem('script').value
return if check_script(script)
WSH.currentDirectory = File.dirname(script)
elem('runbutton').disabled = true
cmd = "\"#{RUBY_DIRECTORY}\\#{selected('command')}.bat\" #{make_options} #{File.basename(script)}"
cmd << " #{elem('params').value}" if mkexy?
execute(cmd, File.basename(script, '.*'))
end
def init
elem('info').innerHTML = version_html
init_core(Exerb::CORE_NAME.keys.sort.select do |core|
Exerb::Utility.find_core_by_name(core)
end)
Window.resizeTo WINDOW_WIDTH, WINDOW_HEIGHT
#Window.moveTo(100, 0)
end
def gen_exe(exy)
execute("\"#{RUBY_DIRECTORY}\\exerb.bat\" #{exy}")
end
private
def execute(cmd, file = nil)
exec = WSH.Exec(cmd)
out = ''
err = ''
timer = Window.setInterval(
Proc.new do
out << exec.stdOut.readAll
err << exec.stdErr.readAll
unless exec.status == 0 # 0: job is still running
Window.clearInterval(timer)
elem('runbutton').disabled = false
elem('result').innerHTML = create_html(out.strip, err.strip, file)
vanish false
end
end, 100)
end
def write_result(io, title, data)
io << '<h3>'
io << title
io << '</h3>'
return if data.size == 0
io << "<p><pre>\n"
io << data
io << "\n</pre></p>\n"
end
def add_exerb(io, fbase)
File.open("#{fbase}.exy", 'r') do |f|
write_result(io, "#{fbase}.exy", f.read)
end
io << '<div style="text-align: center;">'
io << "<input type=\"button\" onclick=\"gen_exe(\'#{fbase}.exy\');\" value=\"Exerb\">"
io << '</div>'
end
def create_html(out, err, fbase = nil)
io = StringIO.new(ret = '')
if out.size == 0 && err.size == 0
write_result(io, "#{(mkexy? && fbase) ? 'mkexy' : 'exerb'} success !", '')
else
if out.size > 0
write_result(io, '出力内容', out)
end
if err.size > 0
write_result(io, 'エラー', err)
end
end
if err.size == 0 && fbase && mkexy?
add_exerb(io, fbase)
end
io << '<p>---- click here ----</p>'
io.close
ret
end
def version_html
"Ruby #{RUBY_VERSION}<br/>Exerb #{Exerb::VERSION}"
end
def init_core(cores)
cores.each do |c|
opt = Window.document.createElement('OPTION')
elem('core').add opt
opt.innerText = c
opt.value = c
end
end
def check_script(script)
if !script || script.size == 0
msg = 'スクリプトファイルを選択してください'
elsif !File.exist?(script)
msg = "#{script}が見つかりません"
end
if msg
Window.alert msg
end
msg
end
def make_options
if mkexy?
"-K#{selected('kcode')[0..0]}"
else
"-c#{selected('core')} -k#{selected('kcode')}"
end
end
def toggle_param
[['coreparam', false], ['cmdparams', true]].each do |id, mkexy|
elem(id).style.display = (mkexy? == mkexy) ? 'inline' : 'none'
end
end
def elem(id)
Window.document.getElementById(id)
end
def selected(id)
elem(id).options.item(elem(id).selectedIndex).text
end
def mkexy?
selected('command') == 'mkexy'
end
def vanish(result)
[['result', true ], ['form', false], ['info', false]].each do |id, rx|
elem(id).style.display = (result == rx) ? 'none' : 'inline'
end
end
def ruby_path
get_module_handle = Win32API.new('Kernel32.dll', 'GetModuleHandleA', 'P', 'L')
hmodule = get_module_handle.call('msvcrt-ruby18.dll')
get_module_filename = Win32API.new('Kernel32.dll',
'GetModuleFileNameA', 'LPL', 'L')
buff = "\0" * 256
len = get_module_filename.call(hmodule, buff, 256)
if len == 256
Window.alert('bad direcotry name')
return nil
end
File.dirname(buff.rstrip)
end
RUBY_DIRECTORY = ruby_path
</script>
<style type="text/css">
body {
background-color: #b0e0e6;
}
div {
padding-top: 1em;
}
.options {
margin-right: 1em;
}
span#cmdparams {
margin-top: 1em;
width: 100%;
}
div#run {
margin-top: 1em;
margin-bottom: 0.5em;
margin-left: 30%;
margin-right: 30%;
text-align: center;
}
.button-separator {
width: 5%;
}
div#info {
position: absolute;
bottom: 0px;
width: 100%;
border-top: groove ;
text-align: right;
}
div#result {
background-color: #ffe4c4;
position: absolute;
top: 10;
left: 10;
width: 90%;
display: none;
}
</style>
</head>
<body scroll="auto" onload="init();">
<form id="form">
<div id="target">
<label for="script">スクリプトファイル</label>
<input id="script" type="file" size="64"/>
</div>
<div id="options">
<span class="options">
<label for="command">コマンド</label>
<select id="command" value="mkexy" onchange="toggle_param();">
<option>mkexy</option>
<option>exerb</option>
</select>
</span>
<span class="options">
<label for="kcode">文字コード</label>
<select id="kcode" value="sjis">
<option>sjis</option>
<option>utf8</option>
<option>euc</option>
<option>none</option>
</select>
</span>
<span id="coreparam" class="options" style="display: none;">
<label for="core">コア</label>
<select id="core">
</select>
</span>
<span id="cmdparams" style="display: inline;">
<label for="params">スクリプト実行パラメータ</label>
<input id="params" type="input" size="80"/>
</span>
</div>
<div id="run">
<input id="runbutton" type="button" onclick="run" value="実行"/>
<span class="button-separator"> </span>
<input type="reset"/>
</div>
</form>
<div id="result" onclick="vanish(true);"></div>
<div id="info"/>
</body>
</html>