exerb 6.0.1

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 (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
+ #==============================================================================#