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,59 @@
|
|
1
|
+
|
2
|
+
#==============================================================================#
|
3
|
+
# $Id: pe_file.rb,v 1.5 2005/04/17 15:56:25 yuya Exp $
|
4
|
+
#==============================================================================#
|
5
|
+
|
6
|
+
require 'stringio'
|
7
|
+
require 'exerb/win32/struct/image_dos_header'
|
8
|
+
require 'exerb/win32/struct/image_nt_headers32'
|
9
|
+
require 'exerb/win32/struct/image_section_header'
|
10
|
+
|
11
|
+
#==============================================================================#
|
12
|
+
|
13
|
+
module Exerb
|
14
|
+
module Win32
|
15
|
+
end # Win32
|
16
|
+
end # Exerb
|
17
|
+
|
18
|
+
#==============================================================================#
|
19
|
+
|
20
|
+
class Exerb::Win32::PeFile
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
@dos_header = nil
|
24
|
+
@nt_headers = nil
|
25
|
+
@sections = nil
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_accessor :dos_header, :nt_headers, :sections
|
29
|
+
|
30
|
+
def self.read(io)
|
31
|
+
return self.new.read(io)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.new_from_binary(bin)
|
35
|
+
return self.read(StringIO.new(bin))
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.new_from_file(filepath)
|
39
|
+
return File.open(filepath, 'rb') { |file| self.read(file) }
|
40
|
+
end
|
41
|
+
|
42
|
+
def read(io)
|
43
|
+
@dos_header = Exerb::Win32::Struct::ImageDosHeader.read(io)
|
44
|
+
io.seek(-@dos_header.size, IO::SEEK_CUR)
|
45
|
+
io.seek(@dos_header.offset_to_new_header, IO::SEEK_CUR)
|
46
|
+
@nt_headers = Exerb::Win32::Struct::ImageNtHeaders32.read(io)
|
47
|
+
@sections = (1..@nt_headers.file_header.number_of_sections).collect { Exerb::Win32::Struct::ImageSectionHeader.read(io) }
|
48
|
+
|
49
|
+
return self
|
50
|
+
end
|
51
|
+
|
52
|
+
def find_section(name)
|
53
|
+
return @sections.find { |section| section.name == name }
|
54
|
+
end
|
55
|
+
|
56
|
+
end # Exerb::Win32::PeFile
|
57
|
+
|
58
|
+
#==============================================================================#
|
59
|
+
#==============================================================================#
|
@@ -0,0 +1,105 @@
|
|
1
|
+
|
2
|
+
#==============================================================================#
|
3
|
+
# $Id: resource_directory.rb,v 1.7 2005/04/17 15:56:25 yuya Exp $
|
4
|
+
#==============================================================================#
|
5
|
+
|
6
|
+
require 'exerb/win32/struct/image_resource_directory'
|
7
|
+
require 'exerb/win32/struct/image_resource_directory_entry'
|
8
|
+
|
9
|
+
#==============================================================================#
|
10
|
+
|
11
|
+
module Exerb
|
12
|
+
module Win32
|
13
|
+
end # Win32
|
14
|
+
end # Exerb
|
15
|
+
|
16
|
+
#==============================================================================#
|
17
|
+
|
18
|
+
class Exerb::Win32::ResourceDirectory
|
19
|
+
|
20
|
+
def initialize(name)
|
21
|
+
@name = name
|
22
|
+
@entries = []
|
23
|
+
|
24
|
+
yield(self) if block_given?
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_accessor :name, :entries
|
28
|
+
|
29
|
+
def self.read(io, base, name = nil)
|
30
|
+
return self.new(nil).read(io, base, name)
|
31
|
+
end
|
32
|
+
|
33
|
+
def <<(entry)
|
34
|
+
@entries << entry
|
35
|
+
end
|
36
|
+
|
37
|
+
def serialize(elements, level)
|
38
|
+
elements[0][level] = [] if elements[0][level].nil?
|
39
|
+
elements[0][level] << self
|
40
|
+
@entries.each { |entry| elements[0][level] << Exerb::Win32::ResourceDirectory::Entry.new(entry) }
|
41
|
+
@entries.each { |entry| entry.serialize(elements, level + 1) }
|
42
|
+
return elements
|
43
|
+
end
|
44
|
+
|
45
|
+
def pack(table, reloc, base)
|
46
|
+
dir = Exerb::Win32::Struct::ImageResourceDirectory.new
|
47
|
+
dir.characteristics = 0
|
48
|
+
dir.time_date_stamp = 0
|
49
|
+
dir.major_version = 0
|
50
|
+
dir.minor_version = 0
|
51
|
+
dir.number_of_name_entries = 0
|
52
|
+
dir.number_of_id_entries = @entries.size
|
53
|
+
|
54
|
+
return dir.pack
|
55
|
+
end
|
56
|
+
|
57
|
+
def read(io, base, name)
|
58
|
+
dir = Exerb::Win32::Struct::ImageResourceDirectory.read(io)
|
59
|
+
|
60
|
+
@name = name
|
61
|
+
@entries = (1..(dir.number_of_name_entries + dir.number_of_id_entries)).collect {
|
62
|
+
Exerb::Win32::Struct::ImageResourceDirectoryEntry.read(io)
|
63
|
+
}.collect { |entry|
|
64
|
+
if entry.data_is_directory?
|
65
|
+
io.seek(entry.offset_to_directory)
|
66
|
+
Exerb::Win32::ResourceDirectory.read(io, base, entry.name)
|
67
|
+
else
|
68
|
+
io.seek(entry.offset_to_data)
|
69
|
+
Exerb::Win32::ResourceEntry.read(io, base, entry.name)
|
70
|
+
end
|
71
|
+
}
|
72
|
+
|
73
|
+
return self
|
74
|
+
end
|
75
|
+
|
76
|
+
end # Exerb::Win32::ResourceDirectory
|
77
|
+
|
78
|
+
#==============================================================================#
|
79
|
+
|
80
|
+
class Exerb::Win32::ResourceDirectory::Entry
|
81
|
+
|
82
|
+
def initialize(entry)
|
83
|
+
@entry = entry
|
84
|
+
end
|
85
|
+
|
86
|
+
attr_accessor :entry
|
87
|
+
|
88
|
+
def pack(table, reloc, base)
|
89
|
+
entry = Exerb::Win32::Struct::ImageResourceDirectoryEntry.new
|
90
|
+
|
91
|
+
if @entry.kind_of?(Exerb::Win32::ResourceDirectory)
|
92
|
+
entry.name = @entry.name
|
93
|
+
entry.offset_to_directory = table[@entry]
|
94
|
+
else
|
95
|
+
entry.name = @entry.lang
|
96
|
+
entry.offset_to_data = table[@entry]
|
97
|
+
end
|
98
|
+
|
99
|
+
return entry.pack
|
100
|
+
end
|
101
|
+
|
102
|
+
end # Exerb::Win32::ResourceDirectory::Entry
|
103
|
+
|
104
|
+
#==============================================================================#
|
105
|
+
#==============================================================================#
|
@@ -0,0 +1,67 @@
|
|
1
|
+
|
2
|
+
#==============================================================================#
|
3
|
+
# $Id: resource_directory_root.rb,v 1.6 2005/04/17 15:56:25 yuya Exp $
|
4
|
+
#==============================================================================#
|
5
|
+
|
6
|
+
require 'exerb/utility'
|
7
|
+
require 'exerb/win32/resource_directory'
|
8
|
+
|
9
|
+
#==============================================================================#
|
10
|
+
|
11
|
+
module Exerb
|
12
|
+
module Win32
|
13
|
+
end # Win32
|
14
|
+
end # Exerb
|
15
|
+
|
16
|
+
#==============================================================================#
|
17
|
+
|
18
|
+
class Exerb::Win32::ResourceDirectoryRoot < Exerb::Win32::ResourceDirectory
|
19
|
+
|
20
|
+
def initialize
|
21
|
+
super(0)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.read(io, base)
|
25
|
+
return self.new.read(io, base, 0)
|
26
|
+
end
|
27
|
+
|
28
|
+
def serial
|
29
|
+
return self.serialize([[], [], []], 0)
|
30
|
+
end
|
31
|
+
|
32
|
+
def pack_all(base, reloc_table = [])
|
33
|
+
table = Hash.new(0)
|
34
|
+
reloc = {}
|
35
|
+
address = 0
|
36
|
+
buffer = ''
|
37
|
+
|
38
|
+
self.serial.each { |entries|
|
39
|
+
entries.flatten!
|
40
|
+
entries.compact!
|
41
|
+
}.each { |entries|
|
42
|
+
entries.each { |entry|
|
43
|
+
table[entry] = address
|
44
|
+
address += entry.pack(table, {}, base).size
|
45
|
+
}
|
46
|
+
address += (address % 16 == 0 ? 0 : 16 - address % 16)
|
47
|
+
}.each { |entries|
|
48
|
+
entries.each { |entry|
|
49
|
+
buffer << entry.pack(table, reloc, base)
|
50
|
+
}
|
51
|
+
buffer = Exerb::Utility.alignment16(buffer)
|
52
|
+
}
|
53
|
+
|
54
|
+
reloc.keys.each { |obj|
|
55
|
+
reloc[obj].each { |delta|
|
56
|
+
reloc_table << table[obj] + delta
|
57
|
+
}
|
58
|
+
}
|
59
|
+
reloc_table.sort!
|
60
|
+
|
61
|
+
return buffer
|
62
|
+
end
|
63
|
+
|
64
|
+
end # Exerb::Win32::ResourceDirectoryRoot
|
65
|
+
|
66
|
+
#==============================================================================#
|
67
|
+
#==============================================================================#
|
@@ -0,0 +1,98 @@
|
|
1
|
+
|
2
|
+
#==============================================================================#
|
3
|
+
# $Id: resource_entry.rb,v 1.8 2005/04/17 15:56:25 yuya Exp $
|
4
|
+
#==============================================================================#
|
5
|
+
|
6
|
+
require 'exerb/win32/struct/image_resource_data_entry'
|
7
|
+
|
8
|
+
#==============================================================================#
|
9
|
+
|
10
|
+
module Exerb
|
11
|
+
module Win32
|
12
|
+
end # Win32
|
13
|
+
end # Exerb
|
14
|
+
|
15
|
+
#==============================================================================#
|
16
|
+
|
17
|
+
class Exerb::Win32::ResourceEntry
|
18
|
+
|
19
|
+
def initialize(entry_data, lang = nil)
|
20
|
+
@entry_data = Exerb::Win32::ResourceEntry::Data.new(entry_data)
|
21
|
+
@lang = lang
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_accessor :entry_data, :lang
|
25
|
+
|
26
|
+
def self.read(io, base, lang)
|
27
|
+
return self.new(nil).read(io, base, lang)
|
28
|
+
end
|
29
|
+
|
30
|
+
def serialize(elements, level)
|
31
|
+
elements[1][level] = [] if elements[1][level].nil?
|
32
|
+
elements[1][level] << self
|
33
|
+
@entry_data.serialize(elements, level + 1)
|
34
|
+
return elements
|
35
|
+
end
|
36
|
+
|
37
|
+
def pack(table, reloc, base)
|
38
|
+
data = Exerb::Win32::Struct::ImageResourceDataEntry.new
|
39
|
+
data.offset_to_data = table[@entry_data] + base
|
40
|
+
data.size_of_data = @entry_data.size
|
41
|
+
data.code_page = 0x0000
|
42
|
+
data.reserved = 0x0000
|
43
|
+
|
44
|
+
reloc[self] ||= []
|
45
|
+
reloc[self] << 0
|
46
|
+
|
47
|
+
return data.pack
|
48
|
+
end
|
49
|
+
|
50
|
+
def read(io, base, lang)
|
51
|
+
data = Exerb::Win32::Struct::ImageResourceDataEntry.read(io)
|
52
|
+
io.seek(data.offset_to_data - base)
|
53
|
+
|
54
|
+
@entry_data = Exerb::Win32::ResourceEntry::Data.read(io, base, data.size_of_data)
|
55
|
+
@lang = lang
|
56
|
+
|
57
|
+
return self
|
58
|
+
end
|
59
|
+
|
60
|
+
end # Exerb::Win32::ResourceEntry
|
61
|
+
|
62
|
+
#==============================================================================#
|
63
|
+
|
64
|
+
class Exerb::Win32::ResourceEntry::Data
|
65
|
+
|
66
|
+
def initialize(data)
|
67
|
+
@data = data
|
68
|
+
end
|
69
|
+
|
70
|
+
attr_accessor :data
|
71
|
+
|
72
|
+
def self.read(io, base, size)
|
73
|
+
return self.new(nil).read(io, base, size)
|
74
|
+
end
|
75
|
+
|
76
|
+
def serialize(elements, level)
|
77
|
+
elements[2][level] = [] if elements[2][level].nil?
|
78
|
+
elements[2][level] << self
|
79
|
+
return elements
|
80
|
+
end
|
81
|
+
|
82
|
+
def pack(table, reloc, base)
|
83
|
+
return Exerb::Utility.alignment16(@data)
|
84
|
+
end
|
85
|
+
|
86
|
+
def size
|
87
|
+
return @data.size
|
88
|
+
end
|
89
|
+
|
90
|
+
def read(io, base, size)
|
91
|
+
@data = io.read(size)
|
92
|
+
return self
|
93
|
+
end
|
94
|
+
|
95
|
+
end # Exerb::Win32::ResourceEntry::Data
|
96
|
+
|
97
|
+
#==============================================================================#
|
98
|
+
#==============================================================================#
|
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
#==============================================================================#
|
3
|
+
# $Id: base.rb,v 1.4 2005/04/17 15:56:25 yuya Exp $
|
4
|
+
#==============================================================================#
|
5
|
+
|
6
|
+
module Exerb
|
7
|
+
module Win32
|
8
|
+
module Struct
|
9
|
+
end # Struct
|
10
|
+
end # Win32
|
11
|
+
end # Exerb
|
12
|
+
|
13
|
+
#==============================================================================#
|
14
|
+
|
15
|
+
class Exerb::Win32::Struct::Base
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@position = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :position
|
22
|
+
|
23
|
+
def self.read(io)
|
24
|
+
return self.new.read(io)
|
25
|
+
end
|
26
|
+
|
27
|
+
def size
|
28
|
+
return self.pack.size
|
29
|
+
end
|
30
|
+
|
31
|
+
def read(io)
|
32
|
+
@position = io.pos
|
33
|
+
return self.unpack(io.read(self.size))
|
34
|
+
end
|
35
|
+
|
36
|
+
def update(str)
|
37
|
+
str[@position, self.size] = self.pack
|
38
|
+
end
|
39
|
+
|
40
|
+
end # Exerb::Win32::Struct::Base
|
41
|
+
|
42
|
+
#==============================================================================#
|
43
|
+
#==============================================================================#
|
@@ -0,0 +1,83 @@
|
|
1
|
+
|
2
|
+
#==============================================================================#
|
3
|
+
# $Id: icon_dir_entry.rb,v 1.5 2010/06/26 03:13:36 arton Exp $
|
4
|
+
#==============================================================================#
|
5
|
+
|
6
|
+
require 'exerb/win32/struct/base'
|
7
|
+
|
8
|
+
#==============================================================================#
|
9
|
+
|
10
|
+
module Exerb
|
11
|
+
module Win32
|
12
|
+
module Struct
|
13
|
+
end # Struct
|
14
|
+
end # Win32
|
15
|
+
end # Exerb
|
16
|
+
|
17
|
+
#==============================================================================#
|
18
|
+
|
19
|
+
class Exerb::Win32::Struct::IconDirEntry < Exerb::Win32::Struct::Base
|
20
|
+
|
21
|
+
FORMAT = 'CCCCSSLL'
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
@width = 0
|
25
|
+
@height = 0
|
26
|
+
@color_count = 0
|
27
|
+
@reserved = 0
|
28
|
+
@planes = 0
|
29
|
+
@bit_count = 0
|
30
|
+
@bytes_in_res = 0
|
31
|
+
@image_offset = 0
|
32
|
+
end
|
33
|
+
|
34
|
+
attr_accessor :width, :height, :color_count, :reserved, :planes, :bit_count, :bytes_in_res, :image_offset
|
35
|
+
|
36
|
+
def pack
|
37
|
+
return [@width, @height, @color_count, @reserved, @planes, @bit_count, @bytes_in_res, @image_offset].pack(FORMAT)
|
38
|
+
end
|
39
|
+
|
40
|
+
def unpack(bin)
|
41
|
+
@width, @height, @color_count, @reserved, @planes, @bit_count, @bytes_in_res, @image_offset = bin.unpack(FORMAT)
|
42
|
+
return self
|
43
|
+
end
|
44
|
+
|
45
|
+
end # Exerb::Win32::Struct::IconDirEntry
|
46
|
+
|
47
|
+
#==============================================================================#
|
48
|
+
|
49
|
+
class Exerb::Win32::Struct::IconImageHeader < Exerb::Win32::Struct::Base
|
50
|
+
|
51
|
+
FORMAT = 'LllSSLLllLL'
|
52
|
+
|
53
|
+
def initialize
|
54
|
+
# This struct is identical to BITMAPINFOHEADER.
|
55
|
+
|
56
|
+
@_size = 0
|
57
|
+
@width = 0
|
58
|
+
@height = 0
|
59
|
+
@planes = 0
|
60
|
+
@bit_count = 0
|
61
|
+
@compression = 0
|
62
|
+
@size_image = 0
|
63
|
+
@xpels_per_meter = 0
|
64
|
+
@ypels_per_meter = 0
|
65
|
+
@clr_used = 0
|
66
|
+
@clr_important = 0
|
67
|
+
end
|
68
|
+
|
69
|
+
attr_accessor :_size, :width, :height, :planes, :bit_count, :compression, :size_image, :xpels_per_meter, :ypels_per_meter, :clr_used, :clr_important
|
70
|
+
|
71
|
+
def pack
|
72
|
+
return [@_size, @width, @height, @planes, @bit_count, @compression, @size_image, @xpels_per_meter, @ypels_per_meter, @clr_used, @clr_important].pack(FORMAT)
|
73
|
+
end
|
74
|
+
|
75
|
+
def unpack(bin)
|
76
|
+
@_size, @width, @height, @planes, @bit_count, @compression, @size_image, @xpels_per_meter, @ypels_per_meter, @clr_used, @clr_important = bin.unpack(FORMAT)
|
77
|
+
return self
|
78
|
+
end
|
79
|
+
|
80
|
+
end # Exerb::Win32::Struct::IconImageHeader
|
81
|
+
|
82
|
+
#==============================================================================#
|
83
|
+
#==============================================================================#
|