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,121 @@
|
|
1
|
+
// $Id: resource.rc,v 1.3 2007/02/26 08:22:40 yuya Exp $
|
2
|
+
|
3
|
+
#include "resource.h"
|
4
|
+
#include "winresrc.h"
|
5
|
+
|
6
|
+
////////////////////////////////////////////////////////////////////////////////
|
7
|
+
|
8
|
+
#if defined(CUI) || defined(GUI) || defined(RUNTIME)
|
9
|
+
|
10
|
+
LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT
|
11
|
+
|
12
|
+
VS_VERSION_INFO VERSIONINFO
|
13
|
+
FILEVERSION EXERB_RES_EXERB_VERSION1
|
14
|
+
PRODUCTVERSION EXERB_RES_EXERB_VERSION1
|
15
|
+
FILEFLAGSMASK 0x3fL
|
16
|
+
#if defined(_DEBUG)
|
17
|
+
FILEFLAGS 0x1L
|
18
|
+
#else
|
19
|
+
FILEFLAGS 0x0L
|
20
|
+
#endif
|
21
|
+
FILEOS 0x40004L
|
22
|
+
#if defined(RUNTIME)
|
23
|
+
FILETYPE 0x2L
|
24
|
+
#else
|
25
|
+
FILETYPE 0x1L
|
26
|
+
#endif
|
27
|
+
FILESUBTYPE 0x0L
|
28
|
+
BEGIN
|
29
|
+
BLOCK "StringFileInfo"
|
30
|
+
BEGIN
|
31
|
+
BLOCK "000004b0"
|
32
|
+
BEGIN
|
33
|
+
VALUE "Comments", "Generated by Exerb\0"
|
34
|
+
VALUE "CompanyName", "Exerb Project\0"
|
35
|
+
VALUE "LegalCopyright", "Copyright(C) Exerb Project, 2001-2006,2014 All rights reserved.\0"
|
36
|
+
VALUE "LegalTrademarks", "\0"
|
37
|
+
VALUE "FileVersion", EXERB_RES_EXERB_VERSION2 "\0"
|
38
|
+
VALUE "ProductVersion", EXERB_RES_EXERB_VERSION2 "\0"
|
39
|
+
VALUE "ProductName", "Exerb\0"
|
40
|
+
VALUE "FileDescription", "Exerb\0"
|
41
|
+
VALUE "InternalName", "exerb\0"
|
42
|
+
VALUE "OriginalFilename", "exerb.exe\0"
|
43
|
+
VALUE "PrivateBuild", "\0"
|
44
|
+
VALUE "SpecialBuild", "\0"
|
45
|
+
END
|
46
|
+
END
|
47
|
+
BLOCK "VarFileInfo"
|
48
|
+
BEGIN
|
49
|
+
VALUE "Translation", 0x0000, 0x04b0
|
50
|
+
END
|
51
|
+
END
|
52
|
+
|
53
|
+
#endif
|
54
|
+
|
55
|
+
////////////////////////////////////////////////////////////////////////////////
|
56
|
+
|
57
|
+
#if defined(GUI)
|
58
|
+
|
59
|
+
LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT
|
60
|
+
|
61
|
+
IDI_RUBY ICON DISCARDABLE "ruby.ico"
|
62
|
+
|
63
|
+
#endif
|
64
|
+
|
65
|
+
////////////////////////////////////////////////////////////////////////////////
|
66
|
+
|
67
|
+
#if defined(GUI)
|
68
|
+
|
69
|
+
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
|
70
|
+
|
71
|
+
IDD_EXCEPTION DIALOG DISCARDABLE 0, 0, 267, 215
|
72
|
+
STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
73
|
+
CAPTION "Exception - %s"
|
74
|
+
FONT 9, "MS UI Gothic"
|
75
|
+
BEGIN
|
76
|
+
DEFPUSHBUTTON "&Close",ID_CLOSE,212,5,50,14
|
77
|
+
ICON IDI_ERROR,IDC_STATIC,5,5,20,20
|
78
|
+
LTEXT "The exception was raised in the program.\nDetails are as follows.",IDC_STATIC,33,8,171,20
|
79
|
+
LTEXT "&Type",IDC_STATIC,5,42,95,8
|
80
|
+
EDITTEXT IDC_EDIT_TYPE,5,52,257,12,ES_AUTOHSCROLL | ES_READONLY
|
81
|
+
LTEXT "&Message",IDC_STATIC,5,70,95,8
|
82
|
+
EDITTEXT IDC_EDIT_MESSAGE,5,80,257,48,ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_HSCROLL
|
83
|
+
LTEXT "&BackTrace",IDC_STATIC,5,134,77,8
|
84
|
+
EDITTEXT IDC_EDIT_BACKTRACE,5,144,257,65,ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_HSCROLL
|
85
|
+
END
|
86
|
+
|
87
|
+
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
88
|
+
|
89
|
+
IDD_EXCEPTION DIALOG DISCARDABLE 0, 0, 267, 215
|
90
|
+
STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
91
|
+
CAPTION "��O - %s"
|
92
|
+
FONT 9, "�l�r �o�S�V�b�N"
|
93
|
+
BEGIN
|
94
|
+
DEFPUSHBUTTON "����(&C)",ID_CLOSE,212,5,50,14
|
95
|
+
ICON IDI_ERROR,IDC_STATIC,5,5,20,20
|
96
|
+
LTEXT "�v���O�����ŗ�O���������܂����B\n�ڍׂ͉��L�̒ʂ�ł��B",IDC_STATIC,33,8,171,20
|
97
|
+
LTEXT "�^�C�v(&T)",IDC_STATIC,5,42,95,8
|
98
|
+
EDITTEXT IDC_EDIT_TYPE,5,52,257,12,ES_AUTOHSCROLL | ES_READONLY
|
99
|
+
LTEXT "���b�Z�[�W(&M)",IDC_STATIC,5,70,95,8
|
100
|
+
EDITTEXT IDC_EDIT_MESSAGE,5,80,257,48,ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_HSCROLL
|
101
|
+
LTEXT "�o�b�N�g���[�X(&B)",IDC_STATIC,5,134,77,8
|
102
|
+
EDITTEXT IDC_EDIT_BACKTRACE,5,144,257,65,ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_HSCROLL
|
103
|
+
END
|
104
|
+
|
105
|
+
#endif
|
106
|
+
|
107
|
+
////////////////////////////////////////////////////////////////////////////////
|
108
|
+
|
109
|
+
#if defined(CUI) || defined(GUI)
|
110
|
+
|
111
|
+
LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT
|
112
|
+
|
113
|
+
#if defined(_DEBUG)
|
114
|
+
ID_EXERB RT_EXERB DISCARDABLE "debug.exa"
|
115
|
+
#else
|
116
|
+
ID_EXERB RT_EXERB DISCARDABLE "default.exa"
|
117
|
+
#endif
|
118
|
+
|
119
|
+
#endif
|
120
|
+
|
121
|
+
////////////////////////////////////////////////////////////////////////////////
|
data/src/exerb/ruby.ico
ADDED
Binary file
|
data/src/exerb/utility.c
ADDED
@@ -0,0 +1,263 @@
|
|
1
|
+
// $Id: utility.cpp,v 1.20 2006/05/09 01:10:49 yuya Exp $
|
2
|
+
|
3
|
+
#include <ruby.h>
|
4
|
+
#include <windows.h>
|
5
|
+
#include "exerb.h"
|
6
|
+
#include "utility.h"
|
7
|
+
|
8
|
+
////////////////////////////////////////////////////////////////////////////////
|
9
|
+
|
10
|
+
extern VALUE rb_eExerbRuntimeError;
|
11
|
+
|
12
|
+
extern NAME_TABLE_HEADER *g_name_table_header;
|
13
|
+
extern FILE_TABLE_HEADER *g_file_table_header;
|
14
|
+
|
15
|
+
////////////////////////////////////////////////////////////////////////////////
|
16
|
+
|
17
|
+
char*
|
18
|
+
exerb_strdup(const char* str)
|
19
|
+
{
|
20
|
+
if ( str == NULL ) return NULL;
|
21
|
+
|
22
|
+
char *newstr = malloc(strlen(str) + 1);
|
23
|
+
strcpy(newstr, str);
|
24
|
+
|
25
|
+
return newstr;
|
26
|
+
}
|
27
|
+
|
28
|
+
HANDLE
|
29
|
+
exerb_fopen_for_read(const char *filepath)
|
30
|
+
{
|
31
|
+
HANDLE file = CreateFile(filepath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
32
|
+
if ( file == INVALID_HANDLE_VALUE ) exerb_raise_runtime_error(GetLastError());
|
33
|
+
|
34
|
+
return file;
|
35
|
+
}
|
36
|
+
|
37
|
+
HANDLE
|
38
|
+
exerb_fopen_for_write(const char *filepath)
|
39
|
+
{
|
40
|
+
HANDLE file = CreateFile(filepath, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
41
|
+
if ( file == INVALID_HANDLE_VALUE ) exerb_raise_runtime_error(GetLastError());
|
42
|
+
|
43
|
+
return file;
|
44
|
+
}
|
45
|
+
|
46
|
+
BOOL
|
47
|
+
exerb_fclose(const HANDLE file)
|
48
|
+
{
|
49
|
+
BOOL ret = CloseHandle(file);
|
50
|
+
if ( !ret ) exerb_raise_runtime_error(GetLastError());
|
51
|
+
|
52
|
+
return ret;
|
53
|
+
}
|
54
|
+
|
55
|
+
DWORD
|
56
|
+
exerb_fseek(const HANDLE file, const LONG pos, const DWORD method)
|
57
|
+
{
|
58
|
+
DWORD ret = SetFilePointer(file, pos, NULL, method);
|
59
|
+
//if ( ret == INVALID_SET_FILE_POINTER ) exerb_raise_runtime_error(GetLastError())
|
60
|
+
|
61
|
+
return ret;
|
62
|
+
}
|
63
|
+
|
64
|
+
DWORD
|
65
|
+
exerb_fread(const HANDLE file, void *buffer, const int size)
|
66
|
+
{
|
67
|
+
DWORD read_size = 0;
|
68
|
+
BOOL ret = ReadFile(file, buffer, size, &read_size, NULL);
|
69
|
+
if ( !ret ) {
|
70
|
+
DWORD error = GetLastError();
|
71
|
+
CloseHandle(file);
|
72
|
+
exerb_raise_runtime_error(error);
|
73
|
+
}
|
74
|
+
|
75
|
+
return read_size;
|
76
|
+
}
|
77
|
+
|
78
|
+
DWORD
|
79
|
+
exerb_fwrite(const HANDLE file, const void *buffer, const int size)
|
80
|
+
{
|
81
|
+
DWORD written = 0;
|
82
|
+
BOOL ret = WriteFile(file, buffer, size, &written, NULL);
|
83
|
+
if ( !ret ) {
|
84
|
+
DWORD error = GetLastError();
|
85
|
+
CloseHandle(file);
|
86
|
+
exerb_raise_runtime_error(error);
|
87
|
+
}
|
88
|
+
|
89
|
+
return written;
|
90
|
+
}
|
91
|
+
|
92
|
+
DWORD
|
93
|
+
exerb_fsize(const HANDLE file)
|
94
|
+
{
|
95
|
+
DWORD size = GetFileSize(file, NULL);
|
96
|
+
if ( size == (DWORD)-1 ) {
|
97
|
+
DWORD error = GetLastError();
|
98
|
+
CloseHandle(file);
|
99
|
+
exerb_raise_runtime_error(error);
|
100
|
+
}
|
101
|
+
|
102
|
+
return size;
|
103
|
+
}
|
104
|
+
|
105
|
+
const char*
|
106
|
+
exerb_get_module_filepath(const HMODULE handle, char *filepath, int size)
|
107
|
+
{
|
108
|
+
const DWORD ret = GetModuleFileName(handle, filepath, size);
|
109
|
+
if ( !ret ) exerb_raise_runtime_error(GetLastError());
|
110
|
+
|
111
|
+
return exerb_get_filename(filepath);
|
112
|
+
}
|
113
|
+
|
114
|
+
const char*
|
115
|
+
exerb_get_self_filepath(char *filepath, const int size)
|
116
|
+
{
|
117
|
+
return exerb_get_module_filepath(NULL, filepath, size);
|
118
|
+
}
|
119
|
+
|
120
|
+
const char*
|
121
|
+
exerb_get_filename(const char *filepath)
|
122
|
+
{
|
123
|
+
char *filename = NULL;
|
124
|
+
if ( filename = strrchr(filepath, '\\') ) return filename + 1;
|
125
|
+
if ( filename = strrchr(filepath, '/') ) return filename + 1;
|
126
|
+
|
127
|
+
return filepath;
|
128
|
+
}
|
129
|
+
|
130
|
+
int
|
131
|
+
exerb_cmp_filename_with_ext(const char *name1, const char *name2, const char *ext)
|
132
|
+
{
|
133
|
+
const int name2len = strlen(name2);
|
134
|
+
return (strnicmp(name1, name2, name2len) == 0 && name1[name2len] == '.' && stricmp(name1 + name2len + 1, ext) == 0);
|
135
|
+
}
|
136
|
+
|
137
|
+
void
|
138
|
+
exerb_create_tmpfile(const char *prefix, char *filepath, const void *buffer, const int size)
|
139
|
+
{
|
140
|
+
char tmp_dirpath[MAX_PATH] = "";
|
141
|
+
GetTempPath(sizeof(tmp_dirpath), tmp_dirpath);
|
142
|
+
GetTempFileName(tmp_dirpath, prefix, 0, filepath);
|
143
|
+
|
144
|
+
HANDLE file = exerb_fopen_for_write(filepath);
|
145
|
+
exerb_fwrite(file, buffer, size);
|
146
|
+
exerb_fclose(file);
|
147
|
+
}
|
148
|
+
|
149
|
+
void
|
150
|
+
exerb_raise_runtime_error(const DWORD error_no)
|
151
|
+
{
|
152
|
+
char message0[1024] = "";
|
153
|
+
char message1[1024 + 128] = "";
|
154
|
+
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_no, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), message0, sizeof(message0), NULL);
|
155
|
+
_snprintf(message1, sizeof(message1), "Win32API Error #%i --- %s", error_no, message0);
|
156
|
+
rb_raise(rb_eExerbRuntimeError, message1);
|
157
|
+
}
|
158
|
+
|
159
|
+
NAME_ENTRY_HEADER*
|
160
|
+
exerb_get_first_name_entry()
|
161
|
+
{
|
162
|
+
return (NAME_ENTRY_HEADER*)((DWORD)g_name_table_header + g_name_table_header->offset_of_headers);
|
163
|
+
}
|
164
|
+
|
165
|
+
FILE_ENTRY_HEADER*
|
166
|
+
exerb_get_first_file_entry()
|
167
|
+
{
|
168
|
+
return (FILE_ENTRY_HEADER*)((DWORD)g_file_table_header + g_file_table_header->offset_of_headers);
|
169
|
+
}
|
170
|
+
|
171
|
+
char*
|
172
|
+
exerb_get_name_from_entry(const NAME_ENTRY_HEADER *name_entry)
|
173
|
+
{
|
174
|
+
return (char*)((DWORD)g_name_table_header + g_name_table_header->offset_of_pool + name_entry->offset_of_name);
|
175
|
+
}
|
176
|
+
|
177
|
+
char*
|
178
|
+
exerb_get_file_from_entry1(const FILE_ENTRY_HEADER *file_entry)
|
179
|
+
{
|
180
|
+
return (char*)((DWORD)g_file_table_header + g_file_table_header->offset_of_pool + file_entry->offset_of_file);
|
181
|
+
}
|
182
|
+
|
183
|
+
VALUE
|
184
|
+
exerb_get_file_from_entry2(const FILE_ENTRY_HEADER *file_entry)
|
185
|
+
{
|
186
|
+
const VALUE code = rb_str_new(exerb_get_file_from_entry1(file_entry), file_entry->size_of_file);
|
187
|
+
if (file_entry->zipd)
|
188
|
+
{
|
189
|
+
VALUE code2;
|
190
|
+
rb_require("zlib");
|
191
|
+
code2 = rb_funcall(rb_const_get(rb_cObject, rb_intern("Zlib")), rb_intern("inflate"), 1, code);
|
192
|
+
return code2;
|
193
|
+
} else {
|
194
|
+
return code;
|
195
|
+
}
|
196
|
+
}
|
197
|
+
|
198
|
+
NAME_ENTRY_HEADER*
|
199
|
+
exerb_find_name_entry(const WORD id)
|
200
|
+
{
|
201
|
+
NAME_ENTRY_HEADER *name_entry = exerb_get_first_name_entry();
|
202
|
+
|
203
|
+
for ( int i = 0; i < g_name_table_header->number_of_headers; i++, name_entry++ ) {
|
204
|
+
if ( name_entry->id == id ) {
|
205
|
+
return name_entry;
|
206
|
+
}
|
207
|
+
}
|
208
|
+
|
209
|
+
rb_raise(rb_eExerbRuntimeError, "Couldn't find a name entry --- %i", id);
|
210
|
+
|
211
|
+
return NULL;
|
212
|
+
}
|
213
|
+
|
214
|
+
NAME_ENTRY_HEADER*
|
215
|
+
exerb_find_name_entry_by_filename(const char *filename, const char *ext)
|
216
|
+
{
|
217
|
+
{
|
218
|
+
NAME_ENTRY_HEADER *name_entry = exerb_get_first_name_entry();
|
219
|
+
|
220
|
+
for ( int i = 0; i < g_name_table_header->number_of_headers; i++, name_entry++ ) {
|
221
|
+
if ( stricmp(exerb_get_name_from_entry(name_entry), filename) == 0 ) {
|
222
|
+
return name_entry;
|
223
|
+
}
|
224
|
+
}
|
225
|
+
}
|
226
|
+
|
227
|
+
if ( ext ) {
|
228
|
+
NAME_ENTRY_HEADER *name_entry = exerb_get_first_name_entry();
|
229
|
+
|
230
|
+
for ( int i = 0; i < g_name_table_header->number_of_headers; i++, name_entry++ ) {
|
231
|
+
if ( exerb_cmp_filename_with_ext(exerb_get_name_from_entry(name_entry), filename, ext) ) {
|
232
|
+
return name_entry;
|
233
|
+
}
|
234
|
+
}
|
235
|
+
}
|
236
|
+
|
237
|
+
return NULL;
|
238
|
+
}
|
239
|
+
|
240
|
+
FILE_ENTRY_HEADER*
|
241
|
+
exerb_find_file_entry(const WORD id)
|
242
|
+
{
|
243
|
+
FILE_ENTRY_HEADER *file_entry = exerb_get_first_file_entry();
|
244
|
+
|
245
|
+
for ( int i = 0; i < g_file_table_header->number_of_headers; i++, file_entry++ ) {
|
246
|
+
if ( file_entry->id == id ) {
|
247
|
+
return file_entry;
|
248
|
+
}
|
249
|
+
}
|
250
|
+
|
251
|
+
rb_raise(rb_eExerbRuntimeError, "Couldn't find a file entry --- %i", id);
|
252
|
+
|
253
|
+
return NULL;
|
254
|
+
}
|
255
|
+
|
256
|
+
FILE_ENTRY_HEADER*
|
257
|
+
exerb_find_file_entry_by_filename(const char *filename, const char *ext)
|
258
|
+
{
|
259
|
+
NAME_ENTRY_HEADER *name_entry = exerb_find_name_entry_by_filename(filename, ext);
|
260
|
+
return (name_entry ? exerb_find_file_entry(name_entry->id) : NULL);
|
261
|
+
}
|
262
|
+
|
263
|
+
////////////////////////////////////////////////////////////////////////////////
|
data/src/exerb/utility.h
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
// $Id: utility.h,v 1.13 2005/04/17 11:50:55 yuya Exp $
|
2
|
+
|
3
|
+
#ifndef UTILITY_H
|
4
|
+
#define UTILITY_H 1
|
5
|
+
|
6
|
+
#include <windows.h>
|
7
|
+
|
8
|
+
char* exerb_strdup(const char* str);
|
9
|
+
HANDLE exerb_fopen_for_read(const char *filepath);
|
10
|
+
HANDLE exerb_fopen_for_write(const char *filepath);
|
11
|
+
BOOL exerb_fclose(const HANDLE file);
|
12
|
+
DWORD exerb_fseek(const HANDLE file, const LONG pos, const DWORD method);
|
13
|
+
DWORD exerb_fread(const HANDLE file, void *buffer, const int size);
|
14
|
+
/* char* exerb_fread(const HANDLE file); */
|
15
|
+
DWORD exerb_fwrite(const HANDLE file, const void *buffer, const int size);
|
16
|
+
DWORD exerb_fsize(const HANDLE file);
|
17
|
+
const char* exerb_get_module_filepath(const HMODULE handle, char *filepath, const int size);
|
18
|
+
const char* exerb_get_self_filepath(char *filepath, const int size);
|
19
|
+
const char* exerb_get_filename(const char *filepath);
|
20
|
+
int exerb_cmp_filename_with_ext(const char *name1, const char *name2, const char *ext);
|
21
|
+
void exerb_create_tmpfile(const char *prefix, char *filepath, const void *buffer, const int size);
|
22
|
+
void exerb_raise_runtime_error(const DWORD error_no);
|
23
|
+
NAME_ENTRY_HEADER* exerb_get_first_name_entry();
|
24
|
+
FILE_ENTRY_HEADER* exerb_get_first_file_entry();
|
25
|
+
char* exerb_get_name_from_entry(const NAME_ENTRY_HEADER *name_entry);
|
26
|
+
char* exerb_get_file_from_entry1(const FILE_ENTRY_HEADER *file_entry);
|
27
|
+
VALUE exerb_get_file_from_entry2(const FILE_ENTRY_HEADER *file_entry);
|
28
|
+
NAME_ENTRY_HEADER* exerb_find_name_entry(const WORD id);
|
29
|
+
NAME_ENTRY_HEADER* exerb_find_name_entry_by_filename(const char *filename, const char *ext);
|
30
|
+
FILE_ENTRY_HEADER* exerb_find_file_entry(const WORD id);
|
31
|
+
FILE_ENTRY_HEADER* exerb_find_file_entry_by_filename(const char *filename, const char *ext);
|
32
|
+
|
33
|
+
#endif /* UTILITY_H */
|
data/test/alltests.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#! /usr/local/bin/ruby
|
2
|
+
|
3
|
+
#==============================================================================#
|
4
|
+
# $Id: alltests.rb,v 1.4 2003/11/29 08:39:56 yuya Exp $
|
5
|
+
#==============================================================================#
|
6
|
+
|
7
|
+
#==============================================================================#
|
8
|
+
|
9
|
+
Dir.glob('test-*.rb').each { |file|
|
10
|
+
pad = '#' * (38-file.size/2)
|
11
|
+
puts "\n\n\n#{pad} #{file} #{pad}"
|
12
|
+
system "#{Gem.ruby} -I. \"#{file}\" "
|
13
|
+
}
|
14
|
+
|
15
|
+
#==============================================================================#
|
16
|
+
#==============================================================================#
|
data/test/test-argv.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
#==============================================================================#
|
3
|
+
# $Id: test-argv.rb,v 1.5 2005/04/15 09:42:52 yuya Exp $
|
4
|
+
#==============================================================================#
|
5
|
+
|
6
|
+
require 'testcase'
|
7
|
+
|
8
|
+
#==============================================================================#
|
9
|
+
|
10
|
+
class ArgvTestCase < Minitest::Test
|
11
|
+
include ExerbTestCase
|
12
|
+
|
13
|
+
def name2
|
14
|
+
return 'test-argv'
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_argv
|
18
|
+
ret1 = read_result(@name)
|
19
|
+
ret2 = execute_exe(@name, 'a b c d e')
|
20
|
+
assert_equal(ret1, ret2)
|
21
|
+
end
|
22
|
+
|
23
|
+
end # ArgvTestCase
|
24
|
+
|
25
|
+
#==============================================================================#
|
26
|
+
#==============================================================================#
|