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