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
data/src/exerb/exerb.h
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
// $Id: exerb.h,v 1.42 2007/02/26 10:20:44 yuya Exp $
|
2
|
+
#ifndef EXERB_H
|
3
|
+
#define EXERB_H 1
|
4
|
+
|
5
|
+
#include <windows.h>
|
6
|
+
|
7
|
+
#pragma pack(push, 1)
|
8
|
+
|
9
|
+
typedef struct {
|
10
|
+
DWORD signature1;
|
11
|
+
DWORD signature2;
|
12
|
+
union {
|
13
|
+
DWORD options;
|
14
|
+
struct {
|
15
|
+
DWORD kcode:2;
|
16
|
+
DWORD reserved:30;
|
17
|
+
};
|
18
|
+
};
|
19
|
+
DWORD offset_of_name_table;
|
20
|
+
DWORD offset_of_file_table;
|
21
|
+
} ARCHIVE_HEADER;
|
22
|
+
|
23
|
+
typedef struct {
|
24
|
+
DWORD signature;
|
25
|
+
WORD number_of_headers;
|
26
|
+
DWORD offset_of_headers;
|
27
|
+
DWORD offset_of_pool;
|
28
|
+
} NAME_TABLE_HEADER;
|
29
|
+
|
30
|
+
typedef struct {
|
31
|
+
WORD id;
|
32
|
+
DWORD offset_of_name;
|
33
|
+
} NAME_ENTRY_HEADER;
|
34
|
+
|
35
|
+
typedef struct {
|
36
|
+
DWORD signature;
|
37
|
+
WORD number_of_headers;
|
38
|
+
DWORD offset_of_headers;
|
39
|
+
DWORD offset_of_pool;
|
40
|
+
} FILE_TABLE_HEADER;
|
41
|
+
|
42
|
+
typedef struct {
|
43
|
+
WORD id;
|
44
|
+
DWORD offset_of_file;
|
45
|
+
DWORD size_of_file;
|
46
|
+
union {
|
47
|
+
BYTE flag_of_file;
|
48
|
+
struct {
|
49
|
+
BYTE type_of_file:3;
|
50
|
+
BYTE flag_no_replace_function:1;
|
51
|
+
BYTE flag_reserved:4;
|
52
|
+
};
|
53
|
+
};
|
54
|
+
BYTE zipd;
|
55
|
+
} FILE_ENTRY_HEADER;
|
56
|
+
|
57
|
+
#pragma pack(pop)
|
58
|
+
|
59
|
+
//typedef VALUE (*RUBY_PROC)(...);
|
60
|
+
|
61
|
+
#define ARCHIVE_HEADER_SIGNATURE1 0x52455845
|
62
|
+
#define ARCHIVE_HEADER_SIGNATURE2 0x04000042
|
63
|
+
#define ARCHIVE_HEADER_OPTIONS_KCODE_NONE 0
|
64
|
+
#define ARCHIVE_HEADER_OPTIONS_KCODE_EUC 1
|
65
|
+
#define ARCHIVE_HEADER_OPTIONS_KCODE_SJIS 2
|
66
|
+
#define ARCHIVE_HEADER_OPTIONS_KCODE_UTF8 3
|
67
|
+
|
68
|
+
#define NAME_TABLE_HEADER_SIGNATURE 0x0100544E
|
69
|
+
#define FILE_TABLE_HEADER_SIGNATURE 0x04005446
|
70
|
+
|
71
|
+
#define FILE_ENTRY_HEADER_TYPE_RUBY_SCRIPT 1
|
72
|
+
#define FILE_ENTRY_HEADER_TYPE_EXTENSION_LIBRARY 2
|
73
|
+
#define FILE_ENTRY_HEADER_TYPE_DYNAMIC_LIBRARY 3
|
74
|
+
#define FILE_ENTRY_HEADER_TYPE_RESOURCE_LIBRARY 4
|
75
|
+
#define FILE_ENTRY_HEADER_TYPE_DATA_BINARY 5
|
76
|
+
#define FILE_ENTRY_HEADER_TYPE_COMPILED_SCRIPT 6
|
77
|
+
|
78
|
+
#ifndef RSTRING_PTR
|
79
|
+
#define RSTRING_PTR(value) RSTRING(value)->ptr
|
80
|
+
#endif
|
81
|
+
|
82
|
+
#ifndef RSTRING_LEN
|
83
|
+
#define RSTRING_LEN(value) RSTRING(value)->len
|
84
|
+
#endif
|
85
|
+
|
86
|
+
VALUE exerb_rb_f_require(VALUE obj, VALUE fname);
|
87
|
+
VALUE exerb_require(VALUE fname);
|
88
|
+
#ifdef RUBY19
|
89
|
+
VALUE exerb_require_safe(VALUE fname, int safe);
|
90
|
+
#endif
|
91
|
+
|
92
|
+
#endif /* EXERB_H */
|
data/src/exerb/gui.c
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
// $Id: gui.cpp,v 1.15 2008/12/19 12:17:50 arton Exp $
|
2
|
+
|
3
|
+
#include <ruby.h>
|
4
|
+
#include <windowsx.h>
|
5
|
+
#include "exerb.h"
|
6
|
+
#include "resource.h"
|
7
|
+
|
8
|
+
////////////////////////////////////////////////////////////////////////////////
|
9
|
+
|
10
|
+
int exerb_main(int argc, char** argv, void (*on_init)(VALUE, VALUE, VALUE), void (*on_fail)(VALUE)); // exerb.cpp
|
11
|
+
|
12
|
+
int WINAPI WinMain(HINSTANCE current_instance, HINSTANCE prev_instance, LPSTR cmd_line, int show_cmd);
|
13
|
+
static void on_init(VALUE io_stdin, VALUE io_stdout, VALUE io_stderr);
|
14
|
+
static void on_fail(VALUE errinfo);
|
15
|
+
|
16
|
+
static void exerb_replace_io_methods(const VALUE io);
|
17
|
+
static VALUE rb_exerbio_write(VALUE self, VALUE str);
|
18
|
+
static VALUE rb_exerbio_return_nil(int argc, VALUE *argv, VALUE self);
|
19
|
+
|
20
|
+
static LRESULT CALLBACK dialog_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
|
21
|
+
|
22
|
+
////////////////////////////////////////////////////////////////////////////////
|
23
|
+
|
24
|
+
int WINAPI
|
25
|
+
WinMain(HINSTANCE current_instance, HINSTANCE prev_instance, LPSTR cmd_line, int show_cmd)
|
26
|
+
{
|
27
|
+
#ifdef _DEBUG
|
28
|
+
__asm { int 3 }
|
29
|
+
#endif
|
30
|
+
return exerb_main(0, NULL, on_init, on_fail);
|
31
|
+
}
|
32
|
+
|
33
|
+
static void
|
34
|
+
on_init(VALUE io_stdin, VALUE io_stdout, VALUE io_stderr)
|
35
|
+
{
|
36
|
+
exerb_replace_io_methods(io_stdin);
|
37
|
+
exerb_replace_io_methods(io_stdout);
|
38
|
+
exerb_replace_io_methods(io_stderr);
|
39
|
+
|
40
|
+
rb_define_global_function("gets", rb_exerbio_return_nil, -1);
|
41
|
+
rb_define_global_function("readline", rb_exerbio_return_nil, -1);
|
42
|
+
rb_define_global_function("getc", rb_exerbio_return_nil, -1);
|
43
|
+
rb_define_global_function("readlines", rb_exerbio_return_nil, -1);
|
44
|
+
}
|
45
|
+
|
46
|
+
static void
|
47
|
+
on_fail(VALUE errinfo)
|
48
|
+
{
|
49
|
+
DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_EXCEPTION), NULL, (DLGPROC)dialog_proc, (LPARAM)errinfo);
|
50
|
+
}
|
51
|
+
|
52
|
+
////////////////////////////////////////////////////////////////////////////////
|
53
|
+
|
54
|
+
static void
|
55
|
+
exerb_replace_io_methods(const VALUE io)
|
56
|
+
{
|
57
|
+
rb_define_singleton_method(io, "reopen", rb_exerbio_return_nil, -1);
|
58
|
+
rb_define_singleton_method(io, "each", rb_exerbio_return_nil, -1);
|
59
|
+
rb_define_singleton_method(io, "each_line", rb_exerbio_return_nil, -1);
|
60
|
+
rb_define_singleton_method(io, "each_byte", rb_exerbio_return_nil, -1);
|
61
|
+
rb_define_singleton_method(io, "syswrite", rb_exerbio_return_nil, -1);
|
62
|
+
rb_define_singleton_method(io, "sysread", rb_exerbio_return_nil, -1);
|
63
|
+
rb_define_singleton_method(io, "fileno", rb_exerbio_return_nil, -1);
|
64
|
+
rb_define_singleton_method(io, "to_i", rb_exerbio_return_nil, -1);
|
65
|
+
rb_define_singleton_method(io, "to_io", rb_exerbio_return_nil, -1);
|
66
|
+
rb_define_singleton_method(io, "fsync", rb_exerbio_return_nil, -1);
|
67
|
+
rb_define_singleton_method(io, "sync", rb_exerbio_return_nil, -1);
|
68
|
+
rb_define_singleton_method(io, "sync=", rb_exerbio_return_nil, -1);
|
69
|
+
rb_define_singleton_method(io, "lineno", rb_exerbio_return_nil, -1);
|
70
|
+
rb_define_singleton_method(io, "lineno=", rb_exerbio_return_nil, -1);
|
71
|
+
rb_define_singleton_method(io, "readlines", rb_exerbio_return_nil, -1);
|
72
|
+
rb_define_singleton_method(io, "read", rb_exerbio_return_nil, -1);
|
73
|
+
rb_define_singleton_method(io, "write", rb_exerbio_write, 1);
|
74
|
+
rb_define_singleton_method(io, "gets", rb_exerbio_return_nil, -1);
|
75
|
+
rb_define_singleton_method(io, "readline", rb_exerbio_return_nil, -1);
|
76
|
+
rb_define_singleton_method(io, "getc", rb_exerbio_return_nil, -1);
|
77
|
+
rb_define_singleton_method(io, "readchar", rb_exerbio_return_nil, -1);
|
78
|
+
rb_define_singleton_method(io, "ungetc", rb_exerbio_return_nil, -1);
|
79
|
+
rb_define_singleton_method(io, "flush", rb_exerbio_return_nil, -1);
|
80
|
+
rb_define_singleton_method(io, "tell", rb_exerbio_return_nil, -1);
|
81
|
+
rb_define_singleton_method(io, "seek", rb_exerbio_return_nil, -1);
|
82
|
+
rb_define_singleton_method(io, "rewind", rb_exerbio_return_nil, -1);
|
83
|
+
rb_define_singleton_method(io, "pos", rb_exerbio_return_nil, -1);
|
84
|
+
rb_define_singleton_method(io, "pos=", rb_exerbio_return_nil, -1);
|
85
|
+
rb_define_singleton_method(io, "eof", rb_exerbio_return_nil, -1);
|
86
|
+
rb_define_singleton_method(io, "eof?", rb_exerbio_return_nil, -1);
|
87
|
+
rb_define_singleton_method(io, "close", rb_exerbio_return_nil, -1);
|
88
|
+
rb_define_singleton_method(io, "closed?", rb_exerbio_return_nil, -1);
|
89
|
+
rb_define_singleton_method(io, "close_read", rb_exerbio_return_nil, -1);
|
90
|
+
rb_define_singleton_method(io, "close_write", rb_exerbio_return_nil, -1);
|
91
|
+
rb_define_singleton_method(io, "isatty", rb_exerbio_return_nil, -1);
|
92
|
+
rb_define_singleton_method(io, "tty?", rb_exerbio_return_nil, -1);
|
93
|
+
rb_define_singleton_method(io, "binmode", rb_exerbio_return_nil, -1);
|
94
|
+
rb_define_singleton_method(io, "sysseek", rb_exerbio_return_nil, -1);
|
95
|
+
rb_define_singleton_method(io, "ioctl", rb_exerbio_return_nil, -1);
|
96
|
+
rb_define_singleton_method(io, "fcntl", rb_exerbio_return_nil, -1);
|
97
|
+
rb_define_singleton_method(io, "pid", rb_exerbio_return_nil, -1);
|
98
|
+
}
|
99
|
+
|
100
|
+
static VALUE
|
101
|
+
rb_exerbio_write(VALUE self, VALUE str)
|
102
|
+
{
|
103
|
+
rb_secure(1);
|
104
|
+
if ( TYPE(str) != T_STRING ) str = rb_obj_as_string(str);
|
105
|
+
if ( RSTRING_LEN(str) > 0 ) OutputDebugString(RSTRING_PTR(str));
|
106
|
+
return Qnil;
|
107
|
+
}
|
108
|
+
|
109
|
+
static VALUE
|
110
|
+
rb_exerbio_return_nil(int argc, VALUE *argv, VALUE self)
|
111
|
+
{
|
112
|
+
return Qnil;
|
113
|
+
}
|
114
|
+
|
115
|
+
////////////////////////////////////////////////////////////////////////////////
|
116
|
+
|
117
|
+
static LRESULT CALLBACK
|
118
|
+
dialog_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
|
119
|
+
{
|
120
|
+
static HFONT font = NULL;
|
121
|
+
|
122
|
+
switch ( message ) {
|
123
|
+
case WM_INITDIALOG:
|
124
|
+
if ( lparam ) {
|
125
|
+
const VALUE errinfo = (VALUE)lparam;
|
126
|
+
const VALUE message = rb_funcall(errinfo, rb_intern("message"), 0);
|
127
|
+
const VALUE message_str = rb_funcall(message, rb_intern("gsub"), 2, rb_str_new2("\n"), rb_str_new2("\r\n"));
|
128
|
+
const VALUE backtrace = rb_funcall(errinfo, rb_intern("backtrace"), 0);
|
129
|
+
const VALUE backtrace_str = rb_str_concat(rb_ary_join(backtrace, rb_str_new2("\r\n")), rb_str_new2("\r\n"));
|
130
|
+
|
131
|
+
SetDlgItemText(hwnd, IDC_EDIT_TYPE, rb_obj_classname(errinfo));
|
132
|
+
#ifdef RUBY19
|
133
|
+
SetDlgItemText(hwnd, IDC_EDIT_MESSAGE, rb_string_value_ptr((volatile VALUE*) &message_str));
|
134
|
+
SetDlgItemText(hwnd, IDC_EDIT_BACKTRACE, rb_string_value_ptr((volatile VALUE*) &backtrace_str));
|
135
|
+
#else
|
136
|
+
SetDlgItemText(hwnd, IDC_EDIT_MESSAGE, STR2CSTR(message_str));
|
137
|
+
SetDlgItemText(hwnd, IDC_EDIT_BACKTRACE, STR2CSTR(backtrace_str));
|
138
|
+
#endif
|
139
|
+
}
|
140
|
+
|
141
|
+
{
|
142
|
+
char self_filename[MAX_PATH] = "";
|
143
|
+
char window_title_format[MAX_PATH] = "";
|
144
|
+
char window_title[MAX_PATH] = "";
|
145
|
+
GetModuleFileName(NULL, self_filename, sizeof(self_filename));
|
146
|
+
GetWindowText(hwnd, window_title_format, sizeof(window_title_format));
|
147
|
+
wsprintf(window_title, window_title_format, self_filename);
|
148
|
+
SetWindowText(hwnd, window_title);
|
149
|
+
}
|
150
|
+
|
151
|
+
font = CreateFont(14, 0, 0, 0, FW_REGULAR, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_MODERN, "Terminal");
|
152
|
+
SetWindowFont(GetDlgItem(hwnd, IDC_EDIT_TYPE), font, FALSE);
|
153
|
+
SetWindowFont(GetDlgItem(hwnd, IDC_EDIT_MESSAGE), font, FALSE);
|
154
|
+
SetWindowFont(GetDlgItem(hwnd, IDC_EDIT_BACKTRACE), font, FALSE);
|
155
|
+
|
156
|
+
MessageBeep(MB_ICONHAND);
|
157
|
+
|
158
|
+
return TRUE;
|
159
|
+
case WM_DESTROY:
|
160
|
+
DeleteObject(font);
|
161
|
+
return TRUE;
|
162
|
+
case WM_CLOSE:
|
163
|
+
EndDialog(hwnd, ID_CLOSE);
|
164
|
+
return TRUE;
|
165
|
+
case WM_COMMAND:
|
166
|
+
if ( LOWORD(wparam) == ID_CLOSE ) {
|
167
|
+
EndDialog(hwnd, ID_CLOSE);
|
168
|
+
return TRUE;
|
169
|
+
}
|
170
|
+
break;
|
171
|
+
}
|
172
|
+
|
173
|
+
return FALSE;
|
174
|
+
}
|
175
|
+
|
176
|
+
////////////////////////////////////////////////////////////////////////////////
|
data/src/exerb/module.c
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
// $Id: module.cpp,v 1.11 2007/02/25 16:44:51 yuya Exp $
|
2
|
+
|
3
|
+
#include <ruby.h>
|
4
|
+
#include "exerb.h"
|
5
|
+
#include "module.h"
|
6
|
+
#include "utility.h"
|
7
|
+
|
8
|
+
////////////////////////////////////////////////////////////////////////////////
|
9
|
+
|
10
|
+
extern VALUE rb_mExerbRuntime;
|
11
|
+
extern VALUE rb_eExerbRuntimeError;
|
12
|
+
|
13
|
+
extern FILE_TABLE_HEADER *g_file_table_header;
|
14
|
+
|
15
|
+
extern int g_loaded_resource_count;
|
16
|
+
extern HMODULE g_loaded_resource_table[];
|
17
|
+
|
18
|
+
////////////////////////////////////////////////////////////////////////////////
|
19
|
+
|
20
|
+
static VALUE rb_exerbruntime_s_filepath(VALUE self);
|
21
|
+
static VALUE rb_exerbruntime_s_filename(VALUE self);
|
22
|
+
static VALUE rb_exerbruntime_s_open(VALUE self, VALUE filename);
|
23
|
+
static VALUE rb_exerbruntime_s_load_string(VALUE self, VALUE id);
|
24
|
+
static VALUE rb_exerbruntime_s_load_icon(VALUE self, VALUE id);
|
25
|
+
static VALUE rb_exerbruntime_s_load_cursor(VALUE self, VALUE id);
|
26
|
+
static LPCTSTR exerb_convert_resource_id(VALUE value);
|
27
|
+
|
28
|
+
////////////////////////////////////////////////////////////////////////////////
|
29
|
+
|
30
|
+
void
|
31
|
+
Init_ExerbRuntime()
|
32
|
+
{
|
33
|
+
static VALUE gv_exerb = Qtrue;
|
34
|
+
rb_define_readonly_variable("$Exerb", &gv_exerb);
|
35
|
+
|
36
|
+
rb_mExerbRuntime = rb_define_module("ExerbRuntime");
|
37
|
+
|
38
|
+
rb_define_singleton_method(rb_mExerbRuntime, "filepath", rb_exerbruntime_s_filepath, 0);
|
39
|
+
rb_define_singleton_method(rb_mExerbRuntime, "filename", rb_exerbruntime_s_filename, 0);
|
40
|
+
rb_define_singleton_method(rb_mExerbRuntime, "open", rb_exerbruntime_s_open, 1);
|
41
|
+
rb_define_singleton_method(rb_mExerbRuntime, "load_string", rb_exerbruntime_s_load_string, 1);
|
42
|
+
rb_define_singleton_method(rb_mExerbRuntime, "load_icon", rb_exerbruntime_s_load_icon, 1);
|
43
|
+
rb_define_singleton_method(rb_mExerbRuntime, "load_cursor", rb_exerbruntime_s_load_cursor, 1);
|
44
|
+
|
45
|
+
rb_eExerbRuntimeError = rb_define_class_under(rb_mExerbRuntime, "Error", rb_eException);
|
46
|
+
}
|
47
|
+
|
48
|
+
static VALUE
|
49
|
+
rb_exerbruntime_s_filepath(VALUE self)
|
50
|
+
{
|
51
|
+
char filepath[MAX_PATH] = "";
|
52
|
+
exerb_get_self_filepath(filepath, sizeof(filepath));
|
53
|
+
return rb_str_new2(filepath);
|
54
|
+
}
|
55
|
+
|
56
|
+
static VALUE
|
57
|
+
rb_exerbruntime_s_filename(VALUE self)
|
58
|
+
{
|
59
|
+
char filepath[MAX_PATH] = "";
|
60
|
+
const char *filename = exerb_get_self_filepath(filepath, sizeof(filepath));
|
61
|
+
return rb_str_new2(filename);
|
62
|
+
}
|
63
|
+
|
64
|
+
static VALUE
|
65
|
+
rb_exerbruntime_s_open(VALUE self, VALUE filename)
|
66
|
+
{
|
67
|
+
#ifdef RUBY19
|
68
|
+
SafeStringValue(filename);
|
69
|
+
#else
|
70
|
+
Check_SafeStr(filename);
|
71
|
+
#endif
|
72
|
+
rb_require("stringio");
|
73
|
+
|
74
|
+
NAME_ENTRY_HEADER *name_entry = exerb_find_name_entry_by_filename(RSTRING_PTR(filename), NULL);
|
75
|
+
if ( !name_entry ) rb_raise(rb_eLoadError, "No such file to load -- %s", RSTRING_PTR(filename));
|
76
|
+
|
77
|
+
FILE_ENTRY_HEADER *file_entry = exerb_find_file_entry(name_entry->id);
|
78
|
+
VALUE file = exerb_get_file_from_entry2(file_entry);
|
79
|
+
|
80
|
+
return rb_funcall(rb_path2class("StringIO"), rb_intern("new"), 2, file, rb_str_new2("r"));
|
81
|
+
}
|
82
|
+
|
83
|
+
static VALUE
|
84
|
+
rb_exerbruntime_s_load_string(VALUE self, VALUE id)
|
85
|
+
{
|
86
|
+
LPCSTR res_id = exerb_convert_resource_id(id);
|
87
|
+
char buffer[512] = "";
|
88
|
+
|
89
|
+
for ( int i = 0; i < g_loaded_resource_count; i++ ) {
|
90
|
+
if ( LoadString(g_loaded_resource_table[i], (unsigned int)res_id, buffer, sizeof(buffer)) ) {
|
91
|
+
return rb_str_new2(buffer);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
return Qnil;
|
96
|
+
}
|
97
|
+
|
98
|
+
static VALUE
|
99
|
+
rb_exerbruntime_s_load_icon(VALUE self, VALUE id)
|
100
|
+
{
|
101
|
+
LPCSTR res_id = exerb_convert_resource_id(id);
|
102
|
+
|
103
|
+
for ( int i = 0; i < g_loaded_resource_count; i++ ) {
|
104
|
+
HICON icon = LoadIcon(g_loaded_resource_table[i], res_id);
|
105
|
+
if ( icon ) return INT2NUM((int)icon);
|
106
|
+
}
|
107
|
+
|
108
|
+
return Qnil;
|
109
|
+
}
|
110
|
+
|
111
|
+
static VALUE
|
112
|
+
rb_exerbruntime_s_load_cursor(VALUE self, VALUE id)
|
113
|
+
{
|
114
|
+
LPCSTR res_id = exerb_convert_resource_id(id);
|
115
|
+
|
116
|
+
for ( int i = 0; i < g_loaded_resource_count; i++ ) {
|
117
|
+
HCURSOR icon = LoadCursor(g_loaded_resource_table[i], res_id);
|
118
|
+
if ( icon ) return INT2NUM((int)icon);
|
119
|
+
}
|
120
|
+
|
121
|
+
return Qnil;
|
122
|
+
}
|
123
|
+
|
124
|
+
static LPCTSTR
|
125
|
+
exerb_convert_resource_id(VALUE value)
|
126
|
+
{
|
127
|
+
switch ( TYPE(value) ) {
|
128
|
+
case T_FIXNUM:
|
129
|
+
return MAKEINTRESOURCE(FIX2INT(value));
|
130
|
+
case T_STRING:
|
131
|
+
return RSTRING_PTR(value);
|
132
|
+
default:
|
133
|
+
rb_raise(rb_eArgError, "argument needs to be integer or string");
|
134
|
+
return NULL;
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
////////////////////////////////////////////////////////////////////////////////
|
data/src/exerb/module.h
ADDED
data/src/exerb/patch.c
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
|
3
|
+
#include "ruby.h"
|
4
|
+
#include "exerb.h"
|
5
|
+
|
6
|
+
VALUE __real_rb_require(const char *);
|
7
|
+
#ifdef RUBY19
|
8
|
+
VALUE __real_rb_require_safe(VALUE, int);
|
9
|
+
#endif
|
10
|
+
|
11
|
+
VALUE
|
12
|
+
__wrap_rb_require(const char *fname)
|
13
|
+
{
|
14
|
+
VALUE fn = rb_str_new2(fname);
|
15
|
+
OBJ_FREEZE(fn);
|
16
|
+
return exerb_require(fn);
|
17
|
+
}
|
18
|
+
|
19
|
+
#ifdef RUBY19
|
20
|
+
|
21
|
+
VALUE
|
22
|
+
__wrap_rb_require_safe(VALUE fname, int safe)
|
23
|
+
{
|
24
|
+
return exerb_require(fname);
|
25
|
+
}
|
26
|
+
|
27
|
+
#endif
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// $Id: resource.h,v 1.14 2010/12/26 00:03:43 arton Exp $
|
2
|
+
#ifndef RESOURCE_H
|
3
|
+
#define RESOURCE_H 1
|
4
|
+
|
5
|
+
#define RT_EXERB 100
|
6
|
+
#define ID_EXERB 1
|
7
|
+
#define IDD_EXCEPTION 101
|
8
|
+
#define IDI_RUBY 102
|
9
|
+
|
10
|
+
#define ID_CLOSE 1000
|
11
|
+
#define IDC_EDIT_MESSAGE 1001
|
12
|
+
#define IDC_EDIT_BACKTRACE 1002
|
13
|
+
#define IDC_EDIT_TYPE 1003
|
14
|
+
|
15
|
+
#ifndef IDC_STATIC
|
16
|
+
#define IDC_STATIC -1
|
17
|
+
#endif
|
18
|
+
|
19
|
+
#define EXERB_RES_EXERB_VERSION1 6,0,1,0
|
20
|
+
#define EXERB_RES_EXERB_VERSION2 "6.0.1"
|
21
|
+
|
22
|
+
#endif /* RESOURCE_H */
|