npgrt 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/npgrt.rb +12 -1
- data/lib/npgrt.rb~ +13 -1
- data/lib/npgrt/.version.rb.swp +0 -0
- data/lib/npgrt/algorithm.rb +178 -0
- data/lib/npgrt/algorithm.rb~ +179 -0
- data/lib/npgrt/filesystem.rb +8 -0
- data/lib/npgrt/filesystem.rb~ +9 -0
- data/lib/npgrt/find.rb +31 -0
- data/lib/npgrt/find.rb~ +31 -0
- data/lib/npgrt/message.rb +0 -1
- data/lib/npgrt/message.rb~ +1 -1
- data/lib/npgrt/query.rb +6 -0
- data/lib/npgrt/report.rb +182 -0
- data/lib/npgrt/report.rb~ +183 -0
- data/lib/npgrt/require.rb +23 -1
- data/lib/npgrt/require.rb~ +24 -1
- data/lib/npgrt/version.rb +3 -1
- data/lib/npgrt/version.rb~ +3 -1
- data/lib/npgrt/win32api.rb +335 -16
- data/lib/npgrt/win32api.rb~ +334 -15
- data/lib/test_32.dll +0 -0
- data/lib/test_64.dll +0 -0
- metadata +14 -2
data/lib/npgrt/find.rb~
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module NPGRT
|
2
|
+
module Find
|
3
|
+
extend self
|
4
|
+
private
|
5
|
+
def each_path
|
6
|
+
ENV['path'].split(";").each{|x|
|
7
|
+
yield x
|
8
|
+
}
|
9
|
+
end
|
10
|
+
public
|
11
|
+
|
12
|
+
def binary(name)
|
13
|
+
each_path do |path|
|
14
|
+
v = File.join(path, name)
|
15
|
+
return NPGRT.normalize_pathsep_os(v) if FileTest.file?(v)
|
16
|
+
end
|
17
|
+
Gem.find_files(name) do |v|
|
18
|
+
return NPGRT.normalize_pathsep_os(v) if FileTest.file?(v)
|
19
|
+
end
|
20
|
+
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
def hostruby
|
24
|
+
binary("ruby.exe")
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
end
|
data/lib/npgrt/message.rb
CHANGED
data/lib/npgrt/message.rb~
CHANGED
data/lib/npgrt/query.rb
ADDED
data/lib/npgrt/report.rb
ADDED
@@ -0,0 +1,182 @@
|
|
1
|
+
module NPGRT
|
2
|
+
class Report
|
3
|
+
|
4
|
+
|
5
|
+
def initialize(io, &b)
|
6
|
+
@io = io
|
7
|
+
@binding = b.binding
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
def title(str)
|
12
|
+
"#{str} ----------\n"
|
13
|
+
end
|
14
|
+
|
15
|
+
def tail
|
16
|
+
"\n\n\n"
|
17
|
+
end
|
18
|
+
|
19
|
+
def form(io, title)
|
20
|
+
io << title(title)
|
21
|
+
yield io
|
22
|
+
io << tail
|
23
|
+
io
|
24
|
+
end
|
25
|
+
public
|
26
|
+
def inifile(io)
|
27
|
+
return unless FileTest.file?("Game.ini")
|
28
|
+
form io, "Game.ini" do |io|
|
29
|
+
io << File.read("Game.ini")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def scripts(io)
|
34
|
+
return unless defined?($RGSS_SCRIPTS)
|
35
|
+
form io, "Scripts" do |io|
|
36
|
+
io << $RGSS_SCRIPTS.map{|x| " [%s] " % x[1]}.join("\n")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def basic(io)
|
41
|
+
form io, "Basic Information" do |io|
|
42
|
+
io << "path:" << Dir.getwd << "\n"
|
43
|
+
io << "Ruby Version:" << RUBY_VERSION << "\n"
|
44
|
+
io << "NPGRT Version:" << NPGRT::VERSION << "\n"
|
45
|
+
io << "Platform:" << NPGRT::PlatformWidth << "\n"
|
46
|
+
begin
|
47
|
+
str = "" << "FPS:" << Graphics.frame_rate.to_s << "\n"
|
48
|
+
str << "Frame Count:" << Graphics.frame_count.to_s << "\n"
|
49
|
+
io << str
|
50
|
+
rescue
|
51
|
+
end
|
52
|
+
io << "Command Line:" << NPGRT.wstrread(NPGRT.api('kernel32', 'GetCommandLineW').call) << "\n"
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def position(io)
|
58
|
+
form io, "Position" do |io|
|
59
|
+
io << "__FILE__:" << eval('__FILE__', @binding) << "\n"
|
60
|
+
if eval('__FILE__', @binding) =~ /\d+/ && $RGSS_SCRIPTS
|
61
|
+
io << "Section name :[" << $RGSS_SCRIPTS[$1.to_i][1] << "]\n"
|
62
|
+
end
|
63
|
+
io << "__LINE__:" <<eval('__LINE__', @binding) << "\n"
|
64
|
+
io << "Nesting:" << eval('Module.nesting', @binding) << "\n"
|
65
|
+
io << "caller:" << eval('caller', @binding).join("\n") << "\n"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def exception(io)
|
70
|
+
form io, "Exceptions" do
|
71
|
+
if $!
|
72
|
+
io << $!.to_s << "\n"
|
73
|
+
io << $!.backtrace.join("\n") << "\n"
|
74
|
+
else
|
75
|
+
io << "No exception." << "\n"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def rubyobjects(io)
|
81
|
+
form io, "Global Variables" do
|
82
|
+
(global_variables - [:$RGSS_SCRIPTS]).each{|g|
|
83
|
+
begin
|
84
|
+
v = eval(g.to_s, @binding)
|
85
|
+
io << (" #{g}:" << v.inspect << "\n")
|
86
|
+
rescue
|
87
|
+
end
|
88
|
+
}
|
89
|
+
io << " $RGSS_SCRIPTS: [#{$RGSS_SCRIPTS.size} scripts]" << "\n" if defined?($RGSS_SCRIPTS)
|
90
|
+
end
|
91
|
+
form io, "Local Variables" do
|
92
|
+
eval('local_variables', @binding).each{|g|
|
93
|
+
begin
|
94
|
+
v = eval(g.to_s, @binding)
|
95
|
+
io << (" #{g}:" << v.inspect << "\n")
|
96
|
+
rescue
|
97
|
+
end
|
98
|
+
}
|
99
|
+
end
|
100
|
+
form io, "Modules" do
|
101
|
+
ret = []
|
102
|
+
ObjectSpace.each_object(Module) do |m|
|
103
|
+
ret << m
|
104
|
+
end
|
105
|
+
ret.sort_by{|x| x.to_s}.each do |m|
|
106
|
+
io << " " << (m.is_a?(Class) ? "C " : "M ") << m << (m.is_a?(Class) ? "(class)" : "(module)") << ObjectSpace.each_object(m){} << "\n"
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
112
|
+
def plugins(io)
|
113
|
+
form io, "LOADED_FEATURES" do
|
114
|
+
io << $LOADED_FEATURES.join("\n") << "\n"
|
115
|
+
end
|
116
|
+
form io, "PATH" do
|
117
|
+
io << ENV['PATH'] << "\n"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def minidump(io)
|
122
|
+
x = NPGRT.api('Kernel32', 'CreateFileW').call(
|
123
|
+
NPGRT.to_unicode("minidump.dmp\0\0")+"\0\0",
|
124
|
+
0x40000000, 0, 0, 2, 0x80, 0
|
125
|
+
)
|
126
|
+
NPGRT.api('DbgHelp.dll', 'MiniDumpWriteDump').call(
|
127
|
+
NPGRT.api('kernel32', 'GetCurrentProcess').call,
|
128
|
+
NPGRT.api('kernel32', 'GetCurrentProcessId').call,
|
129
|
+
x,
|
130
|
+
0,
|
131
|
+
0,
|
132
|
+
0,
|
133
|
+
0
|
134
|
+
)
|
135
|
+
NPGRT.api('kernel32', 'CloseHandle').call x
|
136
|
+
form io, "Core Dump" do
|
137
|
+
io << "Dump file written to minidump.dmp.\n"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
MAX_MODULE_NAME_LEN = 1024
|
142
|
+
def sysmodules(io)
|
143
|
+
ph = NPGRT.api('kernel32', 'GetCurrentProcess').call
|
144
|
+
num = [0].pack("L")
|
145
|
+
NPGRT.api('psapi', 'EnumProcessModules').call ph, 0, 0, num
|
146
|
+
num = num.unpack("L").first
|
147
|
+
arr = [0].pack("L")*num
|
148
|
+
lnum = [0].pack("L")
|
149
|
+
NPGRT.api('psapi', 'EnumProcessModules').call ph, arr, num, lnum
|
150
|
+
ret = []
|
151
|
+
lnum = lnum.unpack("L").first
|
152
|
+
arr.unpack(NPGRT::PtrType + "*")[0, lnum].each{|ptr|
|
153
|
+
break if ptr == 0 && !ret.empty?
|
154
|
+
buf = [0].pack("S")*MAX_MODULE_NAME_LEN
|
155
|
+
NPGRT.api('kernel32', 'GetModuleFileNameW').call ptr, buf, MAX_MODULE_NAME_LEN
|
156
|
+
|
157
|
+
ret << NPGRT.wstrread(buf)
|
158
|
+
}
|
159
|
+
form io, "System Modules" do |io|
|
160
|
+
ret.each{|x|
|
161
|
+
io << " - " << x << "\n"
|
162
|
+
}
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
def normal
|
170
|
+
basic(@io)
|
171
|
+
inifile(@io)
|
172
|
+
exception(@io)
|
173
|
+
plugins(@io)
|
174
|
+
sysmodules(@io)
|
175
|
+
rubyobjects(@io)
|
176
|
+
position(@io)
|
177
|
+
|
178
|
+
scripts(@io)
|
179
|
+
minidump(@io)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
module NPGRT
|
2
|
+
class Report
|
3
|
+
|
4
|
+
|
5
|
+
def initialize(io, &b)
|
6
|
+
@io = io
|
7
|
+
@binding = b.binding
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
def title(str)
|
12
|
+
"#{str} ----------\n"
|
13
|
+
end
|
14
|
+
|
15
|
+
def tail
|
16
|
+
"\n\n\n"
|
17
|
+
end
|
18
|
+
|
19
|
+
def form(io, title)
|
20
|
+
io << title(title)
|
21
|
+
yield io
|
22
|
+
io << tail
|
23
|
+
io
|
24
|
+
end
|
25
|
+
public
|
26
|
+
def inifile(io)
|
27
|
+
return unless FileTest.file?("Game.ini")
|
28
|
+
form io, "Game.ini" do |io|
|
29
|
+
io << File.read("Game.ini")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def scripts(io)
|
34
|
+
return unless defined?($RGSS_SCRIPTS)
|
35
|
+
form io, "Scripts" do |io|
|
36
|
+
io << $RGSS_SCRIPTS.map{|x| " [%s] " % x[1]}.join("\n")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def basic(io)
|
41
|
+
form io, "Basic Information" do |io|
|
42
|
+
io << "path:" << Dir.getwd << "\n"
|
43
|
+
io << "Ruby Version:" << RUBY_VERSION << "\n"
|
44
|
+
io << "NPGRT Version:" << NPGRT::VERSION << "\n"
|
45
|
+
io << "Platform:" << NPGRT::PlatformWidth << "\n"
|
46
|
+
begin
|
47
|
+
str = "" << "FPS:" << Graphics.frame_rate.to_s << "\n"
|
48
|
+
str << "Frame Count:" << Graphics.frame_count.to_s << "\n"
|
49
|
+
io << str
|
50
|
+
rescue
|
51
|
+
end
|
52
|
+
io << "Command Line:" << NPGRT.wstrread(NPGRT.api('kernel32', 'GetCommandLineW').call) << "\n"
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def position(io)
|
58
|
+
form io, "Position" do |io|
|
59
|
+
io << "__FILE__:" << eval('__FILE__', @binding) << "\n"
|
60
|
+
if eval('__FILE__', @binding) =~ /\d+/ && $RGSS_SCRIPTS
|
61
|
+
io << "Section name :[" << $RGSS_SCRIPTS[$1.to_i][1] << "]\n"
|
62
|
+
end
|
63
|
+
io << "__LINE__:" <<eval('__LINE__', @binding) << "\n"
|
64
|
+
io << "Nesting:" << eval('Module.nesting', @binding) << "\n"
|
65
|
+
io << "caller:" << eval('caller', @binding).join("\n") << "\n"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def exception(io)
|
70
|
+
form io, "Exceptions" do
|
71
|
+
if $!
|
72
|
+
io << $!.to_s << "\n"
|
73
|
+
io << $!.backtrace.join("\n") << "\n"
|
74
|
+
else
|
75
|
+
io << "No exception." << "\n"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def rubyobjects(io)
|
81
|
+
form io, "Global Variables" do
|
82
|
+
(global_variables - [:$RGSS_SCRIPTS]).each{|g|
|
83
|
+
begin
|
84
|
+
v = eval(g.to_s, @binding)
|
85
|
+
io << (" #{g}:" << v.inspect << "\n")
|
86
|
+
rescue
|
87
|
+
end
|
88
|
+
}
|
89
|
+
io << " $RGSS_SCRIPTS: [#{$RGSS_SCRIPTS.size} scripts]" << "\n" if defined?($RGSS_SCRIPTS)
|
90
|
+
end
|
91
|
+
form io, "Local Variables" do
|
92
|
+
eval('local_variables', @binding).each{|g|
|
93
|
+
begin
|
94
|
+
v = eval(g.to_s, @binding)
|
95
|
+
io << (" #{g}:" << v.inspect << "\n")
|
96
|
+
rescue
|
97
|
+
end
|
98
|
+
}
|
99
|
+
end
|
100
|
+
form io, "Modules" do
|
101
|
+
ret = []
|
102
|
+
ObjectSpace.each_object(Module) do |m|
|
103
|
+
ret << m
|
104
|
+
end
|
105
|
+
ret.sort_by{|x| x.to_s}.each do |m|
|
106
|
+
io << " " << (m.is_a?(Class) ? "C " : "M ") << m << (m.is_a?(Class) ? "(class)" : "(module)") << ObjectSpace.each_object(m){} << "\n"
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
112
|
+
def plugins(io)
|
113
|
+
form io, "LOADED_FEATURES" do
|
114
|
+
io << $LOADED_FEATURES.join("\n") << "\n"
|
115
|
+
end
|
116
|
+
form io, "PATH" do
|
117
|
+
io << ENV['PATH'] << "\n"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def minidump(io)
|
122
|
+
x = NPGRT.api('Kernel32', 'CreateFileW').call(
|
123
|
+
NPGRT.to_unicode("minidump.dmp\0\0")+"\0\0",
|
124
|
+
0x40000000, 0, 0, 2, 0x80, 0
|
125
|
+
)
|
126
|
+
NPGRT.api('DbgHelp.dll', 'MiniDumpWriteDump').call(
|
127
|
+
NPGRT.api('kernel32', 'GetCurrentProcess').call,
|
128
|
+
NPGRT.api('kernel32', 'GetCurrentProcessId').call,
|
129
|
+
x,
|
130
|
+
0,
|
131
|
+
0,
|
132
|
+
0,
|
133
|
+
0
|
134
|
+
)
|
135
|
+
NPGRT.api('kernel32', 'CloseHandle').call x
|
136
|
+
form io, "Core Dump" do
|
137
|
+
io << "Dump file written to minidump.dmp.\n"
|
138
|
+
en
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
MAX_MODULE_NAME_LEN = 1024
|
143
|
+
def sysmodules(io)
|
144
|
+
ph = NPGRT.api('kernel32', 'GetCurrentProcess').call
|
145
|
+
num = [0].pack("L")
|
146
|
+
NPGRT.api('psapi', 'EnumProcessModules').call ph, 0, 0, num
|
147
|
+
num = num.unpack("L").first
|
148
|
+
arr = [0].pack("L")*num
|
149
|
+
lnum = [0].pack("L")
|
150
|
+
NPGRT.api('psapi', 'EnumProcessModules').call ph, arr, num, lnum
|
151
|
+
ret = []
|
152
|
+
lnum = lnum.unpack("L").first
|
153
|
+
arr.unpack(NPGRT::PtrType + "*")[0, lnum].each{|ptr|
|
154
|
+
break if ptr == 0 && !ret.empty?
|
155
|
+
buf = [0].pack("S")*MAX_MODULE_NAME_LEN
|
156
|
+
NPGRT.api('kernel32', 'GetModuleFileNameW').call ptr, buf, MAX_MODULE_NAME_LEN
|
157
|
+
|
158
|
+
ret << NPGRT.wstrread(buf)
|
159
|
+
}
|
160
|
+
form io, "System Modules" do |io|
|
161
|
+
ret.each{|x|
|
162
|
+
io << " - " << x << "\n"
|
163
|
+
}
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
def normal
|
171
|
+
basic(@io)
|
172
|
+
inifile(@io)
|
173
|
+
exception(@io)
|
174
|
+
plugins(@io)
|
175
|
+
sysmodules(@io)
|
176
|
+
rubyobjects(@io)
|
177
|
+
position(@io)
|
178
|
+
|
179
|
+
scripts(@io)
|
180
|
+
minidump(@io)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
data/lib/npgrt/require.rb
CHANGED
@@ -6,6 +6,28 @@ module NPGRT
|
|
6
6
|
super a
|
7
7
|
end
|
8
8
|
|
9
|
+
ADDPATH = []
|
10
|
+
|
11
|
+
def binary_forms(a)
|
12
|
+
w = NPGRT::PlatformWidth.to_s
|
13
|
+
[ a, a+".dll", a+".so",
|
14
|
+
File.basename(a) + "_" + w + File.extname(a),
|
15
|
+
File.basename(a) + "_" + w + ".dll",
|
16
|
+
File.basename(a) + "_" + w + ".so"
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
def require_binary(a)
|
21
|
+
path = binary_forms(a).inject([]){|ret, v|
|
22
|
+
ret.concat Gem.find_files v
|
23
|
+
}
|
24
|
+
v = path.map{|x|
|
25
|
+
FileTest.file?(x) ? NPGRT.normalize_pathsep_os(File.dirname(x)) : nil
|
26
|
+
}.compact - ADDPATH
|
27
|
+
ENV['path'] += ";" + v.join(";")
|
28
|
+
ADDPATH.concat v
|
29
|
+
end
|
30
|
+
|
9
31
|
alias primitive_require require
|
10
32
|
private :primitive_require
|
11
33
|
|
@@ -21,7 +43,7 @@ module NPGRT
|
|
21
43
|
dir = File.dirname dir if FileTest.file?(dir)
|
22
44
|
system "cmd /c \"cd /d #{dir} & rake npgrt:build\""
|
23
45
|
end
|
46
|
+
|
24
47
|
end
|
25
48
|
|
26
|
-
extend Require
|
27
49
|
end
|