exerb 6.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/ChangeLog.ja.rd +305 -0
  4. data/README.en.txt +12 -0
  5. data/README.ja.html +143 -0
  6. data/README.ja.txt +6 -0
  7. data/README.md +50 -0
  8. data/Rakefile +205 -0
  9. data/bin/exerb +185 -0
  10. data/bin/mkexy +47 -0
  11. data/doc/LGPL +513 -0
  12. data/doc/class.ja.html +92 -0
  13. data/doc/command.ja.html +109 -0
  14. data/doc/core.ja.html +72 -0
  15. data/doc/example.ja.html +89 -0
  16. data/doc/faq.ja.html +59 -0
  17. data/doc/inside.ja.rd +404 -0
  18. data/doc/license.ja.html +62 -0
  19. data/doc/logo.gif +0 -0
  20. data/doc/misc.ja.html +72 -0
  21. data/doc/navi.gif +0 -0
  22. data/doc/recipe.ja.html +317 -0
  23. data/doc/style.css +187 -0
  24. data/doc/tutorial.ja.html +182 -0
  25. data/example/Makefile +54 -0
  26. data/example/cat_n.rb +14 -0
  27. data/example/exception.rb +9 -0
  28. data/example/ext/Win32API.so +0 -0
  29. data/example/ext/swin.so +0 -0
  30. data/example/msgbox.rb +14 -0
  31. data/example/rubytk.rb +22 -0
  32. data/example/runtime.ico +0 -0
  33. data/example/runtime.rb +19 -0
  34. data/example/vr/clipboard.rb +106 -0
  35. data/example/vr/compat/rubycompat.rb +18 -0
  36. data/example/vr/compat/vrcomctl.rb +12 -0
  37. data/example/vr/compat/vrcontrol.rb +50 -0
  38. data/example/vr/compat/vrmmedia.rb +24 -0
  39. data/example/vr/contrib/inifile.rb +116 -0
  40. data/example/vr/contrib/msgboxconst.rb +55 -0
  41. data/example/vr/contrib/toolbar.rb +371 -0
  42. data/example/vr/contrib/vrctlcolor.rb +110 -0
  43. data/example/vr/contrib/vrhotkey.rb +35 -0
  44. data/example/vr/contrib/vrlistviewex.rb +71 -0
  45. data/example/vr/contrib/vrstdscrollbar.rb +414 -0
  46. data/example/vr/contrib/vrwincomponent.rb +54 -0
  47. data/example/vr/dragdropformat.rb +209 -0
  48. data/example/vr/rscutil.rb +168 -0
  49. data/example/vr/sysmod.rb +249 -0
  50. data/example/vr/vractivex.rb +56 -0
  51. data/example/vr/vrclipboard.rb +53 -0
  52. data/example/vr/vrcomctl.rb +1819 -0
  53. data/example/vr/vrcontrol.rb +1374 -0
  54. data/example/vr/vrdde.rb +623 -0
  55. data/example/vr/vrddrop.rb +190 -0
  56. data/example/vr/vrdialog.rb +406 -0
  57. data/example/vr/vrhandler.rb +195 -0
  58. data/example/vr/vrlayout.old.rb +209 -0
  59. data/example/vr/vrlayout.rb +173 -0
  60. data/example/vr/vrlayout2.rb +340 -0
  61. data/example/vr/vrmargin.rb +141 -0
  62. data/example/vr/vrmgdlayout.rb +381 -0
  63. data/example/vr/vrmmedia.rb +287 -0
  64. data/example/vr/vrolednd.rb +192 -0
  65. data/example/vr/vrowndraw.rb +108 -0
  66. data/example/vr/vrrichedit.rb +366 -0
  67. data/example/vr/vrtimer.rb +148 -0
  68. data/example/vr/vrtooltip.rb +273 -0
  69. data/example/vr/vrtray.rb +143 -0
  70. data/example/vr/vrtvitem.rb +118 -0
  71. data/example/vr/vrtwopane.rb +223 -0
  72. data/example/vr/vruby.rb +1051 -0
  73. data/example/vr/winconst.rb +158 -0
  74. data/example/vruby.rb +38 -0
  75. data/exerb.gemspec +26 -0
  76. data/extconf.rb +7 -0
  77. data/lib/exerb/archive.rb +143 -0
  78. data/lib/exerb/config.rb +51 -0
  79. data/lib/exerb/error.rb +15 -0
  80. data/lib/exerb/executable.rb +68 -0
  81. data/lib/exerb/file_table.rb +189 -0
  82. data/lib/exerb/mkexy.rb +81 -0
  83. data/lib/exerb/name_table.rb +120 -0
  84. data/lib/exerb/recipe.rb +465 -0
  85. data/lib/exerb/resource.rb +190 -0
  86. data/lib/exerb/resource/base.rb +29 -0
  87. data/lib/exerb/resource/binary.rb +31 -0
  88. data/lib/exerb/resource/dialog.rb +30 -0
  89. data/lib/exerb/resource/group_icon.rb +85 -0
  90. data/lib/exerb/resource/icon.rb +52 -0
  91. data/lib/exerb/resource/version_info.rb +155 -0
  92. data/lib/exerb/resource_library.rb +120 -0
  93. data/lib/exerb/utility.rb +95 -0
  94. data/lib/exerb/utility2.rb +122 -0
  95. data/lib/exerb/version.rb +13 -0
  96. data/lib/exerb/win32/const/resource.rb +51 -0
  97. data/lib/exerb/win32/icon_file.rb +78 -0
  98. data/lib/exerb/win32/pe_file.rb +59 -0
  99. data/lib/exerb/win32/resource_directory.rb +105 -0
  100. data/lib/exerb/win32/resource_directory_root.rb +67 -0
  101. data/lib/exerb/win32/resource_entry.rb +98 -0
  102. data/lib/exerb/win32/struct/base.rb +43 -0
  103. data/lib/exerb/win32/struct/icon_dir_entry.rb +83 -0
  104. data/lib/exerb/win32/struct/icon_header.rb +43 -0
  105. data/lib/exerb/win32/struct/icon_res_entry.rb +48 -0
  106. data/lib/exerb/win32/struct/image_dos_header.rb +73 -0
  107. data/lib/exerb/win32/struct/image_file_header.rb +47 -0
  108. data/lib/exerb/win32/struct/image_nt_headers32.rb +53 -0
  109. data/lib/exerb/win32/struct/image_optional_header32.rb +107 -0
  110. data/lib/exerb/win32/struct/image_resource_data_entry.rb +45 -0
  111. data/lib/exerb/win32/struct/image_resource_directory.rb +47 -0
  112. data/lib/exerb/win32/struct/image_resource_directory_entry.rb +72 -0
  113. data/lib/exerb/win32/struct/image_section_header.rb +53 -0
  114. data/lib/exerb/win32/struct/version_info_block.rb +75 -0
  115. data/lib/exerb/win32/struct/vs_fixed_file_info.rb +62 -0
  116. data/src/exerb/cui.c +48 -0
  117. data/src/exerb/default.rb +1 -0
  118. data/src/exerb/exerb.c +877 -0
  119. data/src/exerb/exerb.h +92 -0
  120. data/src/exerb/gui.c +176 -0
  121. data/src/exerb/module.c +138 -0
  122. data/src/exerb/module.h +7 -0
  123. data/src/exerb/patch.c +27 -0
  124. data/src/exerb/resource.h +22 -0
  125. data/src/exerb/resource.rc +121 -0
  126. data/src/exerb/ruby.ico +0 -0
  127. data/src/exerb/utility.c +263 -0
  128. data/src/exerb/utility.h +33 -0
  129. data/test/alltests.rb +16 -0
  130. data/test/test-argv.rb +26 -0
  131. data/test/test-argv/test-argv.rb +9 -0
  132. data/test/test-argv/test-argv.ret +1 -0
  133. data/test/test-dollarzero.rb +26 -0
  134. data/test/test-dollarzero/test-dollarzero.rb +10 -0
  135. data/test/test-dollarzero/test-dollarzero.ret +2 -0
  136. data/test/test-dot.rb +26 -0
  137. data/test/test-dot/dot.dot.dot.rb +9 -0
  138. data/test/test-dot/dot.dot.rb +9 -0
  139. data/test/test-dot/test-dot.rb +13 -0
  140. data/test/test-dot/test-dot.ret +5 -0
  141. data/test/test-exitcode.rb +28 -0
  142. data/test/test-exitcode/test-exitcode.rb +9 -0
  143. data/test/test-kcode.rb +43 -0
  144. data/test/test-kcode/euc.rb +10 -0
  145. data/test/test-kcode/euc.ret +2 -0
  146. data/test/test-kcode/none.rb +10 -0
  147. data/test/test-kcode/none.ret +2 -0
  148. data/test/test-kcode/sjis.rb +10 -0
  149. data/test/test-kcode/sjis.ret +2 -0
  150. data/test/test-kcode/utf8.rb +10 -0
  151. data/test/test-kcode/utf8.ret +2 -0
  152. data/test/test-loadpath.rb +24 -0
  153. data/test/test-loadpath/test-loadpath.rb +9 -0
  154. data/test/test-nest.rb +18 -0
  155. data/test/test-nest/foo.rb +1 -0
  156. data/test/test-nest/foo/bar.rb +2 -0
  157. data/test/test-nest/foo/foo.rb +1 -0
  158. data/test/test-nest/test-nest.rb +1 -0
  159. data/test/test-nest/test-nest.ret +1 -0
  160. data/test/test-preload.rb +24 -0
  161. data/test/test-preload/test-preload.rb +9 -0
  162. data/test/test-regexp.rb +26 -0
  163. data/test/test-regexp/test-regexp.rb +23 -0
  164. data/test/test-regexp/test-regexp.ret +13 -0
  165. data/test/test-require1.rb +26 -0
  166. data/test/test-require1/require1.rb +9 -0
  167. data/test/test-require1/require2.rb +9 -0
  168. data/test/test-require1/require3.rb +9 -0
  169. data/test/test-require1/require4.rb +9 -0
  170. data/test/test-require1/require5.rb +9 -0
  171. data/test/test-require1/require6.rb +9 -0
  172. data/test/test-require1/test-require1.rb +41 -0
  173. data/test/test-require1/test-require1.ret +27 -0
  174. data/test/test-socket.rb +26 -0
  175. data/test/test-socket/test-socket.rb +7 -0
  176. data/test/test-socket/test-socket.ret +1 -0
  177. data/test/testcase.rb +66 -0
  178. data/vendor/mkexports.rb +167 -0
  179. metadata +352 -0
