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,120 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: resource_library.rb,v 1.7 2005/04/30 15:16:04 yuya Exp $
4
+ #==============================================================================#
5
+
6
+ require 'exerb/utility'
7
+ require "exerb/resource"
8
+
9
+ #==============================================================================#
10
+
11
+ module Exerb
12
+ end # Exerb
13
+
14
+ #==============================================================================#
15
+
16
+ class Exerb::ResourceLibrary
17
+
18
+ def initialize(rsrc)
19
+ @rsrc = rsrc
20
+ end
21
+
22
+ attr_accessor :rsrc
23
+
24
+ def self.create
25
+ return self.new(Exerb::Resource.new)
26
+ end
27
+
28
+ def pack
29
+ rsrc = @rsrc.pack(0x00001000)
30
+ stab = Exerb::ResourceLibrary::Stab.new
31
+
32
+ size_of_rsrc_with_padding = Exerb::Utility.alignment4k(rsrc).size
33
+ size_of_stab_with_padding = Exerb::Utility.alignment4k(stab.pack).size
34
+
35
+ stab.time_date_stamp = Time.now.to_i
36
+ stab.size_of_initialized_data = size_of_rsrc_with_padding
37
+ stab.size_of_image = size_of_stab_with_padding + size_of_rsrc_with_padding
38
+ stab.rsrc_section_virtual_address = size_of_stab_with_padding
39
+ stab.rsrc_section_virtual_size = rsrc.size
40
+ stab.rsrc_section_raw_size = size_of_rsrc_with_padding
41
+
42
+ return Exerb::Utility.alignment4k(stab.pack) + Exerb::Utility.alignment4k(rsrc)
43
+ end
44
+
45
+ def write(out)
46
+ case out
47
+ when IO then out.write(self.pack)
48
+ when String then File.open(out, 'wb') { |file| self.write(file) }
49
+ else raise(ArgumentError, 'arg must be IO or String object')
50
+ end
51
+ return nil
52
+ end
53
+
54
+ end # Exerb::ResourceLibrary
55
+
56
+ #==============================================================================#
57
+
58
+ class Exerb::ResourceLibrary::Stab
59
+
60
+ BASE_BINARY =
61
+ "\x4D\x5A\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xFF\xFF\x00\x00" +
62
+ "\xB8\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00" +
63
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
64
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB0\x00\x00\x00" +
65
+ "\x0E\x1F\xBA\x0E\x00\xB4\x09\xCD\x21\xB8\x01\x4C\xCD\x21\x54\x68" +
66
+ "\x69\x73\x20\x70\x72\x6F\x67\x72\x61\x6D\x20\x63\x61\x6E\x6E\x6F" +
67
+ "\x74\x20\x62\x65\x20\x72\x75\x6E\x20\x69\x6E\x20\x44\x4F\x53\x20" +
68
+ "\x6D\x6F\x64\x65\x2E\x0D\x0D\x0A\x24\x00\x00\x00\x00\x00\x00\x00" +
69
+ "\xEB\x20\x35\xDB\xAF\x41\x5B\x88\xAF\x41\x5B\x88\xAF\x41\x5B\x88" +
70
+ "\x68\x47\x5D\x88\xAE\x41\x5B\x88\x52\x69\x63\x68\xAF\x41\x5B\x88" +
71
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
72
+ "\x50\x45\x00\x00\x4C\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
73
+ "\x00\x00\x00\x00\xE0\x00\x0F\x21\x0B\x01\x06\x00\x00\x00\x00\x00" +
74
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00" +
75
+ "\x00\x10\x00\x00\x00\x00\x00\x10\x00\x10\x00\x00\x00\x10\x00\x00" +
76
+ "\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00" +
77
+ "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00" +
78
+ "\x00\x00\x10\x00\x00\x10\x00\x00\x00\x00\x10\x00\x00\x10\x00\x00" +
79
+ "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
80
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
81
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
82
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
83
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
84
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
85
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
86
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
87
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x2E\x72\x73\x72\x63\x00\x00\x00" +
88
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00" +
89
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x40"
90
+
91
+ def initialize
92
+ @time_date_stamp = 0
93
+ @size_of_initialized_data = 0
94
+ @size_of_image = 0
95
+ @rsrc_section_virtual_address = 0
96
+ @rsrc_section_virtual_size = 0
97
+ @rsrc_section_raw_size = 0
98
+ end
99
+
100
+ attr_accessor :time_date_stamp, :size_of_initialized_data, :size_of_image, :rsrc_section_virtual_address, :rsrc_section_virtual_size, :rsrc_section_raw_size
101
+
102
+ def pack
103
+ binary = BASE_BINARY.dup
104
+
105
+ binary[0x00B8, 4] = [@time_date_stamp].pack('L')
106
+ binary[0x00D0, 4] = [@size_of_initialized_data].pack('L')
107
+ binary[0x0100, 4] = [@size_of_image].pack('L')
108
+ binary[0x0138, 4] = [@rsrc_section_virtual_address].pack('L')
109
+ binary[0x013C, 4] = [@rsrc_section_virtual_size].pack('L')
110
+ binary[0x01B0, 4] = [@rsrc_section_virtual_size].pack('L')
111
+ binary[0x01B4, 4] = [@rsrc_section_virtual_address].pack('L')
112
+ binary[0x01B8, 4] = [@rsrc_section_raw_size].pack('L')
113
+
114
+ return binary
115
+ end
116
+
117
+ end # Exerb::ResourceLibrary::Stab
118
+
119
+ #==============================================================================#
120
+ #==============================================================================#
@@ -0,0 +1,95 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: utility.rb,v 1.15 2005/05/03 13:47:01 yuya Exp $
4
+ #==============================================================================#
5
+
6
+ module Exerb
7
+ end # Exerb
8
+
9
+ #==============================================================================#
10
+
11
+ module Exerb::Utility
12
+
13
+ def self.align_value(value, align)
14
+ if value % align == 0
15
+ return value
16
+ else
17
+ return value + (align - (value % align))
18
+ end
19
+ end
20
+
21
+ def self.alignment(bin, align)
22
+ if bin.size % align == 0
23
+ return bin
24
+ else
25
+ return bin + "\0" * (align - (bin.size % align))
26
+ end
27
+ end
28
+
29
+ def self.alignment16(bin)
30
+ return alignment(bin, 16)
31
+ end
32
+
33
+ def self.alignment4k(bin)
34
+ return alignment(bin, 1024 * 4)
35
+ end
36
+
37
+ def self.find_file_by_filename(filename, path)
38
+ return filename if File.expand_path(filename) == filename && File.exist?(filename)
39
+ return path.collect { |dir| File.join(dir, filename) }.find { |filepath| File.exist?(filepath) }
40
+ end
41
+
42
+ def self.find_file_by_name(name, table, path)
43
+ return nil unless table.has_key?(name)
44
+ return self.find_file_by_filename(table[name], path)
45
+ end
46
+
47
+ def self.find_core_by_filepath(filepath)
48
+ return (File.exist?(filepath) ? filepath : nil)
49
+ end
50
+
51
+ def self.find_core_by_filename(filename)
52
+ require 'exerb/config'
53
+ return self.find_file_by_filename(filename, Exerb::CORE_PATH)
54
+ end
55
+
56
+ def self.find_core_by_name(name, error = false)
57
+ require 'exerb/config'
58
+ path = self.find_file_by_name(name, Exerb::CORE_NAME, Exerb::CORE_PATH)
59
+ raise(Exerb::ExerbError, "unknown core name -- #{name}") if path.nil? && error
60
+ return path
61
+ end
62
+
63
+ def self.read(input)
64
+ case input
65
+ when IO
66
+ input.binmode
67
+ return input.read
68
+ when String
69
+ return File.open(input, "rb") { |file| self.read(file) }
70
+ else raise(ArgumentError, "input must be IO or String object")
71
+ end
72
+ end
73
+
74
+ def self.write(output, binary, mode = nil)
75
+ case output
76
+ when IO
77
+ output.binmode
78
+ output.write(binary)
79
+ when String
80
+ File.open(output, "wb") { |file| self.write(file, binary) }
81
+ File.chmod(mode, output) if mode
82
+ else raise(ArgumentError, "output must be IO or String object")
83
+ end
84
+ return nil
85
+ end
86
+
87
+ end # Exerb::Utility
88
+
89
+ #==============================================================================#
90
+
91
+ if $0 == __FILE__
92
+ end
93
+
94
+ #==============================================================================#
95
+ #==============================================================================#
@@ -0,0 +1,122 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: utility2.rb,v 1.2 2005/04/17 15:17:26 yuya Exp $
4
+ #==============================================================================#
5
+
6
+ module Exerb
7
+ end # Exerb
8
+
9
+ #==============================================================================#
10
+
11
+ module Exerb::Utility2
12
+
13
+ def self.loaded_features(reject_list = [])
14
+ reject_list << File.expand_path(__FILE__)
15
+
16
+ __LOADED_FEATURES = $LOADED_FEATURES.clone # Don't change $LOADED_FEATURES
17
+ if RUBY_VERSION >= "1.9.3"
18
+ ['enc/encdb.so', 'enc/utf_16le.so',
19
+ 'enc/trans/transdb.so', 'enc/trans/utf_16_32.so',
20
+ 'enc/trans/single_byte.so'].each do |enc|
21
+
22
+ unless __LOADED_FEATURES.find { |f| f.include?(enc) }
23
+ __LOADED_FEATURES << enc
24
+ end
25
+ end
26
+ end
27
+
28
+ features = __LOADED_FEATURES.collect { |filename|
29
+ case filename.downcase
30
+ when /\.rb$/o then type = "script"
31
+ when /\.so$/o then type = "extension-library"
32
+ when /\.dll$/o then type = "extension-library"
33
+ end
34
+ [type, filename]
35
+ }.collect { |type, filename|
36
+ if File.exist?(filename)
37
+ [type, require_name(filename), filename]
38
+ else
39
+ $LOAD_PATH.collect { |dirpath|
40
+ [type, filename, File.join(dirpath, filename)]
41
+ }.find { |type, filename, filepath|
42
+ File.exist?(filepath)
43
+ }
44
+ end
45
+ }.compact.reject { |type, filename, filepath|
46
+ type.nil?
47
+ }.reject { |type, filename, filepath|
48
+ reject_list.index(File.expand_path(filepath))
49
+ }
50
+
51
+ detected_libraries.each do |path|
52
+ dll = ["extension-library", File.basename(path).downcase, path]
53
+ features << dll
54
+ end
55
+
56
+ return features
57
+ end
58
+
59
+ def self.require_name(filename)
60
+ # FIXED BUG, if relative path in $LOAD_PATH. like '.', '..', ..
61
+ path = $LOAD_PATH.find { |path| File.dirname(filename) == File.expand_path(path) }
62
+ path = $LOAD_PATH.find { |path| filename.start_with?(File.expand_path(path)) } if !path
63
+ if path
64
+ # remove both the path and the platform from the filename
65
+ return filename.gsub("#{File.expand_path(path)}/", "").gsub("#{RUBY_PLATFORM}/", "")
66
+ end
67
+
68
+ filename
69
+ end
70
+
71
+ # Code copied and adapted from Ocra project
72
+ # http://ocra.rubyforge.org/
73
+ def self.loaded_libraries
74
+ require "Win32API"
75
+
76
+ enumprocessmodules = Win32API.new('psapi', 'EnumProcessModules', ['L','P','L','P'], 'L')
77
+ getmodulefilename = Win32API.new('kernel32', 'GetModuleFileName', ['L','P','L'], 'L')
78
+ getcurrentprocess = Win32API.new('kernel32', 'GetCurrentProcess', [], 'L')
79
+
80
+ bytes_needed = 4 * 32
81
+ module_handle_buffer = nil
82
+ process_handle = getcurrentprocess.call
83
+
84
+ loop do
85
+ module_handle_buffer = "\x00" * bytes_needed
86
+ bytes_needed_buffer = [0].pack("I")
87
+
88
+ r = enumprocessmodules.call(process_handle, module_handle_buffer,
89
+ module_handle_buffer.size, bytes_needed_buffer)
90
+
91
+ bytes_needed = bytes_needed_buffer.unpack("I")[0]
92
+ break if bytes_needed <= module_handle_buffer.size
93
+ end
94
+
95
+ handles = module_handle_buffer.unpack("I*")
96
+ handles.select { |handle| handle > 0 }.map do |handle|
97
+ str = "\x00" * 256
98
+ modulefilename_length = getmodulefilename.call(handle, str, str.size)
99
+ File.expand_path str[0, modulefilename_length]
100
+ end
101
+ end
102
+
103
+ def self.detected_libraries
104
+ require "rbconfig"
105
+
106
+ exec_prefix = RbConfig::CONFIG["exec_prefix"]
107
+ libruby_so = RbConfig::CONFIG["LIBRUBY_SO"]
108
+ loaded = loaded_libraries
109
+
110
+ detected = loaded.select { |path|
111
+ normalized = path.downcase
112
+ path.include?(exec_prefix) &&
113
+ File.extname(normalized) == ".dll" &&
114
+ File.basename(normalized) != libruby_so
115
+ }
116
+
117
+ return detected
118
+ end
119
+ end # Exerb::Utility2
120
+
121
+ #==============================================================================#
122
+ #==============================================================================#
@@ -0,0 +1,13 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: version.rb,v 1.44 2010/12/26 00:03:43 arton Exp $
4
+ #==============================================================================#
5
+
6
+ module Exerb
7
+
8
+ VERSION = '6.0.1'
9
+
10
+ end # Exerb
11
+
12
+ #==============================================================================#
13
+ #==============================================================================#
@@ -0,0 +1,51 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: resource.rb,v 1.4 2005/04/17 15:56:25 yuya Exp $
4
+ #==============================================================================#
5
+
6
+ module Exerb
7
+ module Win32
8
+ end # Win32
9
+ end # Exerb
10
+
11
+ #==============================================================================#
12
+
13
+ module Exerb::Win32::Const
14
+
15
+ IMAGE_RESOURCE_NAME_IS_STRING = 0x80000000
16
+ IMAGE_RESOURCE_DATA_IS_DIRECTORY = 0x80000000
17
+
18
+ RT_CURSOR = 1
19
+ RT_BITMAP = 2
20
+ RT_ICON = 3
21
+ RT_MENU = 4
22
+ RT_DIALOG = 5
23
+ RT_STRING = 6
24
+ RT_FONTDIR = 7
25
+ RT_FONT = 8
26
+ RT_ACCELERATOR = 9
27
+ RT_RCDATA = 10
28
+ RT_MESSAGETABLE = 11
29
+ RT_GROUP_CURSOR = 12
30
+ RT_GROUP_ICON = 14
31
+ RT_NAMETABLE = 15
32
+ RT_VERSION = 16
33
+ RT_DLGINCLUDE = 17
34
+ RT_PLUGPLAY = 19
35
+ RT_VXD = 20
36
+ RT_ANICURSOR = 21
37
+ RT_ANIICON = 22
38
+ RT_HTML = 23
39
+
40
+ VS_FFI_SIGNATURE = 0xFEEF04BD
41
+ VS_FFI_STRUCVERSION = 0x00010000
42
+ VS_FFI_FILEFLAGSMASK = 0x0000003F
43
+ VOS_NT_WINDOWS32 = 0x00040004
44
+ VFT_APP = 0x00000001
45
+ VFT_DLL = 0x00000002
46
+ VFT2_UNKNOWN = 0x00000000
47
+
48
+ end # Exerb::Win32::Const
49
+
50
+ #==============================================================================#
51
+ #==============================================================================#
@@ -0,0 +1,78 @@
1
+
2
+ #==============================================================================#
3
+ # $Id: icon_file.rb,v 1.5 2010/06/26 03:13:36 arton Exp $
4
+ #==============================================================================#
5
+
6
+ require 'exerb/win32/struct/icon_header'
7
+ require 'exerb/win32/struct/icon_dir_entry'
8
+
9
+ #==============================================================================#
10
+
11
+ module Exerb
12
+ module Win32
13
+ end # Win32
14
+ end # Exerb
15
+
16
+ #==============================================================================#
17
+
18
+ class Exerb::Win32::IconFile
19
+
20
+ def initialize
21
+ @entries = []
22
+ end
23
+
24
+ attr_accessor :entries
25
+
26
+ def self.read(input)
27
+ case input
28
+ when IO then return self.new.read(input)
29
+ when String then return File.open(input, 'rb') { |file| self.read(file) }
30
+ else raise(ArgumentError, "input must be IO or String object")
31
+ end
32
+ end
33
+
34
+ def read(io)
35
+ base = io.pos
36
+ icon_header = Exerb::Win32::Struct::IconHeader.read(io)
37
+
38
+ @entries = (1..icon_header.count).collect {
39
+ Exerb::Win32::Struct::IconDirEntry.read(io)
40
+ }.collect { |icon_dir_entry|
41
+ io.seek(base + icon_dir_entry.image_offset)
42
+ icon_image_header = Exerb::Win32::Struct::IconImageHeader.read(io)
43
+ io.seek(icon_image_header.position)
44
+
45
+ entry = Exerb::Win32::IconFile::Entry.new
46
+ entry.width = icon_dir_entry.width
47
+ entry.height = icon_dir_entry.height
48
+ entry.bit_count = icon_image_header.bit_count
49
+ entry.value = io.read(icon_dir_entry.bytes_in_res)
50
+ if entry.width == 0
51
+ entry.bit_count = icon_dir_entry.bit_count
52
+ entry.width = entry.height = 256
53
+ end
54
+ entry
55
+ }
56
+
57
+ return self
58
+ end
59
+
60
+ end # Exerb::Win32::IconFile
61
+
62
+ #==============================================================================#
63
+
64
+ class Exerb::Win32::IconFile::Entry
65
+
66
+ def initialize
67
+ @width = nil
68
+ @height = nil
69
+ @bit_count = nil
70
+ @value = nil
71
+ end
72
+
73
+ attr_accessor :width, :height, :bit_count, :value
74
+
75
+ end # Exerb::Win32::IconFile::Entry
76
+
77
+ #==============================================================================#
78
+ #==============================================================================#