|
Revision 20224, 1.3 kB
(checked in by fujidig, 5 years ago)
|
|
文字列型変数をメモリ操作命令に対応。
HSPの文字列型変数の動作をエミュレートするように(代入しても内容と0の後ろに元の内容が残っているなど)
|
-
Property svn:executable set to
*
|
| Line | |
|---|
| 1 | #!/usr/bin/env ruby1.9 |
|---|
| 2 | message = IO.popen('hspcmp -d t.hsp'){|io|io.read} |
|---|
| 3 | if $?.exitstatus != 0 |
|---|
| 4 | puts message.encode(Encoding.default_external, 'cp932') |
|---|
| 5 | exit 1 |
|---|
| 6 | end |
|---|
| 7 | |
|---|
| 8 | dump = open('t.ax','rb'){|f|f.each_byte.each_slice(16).map{|i|"'%s'"%i.map{|j|'\x%02x'%j}.join}.join(",\n")} |
|---|
| 9 | a = open('run-in-shell.js','rb'){|f|f.read} |
|---|
| 10 | replaced = false |
|---|
| 11 | a = a.gsub(/^([ \t]*var data = \[\n).*?^([ \t]*\])/m) {replaced = true;"#{$1}#{dump}\n#{$2}"} |
|---|
| 12 | warn 'not replaced' unless replaced |
|---|
| 13 | open('run-in-shell.js', 'wb'){|f| f.write a} |
|---|
| 14 | |
|---|
| 15 | filenames = %w[ |
|---|
| 16 | binary-parser.js |
|---|
| 17 | cp932.js |
|---|
| 18 | utils.js |
|---|
| 19 | vcrandom.js |
|---|
| 20 | exception.js |
|---|
| 21 | axdata.js |
|---|
| 22 | instruction.js |
|---|
| 23 | builtin-func-names.js |
|---|
| 24 | builtin-funcs.js |
|---|
| 25 | vartype.js |
|---|
| 26 | value.js |
|---|
| 27 | label.js |
|---|
| 28 | str-value.js |
|---|
| 29 | double-value.js |
|---|
| 30 | int-value.js |
|---|
| 31 | jump-type.js |
|---|
| 32 | hsp-array.js |
|---|
| 33 | label-array.js |
|---|
| 34 | str-array.js |
|---|
| 35 | double-array.js |
|---|
| 36 | int-array.js |
|---|
| 37 | variable.js |
|---|
| 38 | variable-agent.js |
|---|
| 39 | compiler.js |
|---|
| 40 | evaluator.js |
|---|
| 41 | run-in-shell.js |
|---|
| 42 | ] |
|---|
| 43 | |
|---|
| 44 | if ARGV.delete('--for-win32-rhino') |
|---|
| 45 | open('for-win32-rhino.js','wb:cp932') do |out| |
|---|
| 46 | filenames.each do |filename| |
|---|
| 47 | open(filename, 'rb:utf-8') {|f| out.puts f.read } |
|---|
| 48 | end |
|---|
| 49 | end |
|---|
| 50 | system('rhino -w -f for-win32-rhino.js') |
|---|
| 51 | exit |
|---|
| 52 | end |
|---|
| 53 | |
|---|
| 54 | if ARGV.delete('--shell') |
|---|
| 55 | filenames << '-' |
|---|
| 56 | end |
|---|
| 57 | |
|---|
| 58 | if ARGV.delete('--rhino') |
|---|
| 59 | system(*%w[rhino -w]+filenames.map{|i|["-f", i]}.flatten) |
|---|
| 60 | else |
|---|
| 61 | system(*%w[js -s -w]+filenames.map{|i|["-f", i]}.flatten) |
|---|
| 62 | end |
|---|
| 63 | |
|---|