@@ -0,0 +1,158 @@
1
+ ###################################
2
+ #
3
+ # winconst.rb
4
+ # Programmed by nyasu <nyasu@osk.3web.ne.jp>
5
+ # Copyright 1999-2005 Nishikawa,Yasuhiro
6
+ #
7
+ # More information at http://vruby.sourceforge.net/index.html
8
+ #
9
+ ###################################
10
+
11
+
12
+ #######################################
13
+ # Win Constants and utils
14
+ #
15
+ module WMsg
16
+ WM_NULL = 0x0000
17
+ WM_CREATE = 0x0001
18
+ WM_DESTROY = 0x0002
19
+ WM_MOVE = 0x0003
20
+ WM_SIZE = 0x0005
21
+ WM_ACTIVATE = 0x0006
22
+ WM_SETFOCUS = 0x0007
23
+ WM_KILLFOCUS = 0x0008
24
+ WM_ENABLE = 0x000A
25
+ WM_SETREDRAW = 0x000B
26
+ WM_SETTEXT = 0x000C
27
+ WM_GETTEXT = 0x000D
28
+ WM_GETTEXTLENGTH = 0x000E
29
+ WM_PAINT = 0x000F
30
+ WM_CLOSE = 0x0010
31
+ WM_QUERYENDSESSION= 0x0011
32
+ WM_QUIT = 0x0012
33
+ WM_QUERYOPEN = 0x0013
34
+ WM_ERASEBKGND = 0x0014
35
+ WM_SYSCOLORCHANGE = 0x0015
36
+ WM_ENDSESSION = 0x0016
37
+ WM_SHOWWINDOW = 0x0018
38
+ WM_WININICHANGE = 0x001A
39
+ WM_SETTINGCHANGE = WM_WININICHANGE
40
+ WM_DEVMODECHANGE = 0x001B
41
+ WM_ACTIVATEAPP = 0x001C
42
+ WM_FONTCHANGE = 0x001D
43
+ WM_TIMECHANGE = 0x001E
44
+ WM_CANCELMODE = 0x001F
45
+ WM_SETCURSOR = 0x0020
46
+ WM_MOUSEACTIVATE = 0x0021
47
+ WM_CHILDACTIVATE = 0x0022
48
+ WM_QUEUESYNC = 0x0023
49
+ WM_GETMINMAXINFO = 0x0024
50
+ WM_NOTIFY = 0x004E
51
+ WM_KEYDOWN = 0x0100
52
+ WM_KEYUP = 0x0101
53
+ WM_CHAR = 0x0102
54
+ WM_COMMAND = 0x0111
55
+ #
56
+ WM_MOUSEFIRST = 0x0200
57
+ WM_MOUSEMOVE = 0x0200
58
+ WM_LBUTTONDOWN = 0x0201
59
+ WM_LBUTTONUP = 0x0202
60
+ WM_LBUTTONDBLCLK = 0x0203
61
+ WM_RBUTTONDOWN = 0x0204
62
+ WM_RBUTTONUP = 0x0205
63
+ WM_RBUTTONDBLCLK = 0x0206
64
+ WM_MBUTTONDOWN = 0x0207
65
+ WM_MBUTTONUP = 0x0208
66
+ WM_MBUTTONDBLCLK = 0x0209
67
+ WM_MOUSEWHEEL = 0x020A
68
+ WM_MOUSELAST = 0x020A
69
+ WM_DROPFILES = 0x0233
70
+ #
71
+ WM_CUT = 0x0300
72
+ WM_COPY = 0x0301
73
+ WM_PASTE = 0x0302
74
+ WM_CLEAR = 0x0303
75
+ WM_UNDO = 0x0304
76
+
77
+ WM_HOTKEY = 0x0312
78
+ WM_USER = 0x0400
79
+ WM_APP = 0x8000
80
+ end
81
+
82
+ module WStyle
83
+ WS_OVERLAPPED = 0
84
+ WS_TABSTOP = 0x00010000
85
+ WS_GROUP = 0x00020000
86
+ WS_THICKFRAME = 0x00040000
87
+ WS_SYSMENU = 0x00080000
88
+ WS_HSCROLL = 0x00100000
89
+ WS_VSCROLL = 0x00200000
90
+ WS_DLGFRAME = 0x00400000
91
+ WS_BORDER = 0x00800000
92
+ WS_CAPTION = 0x00c00000
93
+ WS_MAXIMIZE = 0x01000000
94
+ WS_CLIPCHILDREN = 0x02000000
95
+ WS_CLIPSIBLINGS = 0x04000000
96
+ WS_DISABLED = 0x08000000
97
+ WS_VISIBLE = 0x10000000
98
+ WS_MINIMIZE = 0x20000000
99
+ WS_CHILD = 0x40000000
100
+ WS_POPUP = 0x80000000
101
+ WS_VISIBLECHILD = 0x50000000 # for util
102
+
103
+ #followings are contributed by Yuya-san.
104
+ WS_ICONIC = 0x20000000
105
+ WS_CHILDWINDOW = 0x40000000
106
+ WS_MAXIMIZEBOX = 0x10000
107
+ WS_MINIMIZEBOX = 0x20000
108
+ WS_OVERLAPPEDWINDOW = 0xCF0000
109
+ WS_POPUPWINDOW = 0x80880000
110
+ WS_SIZEBOX = 0x40000
111
+ WS_TILED = 0
112
+ WS_TILEDWINDOW = 0xCF0000
113
+ end
114
+
115
+ module WExStyle
116
+ WS_EX_TOPMOST = 0x00000008
117
+ WS_EX_TRANSPARENT = 0x00000020
118
+ WS_EX_MDICHILD = 0x00000040
119
+ WS_EX_TOOLWINDOW = 0x00000080
120
+ WS_EX_CLIENTEDGE = 0x00000200
121
+ WS_EX_APPWINDOW = 0x00040000
122
+ end
123
+
124
+ =begin
125
+ == Global Functions
126
+ These are utility functions instead of macros.
127
+ === Functions
128
+ --- LOWORD(lParam)
129
+ Returns low-word of lParam
130
+ --- HIWORD(lParam)
131
+ Returns hi-word of lParam
132
+ --- MAKELPARAM(w1,w2)
133
+ Returns the DWORD from 2 words of w1,w2.
134
+ --- SIGNEDWORD(word)
135
+ changes unsigned WORD into signed WORD.
136
+ --- RGB(r,g,b)
137
+ returns color code from r,g,b.
138
+ =end
139
+
140
+ def LOWORD(lParam)
141
+ return (lParam & 0xffff)
142
+ end
143
+ def HIWORD(lParam)
144
+ return ( (lParam>>16) & 0xffff)
145
+ end
146
+ def MAKELPARAM(w1,w2)
147
+ return (w2<<16) | w1
148
+ end
149
+
150
+ def SIGNEDWORD(word)
151
+ if word>0x8000 then word-0x10000 else word end
152
+ end
153
+
154
+
155
+ def RGB(r,g,b)
156
+ return r+(g<<8)+(b<<16)
157
+ end
158
+
@@ -0,0 +1,38 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: vruby.rb,v 1.1 2006/07/06 01:35:22 yuya Exp $
4
+ #==============================================================================#
5
+
6
+ require 'vr/vruby'
7
+ require 'vr/vrcontrol'
8
+
9
+ #==============================================================================#
10
+
11
+ class MyForm < VRForm
12
+
13
+ def construct
14
+ self.caption = 'Example'
15
+ self.move(100, 100, 150, 160)
16
+ self.addControl(VRButton, 'cmd_exit', 'Exit', 20, 20, 100, 40)
17
+ self.addControl(VRButton, 'cmd_raise', 'Exception', 20, 70, 100, 40)
18
+ end
19
+
20
+ def cmd_exit_clicked
21
+ messageBox('exit', 'Example', 0)
22
+ exit
23
+ end
24
+
25
+ def cmd_raise_clicked
26
+ messageBox('raising an exception from now.', 'Example', 0)
27
+ raise('This is an exception.')
28
+ end
29
+
30
+ end
31
+
32
+ #==============================================================================#
33
+
34
+ VRLocalScreen.showForm(MyForm)
35
+ VRLocalScreen.messageloop
36
+
37
+ #==============================================================================#
38
+ #==============================================================================#
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'exerb/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "exerb"
8
+ spec.version = Exerb::VERSION
9
+ spec.authors = ["windwiny"]
10
+ spec.email = ["windwiny.ubt@gmail.com"]
11
+
12
+ spec.extensions = ['extconf.rb']
13
+ spec.summary = %q{Packaged *.rb *.so *.dll into alone.exe file.}
14
+ spec.description = %q{Exerb support for mingw/rubyinstaller. Packaged ruby source files and ruby extensions files into a single PE executable file.}
15
+ spec.homepage = "https://github.com/windwiny/exerb-mingw"
16
+ spec.license = "MIT"
17
+
18
+ spec.files = `git ls-files -z`.split("\x0")
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.6"
24
+ spec.add_development_dependency "rake", "> 0.1"
25
+ spec.add_development_dependency "rake-compiler", "> 0.1"
26
+ end
@@ -0,0 +1,7 @@
1
+ ARGV.unshift("generate")
2
+ load Gem.bin_path('rake', 'rake')
3
+ ARGV.shift if ARGV.first == "generate"
4
+
5
+ ## ------- fake extensions
6
+ STDERR.puts("==== fake extensions ====")
7
+ File.write('Makefile', "clean:\ndefault:\ninstall:\n")
@@ -0,0 +1,143 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: archive.rb,v 1.38 2007/02/26 10:59:31 yuya Exp $
4
+ #==============================================================================#
5
+
6
+ require 'exerb/name_table'
7
+ require 'exerb/file_table'
8
+
9
+ #==============================================================================#
10
+
11
+ module Exerb
12
+ end # Exerb
13
+
14
+ #==============================================================================#
15
+
16
+ class Exerb::Archive
17
+
18
+ def initialize(kcode = 'none')
19
+ @name_table = Exerb::NameTable.new
20
+ @file_table = Exerb::FileTable.new
21
+ @kcode = kcode
22
+ end
23
+
24
+ attr_reader :name_table, :file_table
25
+ attr_accessor :kcode
26
+
27
+ def add(name, data, flag = 0)
28
+ @file_table.add(@name_table.add(name), data, flag)
29
+ end
30
+
31
+ def add_from_file(name, path, flag = 0)
32
+ @file_table.add_from_file(@name_table.add(name), path, flag)
33
+ end
34
+
35
+ def add_ruby_script(name, data, flag = 0)
36
+ @file_table.add_ruby_script(@name_table.add(name), data, flag)
37
+ end
38
+
39
+ def add_ruby_script_from_file(name, path, flag = 0)
40
+ @file_table.add_ruby_script_from_file(@name_table.add(name), path, flag)
41
+ end
42
+
43
+ def add_extension_library(name, data, flag = 0)
44
+ @file_table.add_extension_library(@name_table.add(name), data, flag)
45
+ end
46
+
47
+ def add_extension_library_from_file(name, path, flag = 0)
48
+ @file_table.add_extension_library_from_file(@name_table.add(name), path, flag)
49
+ end
50
+
51
+ def add_dynamic_library(name, data, flag = 0)
52
+ @file_table.add_dynamic_library(@name_table.add(name), data, flag)
53
+ end
54
+
55
+ def add_dynamic_library_from_file(path, flag = 0)
56
+ @file_table.add_dynamic_library_from_file(@name_table.add(File.basename(path)), path, flag)
57
+ end
58
+
59
+ def add_resource_library(name, data, flag = 0)
60
+ @file_table.add_resource_library(@name_table.add(name), data, flag)
61
+ end
62
+
63
+ def add_resource_library_from_file(path, flag = 0)
64
+ @file_table.add_resource_library_from_file(@name_table.add(File.basename(path)), path, flag)
65
+ end
66
+
67
+ def add_data_binary(name, data, flag = 0)
68
+ @file_table.add_data_binary(@name_table.add(name), data, flag)
69
+ end
70
+
71
+ def add_data_binary_from_file(name, path, flag = 0)
72
+ @file_table.add_data_binary_from_file(@name_table.add(name), path, flag)
73
+ end
74
+
75
+ def add_compiled_script(name, data, flag = 0)
76
+ @file_table.add_compiled_script(@name_table.add(name), data, flag)
77
+ end
78
+
79
+ def add_compiled_script_from_file(name, path, flag = 0)
80
+ @file_table.add_compiled_script_from_file(@name_table.add(name), path, flag)
81
+ end
82
+
83
+ def pack
84
+ case @kcode.downcase.delete('-')
85
+ when 'n', 'none' then options = Exerb::Archive::Header::OPTIONS_KCODE_NONE
86
+ when 'e', 'euc' then options = Exerb::Archive::Header::OPTIONS_KCODE_EUC
87
+ when 's', 'sjis' then options = Exerb::Archive::Header::OPTIONS_KCODE_SJIS
88
+ when 'u', 'utf8' then options = Exerb::Archive::Header::OPTIONS_KCODE_UTF8
89
+ else raise(ExerbError, "unkown kanji code [#{@kcode}]")
90
+ end
91
+
92
+ packed_name_table = @name_table.pack
93
+ packed_file_table = @file_table.pack
94
+
95
+ archive_header = Exerb::Archive::Header.new
96
+ archive_header.signature1 = Exerb::Archive::Header::SIGNATURE1
97
+ archive_header.signature2 = Exerb::Archive::Header::SIGNATURE2
98
+ archive_header.options = options
99
+ archive_header.offset_of_name_table = Exerb::Utility.alignment16(archive_header.pack).size
100
+ archive_header.offset_of_file_table = archive_header.offset_of_name_table + packed_name_table.size
101
+
102
+ return Exerb::Utility.alignment16(archive_header.pack) + packed_name_table + packed_file_table
103
+ end
104
+
105
+ def write_to(io)
106
+ io.write(self.pack)
107
+ end
108
+
109
+ def write_to_file(filepath)
110
+ File.open(filepath, 'wb') { |file| self.write_to(file) }
111
+ end
112
+
113
+ end # Exerb::Archive
114
+
115
+ #==============================================================================#
116
+
117
+ class Exerb::Archive::Header
118
+
119
+ SIGNATURE1 = 0x52455845
120
+ SIGNATURE2 = 0x04000042
121
+ OPTIONS_KCODE_NONE = 0
122
+ OPTIONS_KCODE_EUC = 1
123
+ OPTIONS_KCODE_SJIS = 2
124
+ OPTIONS_KCODE_UTF8 = 3
125
+
126
+ def initialize
127
+ @signature1 = 0
128
+ @signature2 = 0
129
+ @options = 0
130
+ @offset_of_name_table = 0
131
+ @offset_of_file_table = 0
132
+ end
133
+
134
+ attr_accessor :signature1, :signature2, :options, :offset_of_name_table, :offset_of_file_table
135
+
136
+ def pack
137
+ return [@signature1, @signature2, @options, @offset_of_name_table, @offset_of_file_table].pack('LLLLL')
138
+ end
139
+
140
+ end # Exerb::Archive::Header
141
+
142
+ #==============================================================================#
143
+ #==============================================================================#
@@ -0,0 +1,51 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: config.rb,v 1.23 2008/06/13 23:54:45 arton Exp $
4
+ #==============================================================================#
5
+
6
+ require 'rbconfig'
7
+
8
+ #==============================================================================#
9
+
10
+ module Exerb
11
+ ver = RUBY_VERSION.gsub('.','')
12
+
13
+ # Search directories of a core.
14
+ # If running exerb on exerb, Add self path to the search directories of a core.
15
+ CORE_PATH = [
16
+ (File.dirname(ExerbRuntime.filepath) if defined?(ExerbRuntime)),
17
+ ENV['EXERBCORE'],
18
+ File.expand_path('../../../data/exerb', __FILE__),
19
+ File.join(RbConfig::CONFIG['datadir'], 'exerb')
20
+ ].compact
21
+
22
+ # Name definitions of a core.
23
+ CORE_NAME = {
24
+ 'cui' => "ruby#{ver}c.exc",
25
+ 'cuid' => "ruby#{ver}cd.exc",
26
+ 'cuirt' => "ruby#{ver}crt.exc",
27
+ 'cuirtd' => "ruby#{ver}crtd.exc",
28
+ 'gui' => "ruby#{ver}g.exc",
29
+ 'guid' => "ruby#{ver}gd.exc",
30
+ 'guirt' => "ruby#{ver}grt.exc",
31
+ 'guirtd' => "ruby#{ver}grtd.exc",
32
+ }
33
+
34
+ # Descriptions of a core.
35
+ CORE_DESC = {
36
+ # FIXME: Add descriptions
37
+ # "ruby#{ver}c.exc" => '...',
38
+ }
39
+
40
+ end # Exerb
41
+
42
+ #==============================================================================#
43
+
44
+ # Load a configuration file of Exerb Core Collection if found that.
45
+ configcc = File.join(File.dirname(__FILE__), 'configcc.rb')
46
+ if File.exist?(configcc)
47
+ require(configcc)
48
+ end
49
+
50
+ #==============================================================================#
51
+ #==============================================================================#
@@ -0,0 +1,15 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: error.rb,v 1.2 2005/04/17 15:17:26 yuya Exp $
4
+ #==============================================================================#
5
+
6
+ module Exerb
7
+ end # Exerb
8
+
9
+ #==============================================================================#
10
+
11
+ class Exerb::ExerbError < StandardError
12
+ end # Exerb::ExerbError
13
+
14
+ #==============================================================================#
15
+ #==============================================================================#
@@ -0,0 +1,68 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: executable.rb,v 1.21 2005/05/03 13:47:01 yuya Exp $
4
+ #==============================================================================#
5
+
6
+ require 'exerb/utility'
7
+ require 'exerb/archive'
8
+ require 'exerb/error'
9
+ require 'exerb/resource'
10
+ require 'exerb/win32/pe_file'
11
+
12
+ #==============================================================================#
13
+
14
+ module Exerb
15
+ end # Exerb
16
+
17
+ #==============================================================================#
18
+
19
+ class Exerb::Executable
20
+
21
+ def initialize(core)
22
+ @core = core
23
+ @rsrc = Exerb::Resource.new_from_pe_binary(@core)
24
+ end
25
+
26
+ attr_reader :core
27
+ attr_accessor :rsrc
28
+
29
+ def self.read(input)
30
+ return self.new(Exerb::Utility.read(input))
31
+ end
32
+
33
+ def pack
34
+ pe = Exerb::Win32::PeFile.new_from_binary(@core)
35
+ fh = pe.nt_headers.file_header
36
+ oh = pe.nt_headers.optional_header
37
+ rsh = pe.sections.last
38
+ raise(Exerb::ExerbError, "the last section must be resource section") unless rsh.name == '.rsrc'
39
+
40
+ packed_rsrc = @rsrc.pack(rsh.virtual_address)
41
+ aligned_rsrc = Exerb::Utility.alignment(packed_rsrc, oh.file_alignment)
42
+ old_resource_size = Exerb::Utility.align_value(rsh.virtual_size, oh.section_alignment)
43
+ new_resource_size = Exerb::Utility.align_value(packed_rsrc.size, oh.section_alignment)
44
+
45
+ @core[rsh.pointer_to_raw_data, rsh.size_of_raw_data] = aligned_rsrc
46
+
47
+ fh.time_date_stamp = Time.now.to_i
48
+ oh.size_of_initialized_data = oh.size_of_initialized_data - rsh.size_of_raw_data + aligned_rsrc.size
49
+ oh.size_of_image = oh.size_of_image - old_resource_size + new_resource_size
50
+ oh.resource_directory_virtual_size = packed_rsrc.size
51
+ rsh.virtual_size = packed_rsrc.size
52
+ rsh.size_of_raw_data = aligned_rsrc.size
53
+
54
+ fh.update(@core)
55
+ oh.update(@core)
56
+ rsh.update(@core)
57
+
58
+ return Exerb::Utility.alignment16(@core)
59
+ end
60
+
61
+ def write(output)
62
+ Exerb::Utility.write(output, self.pack, 0755)
63
+ end
64
+
65
+ end # Exerb::Executable
66
+
67
+ #==============================================================================#
68
+ #==============================================================================#