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