exerb 6.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/ChangeLog.ja.rd +305 -0
- data/README.en.txt +12 -0
- data/README.ja.html +143 -0
- data/README.ja.txt +6 -0
- data/README.md +50 -0
- data/Rakefile +205 -0
- data/bin/exerb +185 -0
- data/bin/mkexy +47 -0
- data/doc/LGPL +513 -0
- data/doc/class.ja.html +92 -0
- data/doc/command.ja.html +109 -0
- data/doc/core.ja.html +72 -0
- data/doc/example.ja.html +89 -0
- data/doc/faq.ja.html +59 -0
- data/doc/inside.ja.rd +404 -0
- data/doc/license.ja.html +62 -0
- data/doc/logo.gif +0 -0
- data/doc/misc.ja.html +72 -0
- data/doc/navi.gif +0 -0
- data/doc/recipe.ja.html +317 -0
- data/doc/style.css +187 -0
- data/doc/tutorial.ja.html +182 -0
- data/example/Makefile +54 -0
- data/example/cat_n.rb +14 -0
- data/example/exception.rb +9 -0
- data/example/ext/Win32API.so +0 -0
- data/example/ext/swin.so +0 -0
- data/example/msgbox.rb +14 -0
- data/example/rubytk.rb +22 -0
- data/example/runtime.ico +0 -0
- data/example/runtime.rb +19 -0
- data/example/vr/clipboard.rb +106 -0
- data/example/vr/compat/rubycompat.rb +18 -0
- data/example/vr/compat/vrcomctl.rb +12 -0
- data/example/vr/compat/vrcontrol.rb +50 -0
- data/example/vr/compat/vrmmedia.rb +24 -0
- data/example/vr/contrib/inifile.rb +116 -0
- data/example/vr/contrib/msgboxconst.rb +55 -0
- data/example/vr/contrib/toolbar.rb +371 -0
- data/example/vr/contrib/vrctlcolor.rb +110 -0
- data/example/vr/contrib/vrhotkey.rb +35 -0
- data/example/vr/contrib/vrlistviewex.rb +71 -0
- data/example/vr/contrib/vrstdscrollbar.rb +414 -0
- data/example/vr/contrib/vrwincomponent.rb +54 -0
- data/example/vr/dragdropformat.rb +209 -0
- data/example/vr/rscutil.rb +168 -0
- data/example/vr/sysmod.rb +249 -0
- data/example/vr/vractivex.rb +56 -0
- data/example/vr/vrclipboard.rb +53 -0
- data/example/vr/vrcomctl.rb +1819 -0
- data/example/vr/vrcontrol.rb +1374 -0
- data/example/vr/vrdde.rb +623 -0
- data/example/vr/vrddrop.rb +190 -0
- data/example/vr/vrdialog.rb +406 -0
- data/example/vr/vrhandler.rb +195 -0
- data/example/vr/vrlayout.old.rb +209 -0
- data/example/vr/vrlayout.rb +173 -0
- data/example/vr/vrlayout2.rb +340 -0
- data/example/vr/vrmargin.rb +141 -0
- data/example/vr/vrmgdlayout.rb +381 -0
- data/example/vr/vrmmedia.rb +287 -0
- data/example/vr/vrolednd.rb +192 -0
- data/example/vr/vrowndraw.rb +108 -0
- data/example/vr/vrrichedit.rb +366 -0
- data/example/vr/vrtimer.rb +148 -0
- data/example/vr/vrtooltip.rb +273 -0
- data/example/vr/vrtray.rb +143 -0
- data/example/vr/vrtvitem.rb +118 -0
- data/example/vr/vrtwopane.rb +223 -0
- data/example/vr/vruby.rb +1051 -0
- data/example/vr/winconst.rb +158 -0
- data/example/vruby.rb +38 -0
- data/exerb.gemspec +26 -0
- data/extconf.rb +7 -0
- data/lib/exerb/archive.rb +143 -0
- data/lib/exerb/config.rb +51 -0
- data/lib/exerb/error.rb +15 -0
- data/lib/exerb/executable.rb +68 -0
- data/lib/exerb/file_table.rb +189 -0
- data/lib/exerb/mkexy.rb +81 -0
- data/lib/exerb/name_table.rb +120 -0
- data/lib/exerb/recipe.rb +465 -0
- data/lib/exerb/resource.rb +190 -0
- data/lib/exerb/resource/base.rb +29 -0
- data/lib/exerb/resource/binary.rb +31 -0
- data/lib/exerb/resource/dialog.rb +30 -0
- data/lib/exerb/resource/group_icon.rb +85 -0
- data/lib/exerb/resource/icon.rb +52 -0
- data/lib/exerb/resource/version_info.rb +155 -0
- data/lib/exerb/resource_library.rb +120 -0
- data/lib/exerb/utility.rb +95 -0
- data/lib/exerb/utility2.rb +122 -0
- data/lib/exerb/version.rb +13 -0
- data/lib/exerb/win32/const/resource.rb +51 -0
- data/lib/exerb/win32/icon_file.rb +78 -0
- data/lib/exerb/win32/pe_file.rb +59 -0
- data/lib/exerb/win32/resource_directory.rb +105 -0
- data/lib/exerb/win32/resource_directory_root.rb +67 -0
- data/lib/exerb/win32/resource_entry.rb +98 -0
- data/lib/exerb/win32/struct/base.rb +43 -0
- data/lib/exerb/win32/struct/icon_dir_entry.rb +83 -0
- data/lib/exerb/win32/struct/icon_header.rb +43 -0
- data/lib/exerb/win32/struct/icon_res_entry.rb +48 -0
- data/lib/exerb/win32/struct/image_dos_header.rb +73 -0
- data/lib/exerb/win32/struct/image_file_header.rb +47 -0
- data/lib/exerb/win32/struct/image_nt_headers32.rb +53 -0
- data/lib/exerb/win32/struct/image_optional_header32.rb +107 -0
- data/lib/exerb/win32/struct/image_resource_data_entry.rb +45 -0
- data/lib/exerb/win32/struct/image_resource_directory.rb +47 -0
- data/lib/exerb/win32/struct/image_resource_directory_entry.rb +72 -0
- data/lib/exerb/win32/struct/image_section_header.rb +53 -0
- data/lib/exerb/win32/struct/version_info_block.rb +75 -0
- data/lib/exerb/win32/struct/vs_fixed_file_info.rb +62 -0
- data/src/exerb/cui.c +48 -0
- data/src/exerb/default.rb +1 -0
- data/src/exerb/exerb.c +877 -0
- data/src/exerb/exerb.h +92 -0
- data/src/exerb/gui.c +176 -0
- data/src/exerb/module.c +138 -0
- data/src/exerb/module.h +7 -0
- data/src/exerb/patch.c +27 -0
- data/src/exerb/resource.h +22 -0
- data/src/exerb/resource.rc +121 -0
- data/src/exerb/ruby.ico +0 -0
- data/src/exerb/utility.c +263 -0
- data/src/exerb/utility.h +33 -0
- data/test/alltests.rb +16 -0
- data/test/test-argv.rb +26 -0
- data/test/test-argv/test-argv.rb +9 -0
- data/test/test-argv/test-argv.ret +1 -0
- data/test/test-dollarzero.rb +26 -0
- data/test/test-dollarzero/test-dollarzero.rb +10 -0
- data/test/test-dollarzero/test-dollarzero.ret +2 -0
- data/test/test-dot.rb +26 -0
- data/test/test-dot/dot.dot.dot.rb +9 -0
- data/test/test-dot/dot.dot.rb +9 -0
- data/test/test-dot/test-dot.rb +13 -0
- data/test/test-dot/test-dot.ret +5 -0
- data/test/test-exitcode.rb +28 -0
- data/test/test-exitcode/test-exitcode.rb +9 -0
- data/test/test-kcode.rb +43 -0
- data/test/test-kcode/euc.rb +10 -0
- data/test/test-kcode/euc.ret +2 -0
- data/test/test-kcode/none.rb +10 -0
- data/test/test-kcode/none.ret +2 -0
- data/test/test-kcode/sjis.rb +10 -0
- data/test/test-kcode/sjis.ret +2 -0
- data/test/test-kcode/utf8.rb +10 -0
- data/test/test-kcode/utf8.ret +2 -0
- data/test/test-loadpath.rb +24 -0
- data/test/test-loadpath/test-loadpath.rb +9 -0
- data/test/test-nest.rb +18 -0
- data/test/test-nest/foo.rb +1 -0
- data/test/test-nest/foo/bar.rb +2 -0
- data/test/test-nest/foo/foo.rb +1 -0
- data/test/test-nest/test-nest.rb +1 -0
- data/test/test-nest/test-nest.ret +1 -0
- data/test/test-preload.rb +24 -0
- data/test/test-preload/test-preload.rb +9 -0
- data/test/test-regexp.rb +26 -0
- data/test/test-regexp/test-regexp.rb +23 -0
- data/test/test-regexp/test-regexp.ret +13 -0
- data/test/test-require1.rb +26 -0
- data/test/test-require1/require1.rb +9 -0
- data/test/test-require1/require2.rb +9 -0
- data/test/test-require1/require3.rb +9 -0
- data/test/test-require1/require4.rb +9 -0
- data/test/test-require1/require5.rb +9 -0
- data/test/test-require1/require6.rb +9 -0
- data/test/test-require1/test-require1.rb +41 -0
- data/test/test-require1/test-require1.ret +27 -0
- data/test/test-socket.rb +26 -0
- data/test/test-socket/test-socket.rb +7 -0
- data/test/test-socket/test-socket.ret +1 -0
- data/test/testcase.rb +66 -0
- data/vendor/mkexports.rb +167 -0
- 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
|
+
|
data/example/vruby.rb
ADDED
@@ -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
|
+
#==============================================================================#
|
data/exerb.gemspec
ADDED
@@ -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
|
data/extconf.rb
ADDED
@@ -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
|
+
#==============================================================================#
|
data/lib/exerb/config.rb
ADDED
@@ -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
|
+
#==============================================================================#
|
data/lib/exerb/error.rb
ADDED
@@ -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
|
+
#==============================================================================#
|