-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrunspx.txt
278 lines (205 loc) · 11.1 KB
/
runspx.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
------------------------------------------------------------------------------
runspi / runsph / runspha Version 1.2 Copyright (c)2024 TORO
------------------------------------------------------------------------------
Susie Plug-in を使って画像の取得、書庫展開をしたり、Susie Plug-inの
動作検証を行ったりするためのコンソールアプリケーションです。
Susie Plug-in は、竹村嘉人 (たけちん)氏作の画像ローダ「Susie」
用の Plug-in で、様々な形式の画像ファイルを読み込めるようにする
ためのものです。
( http://www.digitalpad.co.jp/~takechin/ )
●動作環境
・対応/動作確認 OS
Windows 2003/XP 以降で動作します。
・レジストリ
レジストリは使用しません。
●実行方法
対象となる Susie Plug-in の種類によって対応するファイルを
実行してください。以下、runspx.exe は以下の名前に置き換えてください。
runspi.exe 拡張子 spi (x86)用
runsph.exe 拡張子 sph (x64)用
runspha.exe 拡張子 spha (ARM64)用
(1) Susie Plug-in の情報
runspx.exe (Plug-inのパス)
用意されている API の一覧を表示します。
(2) 画像の情報表示
runspx.exe (Plug-inのパス) (読み込む画像のパス)
指定された画像を Plug-in の GetPicture で読み込み、その画像の情報を
表示します。
(3) 画像の取得
runspx.exe (Plug-inのパス) (読み込む画像のパス) -b (展開先の画像のパス)
指定された画像を Plug-in の GetPicture で読み込み、BMP ファイルとして
保存します。
(4) 書庫の一覧表示
指定された画像を Plug-in の GetArchiveInfo で読み込み、書庫内の
ファイル一覧を表示します。
runspx.exe (Plug-inのパス) (読み込む書庫のパス)
(5) 書庫の全ファイル展開
指定された画像を Plug-in の GetArchiveInfo で読み込み、書庫内の
全ファイルを展開先に保存します。
runspx.exe (Plug-inのパス) (読み込む書庫のパス) [-j] -e (展開先)
-j はディレクトリ指定を無視します
(6) 書庫の指定ファイル展開
指定された画像を Plug-in の GetArchiveInfo で読み込み、書庫内の
指定ファイルを展開先に保存します。
runspx.exe (Plug-inのパス) (読み込む書庫のパス) -e (展開先) (展開ファイル名)
(7) 画像のエンコード
指定された画像を指定した拡張子の形式にエンコードしてファイルに
保存します。
runspx.exe (Plug-inのパス) (読み込む画像のパス) -bc (展開先の画像のパス) [-bp (エンコードに使用する Plug-inのパス)]
(8) Susie Plug-in のテスト
runspx.exe (Plug-inのパス) (読み込む画像・書庫のパス) -t [-p]
runspx.exe (Plug-inのパス) (読み込む画像・書庫のパス) -tz [-p]
全APIを一通り使用するテストを行います。
挙動についてコメントがある場合は「●コメント内容」を出力します。
「End test.」が表示されずに終了したときは、異常終了です。
異常終了したとき、スタックトレース表示が可能であれば表示します。
表示できない場合は、主にスタックの破損か、スタックオーバフローと
思われます。
尚、デバッガを使用する場合は -p を指定することで
スタックトレース表示を行わず、デバッガに処理を渡せます。
-tz を指定したときは、0 バイトファイルを渡すテストを追加します。
(8)オプション一覧
-c Plug-in の設定ダイアログを表示します。
-v Plug-in の About ダイアログを表示します。
-b 保存先パス GetPicture / GetPreview で得たビットマップをBMP
ファイルとして保存します。
-bc 保存先パス GetPicture / GetPreview で得たビットマップを
CreatePicture で保存します。
-bp Pluginパス CreatePicture を使う Susie Plug-in を指定します。
-r GetPreview を GetPicture の代わりに使用します。
-t Plug-in のテストを行います。
-tz Plug-in のテストを行います。ファイズサイズが 0 の
テストも行います。
-p 異常終了したとき、スタックトレースを行いません。
-e GetFile による展開を行います。
-j GetFile による展開時、サブディレクトリを無視します。
-srcdisk 入力ソースをファイルにします。
-srcmem 入力ソースをメモリにします。
-ansi UNICODE 版API を使用しないでANSI 版API のみ使用します。
●64bit版 Susie Plug-in の仕様について
64bit版の正式な仕様がないため、次のような独自仕様にしています。
また、拡張子は .sph としています。詳細は次の場所で公開しています。
http://toro.d.dooo.jp/dlsphapi.html
https://toroidj.github.io/dlsphapi.html
//-------------------------------------- DLL 定数
#define SUSIEERROR_NOERROR 0
#define SUSIEERROR_NOTSUPPORT -1
#define SUSIEERROR_USERCANCEL 1
#define SUSIEERROR_UNKNOWNFORMAT 2
#define SUSIEERROR_BROKENDATA 3
#define SUSIEERROR_EMPTYMEMORY 4
#define SUSIEERROR_FAULTMEMORY 5
#define SUSIEERROR_FAULTREAD 6
#define SUSIEERROR_RESERVED 7
#define SUSIEERROR_INTERNAL 8
typedef ULONG_PTR susie_time_t;
//-------------------------------------- DLL 構造体
#pragma pack(push, 1)
typedef struct PictureInfo{
long left, top; // 画像を展開する位置
long width; // 画像の幅(pixel)
long height; // 画像の高さ(pixel)
WORD x_density; // 画素の水平方向密度
WORD y_density; // 画素の垂直方向密度
short colorDepth; // 1画素当たりのbit数
#ifdef _WIN64
char dummy[2]; // アラインメント
#endif
HLOCAL hInfo; // 画像内のテキスト情報
} SUSIE_PICTUREINFO;
typedef struct {
unsigned char method[8]; // 圧縮法の種類
ULONG_PTR position; // ファイル上での位置
ULONG_PTR compsize; // 圧縮されたサイズ
ULONG_PTR filesize; // 元のファイルサイズ
susie_time_t timestamp; // ファイルの更新日時
char path[200]; // 相対パス
char filename[200]; // ファイル名
unsigned long crc; // CRC
#ifdef _WIN64
// 64bit版の構造体サイズは444bytesですが、実際のサイズは
// アラインメントにより448bytesになります。環境によりdummyが必要です。
char dummy[4];
#endif
} SUSIE_FINFO;
typedef struct {
unsigned char method[8]; // 圧縮法の種類
ULONG_PTR position; // ファイル上での位置
ULONG_PTR compsize; // 圧縮されたサイズ
ULONG_PTR filesize; // 元のファイルサイズ
susie_time_t timestamp; // ファイルの更新日時
WCHAR path[200]; // 相対パス
WCHAR filename[200]; // ファイルネーム
unsigned long crc; // CRC
}SUSIE_FINFOW;
#pragma pack(pop)
// コールバック
typedef int (__stdcall *SUSIE_PROGRESS)(int nNum, int nDenom, LONG_PTR lData);
//-------------------------------------- DLL 関数(UNICODE版(~W)もあります)
int __stdcall GetPluginInfo(int infono, LPSTR buf, int buflen);
int __stdcall GetPluginInfoW(int infono, LPWSTR buf, int buflen);
int __stdcall IsSupported(LPCSTR filename, void *dw);
int __stdcall IsSupportedW(LPCWSTR filename, void *dw);
int __stdcall ConfigurationDlg(HWND hWnd, int function);
int __stdcall GetPictureInfo(LPCSTR buf, LONG_PTR len, unsigned int flag, struct PictureInfo *lpInfo);
int __stdcall GetPictureInfoW(LPCWSTR buf, LONG_PTR len, unsigned int flag, struct PictureInfo *lpInfo);
int __stdcall GetPicture(LPCSTR buf, LONG_PTR len, unsigned int flag, HANDLE *pHBInfo, HANDLE *pHBm, SUSIE_PROGRESS lpPrgressCallback, LONG_PTR lData);
int __stdcall GetPictureW(LPCWSTR buf, LONG_PTR len, unsigned int flag, HANDLE *pHBInfo, HANDLE *pHBm, SUSIE_PROGRESS lpPrgressCallback, LONG_PTR lData);
int __stdcall GetPreview(LPCSTR buf, LONG_PTR len, unsigned int flag, HANDLE *pHBInfo, HANDLE *pHBm, SUSIE_PROGRESS lpPrgressCallback, LONG_PTR lData);
int __stdcall GetPreviewW(LPCWSTR buf, LONG_PTR len, unsigned int flag, HANDLE *pHBInfo, HANDLE *pHBm, SUSIE_PROGRESS lpPrgressCallback, LONG_PTR lData);
int __stdcall GetArchiveInfo(LPCSTR buf, LONG_PTR len, unsigned int flag, HLOCAL *lphInf);
int __stdcall GetFile(LPCSTR src, LONG_PTR len, LPSTR dest, unsigned int flag, SUSIE_PROGRESS prgressCallback, LONG_PTR lData);
int __stdcall GetFileInfo(LPCSTR buf, LONG_PTR len, LPCSTR filename, unsigned int flag, SUSIE_FINFO *lpInfo);
int __stdcall CreatePicture(LPCSTR filepath, unsigned int flag, HANDLE *pHBInfo, HANDLE *pHBm, struct PictureInfo *lpInfo, SUSIE_PROGRESS progressCallback, LONG_PTR lData); // filepath の拡張子で保存形式を決定
// DLL 動的読み込み用
typedef int (__stdcall *GETPLUGININFO)(int infono, LPSTR buf, int buflen);
typedef int (__stdcall *GETPLUGININFOW)(int infono, LPWSTR buf, int buflen);
typedef int (__stdcall *ISSUPPORTED)(LPCSTR filename, void *dw);
typedef int (__stdcall *ISSUPPORTEDW)(LPCWSTR filename, void *dw);
typedef int (__stdcall *CONFIGURATIONDLG)(HWND hWnd, int function);
typedef int (__stdcall *GETPICTUREINFO)(LPCSTR buf, LONG_PTR len, unsigned int flag, struct PictureInfo *lpInfo);
typedef int (__stdcall *GETPICTUREINFOW)(LPCWSTR buf, LONG_PTR len, unsigned int flag, struct PictureInfo *lpInfo);
typedef int (__stdcall *GETPICTURE)(LPCSTR buf, LONG_PTR len, unsigned int flag, HANDLE *pHBInfo, HANDLE *pHBm, SUSIE_PROGRESS lpPrgressCallback, LONG_PTR lData);
typedef int (__stdcall *GETPICTUREW)(LPCWSTR buf, LONG_PTR len, unsigned int flag, HANDLE *pHBInfo, HANDLE *pHBm, SUSIE_PROGRESS lpPrgressCallback, LONG_PTR lData);
typedef int (__stdcall *GETPREVIEW)(LPCSTR buf, LONG_PTR len, unsigned int flag, HANDLE *pHBInfo, HANDLE *pHBm, SUSIE_PROGRESS lpPrgressCallback, LONG_PTR lData);
typedef int (__stdcall *GETPREVIEWW)(LPCWSTR buf, LONG_PTR len, unsigned int flag, HANDLE *pHBInfo, HANDLE *pHBm, SUSIE_PROGRESS lpPrgressCallback, LONG_PTR lData);
typedef int (__stdcall *GETARCHIVEINFO)(LPCSTR buf, LONG_PTR len, unsigned int flag, HLOCAL *lphInf);
typedef int (__stdcall *GETARCHIVEINFOW)(LPCWSTR buf, LONG_PTR len, unsigned int flag, HLOCAL *lphInf);
typedef int (__stdcall *GETFILE)(LPCSTR src, LONG_PTR len, LPSTR dest, unsigned int flag, SUSIE_PROGRESS prgressCallback, LONG_PTR lData);
typedef int (__stdcall *GETFILEW)(LPCWSTR src, LONG_PTR len, LPWSTR dest, unsigned int flag, FARPROC prgressCallback, LONG_PTR lData);
typedef int (__stdcall *GETFILEINFO)(LPCSTR buf, LONG_PTR len, LPCSTR filename, unsigned int flag, SUSIE_FINFO *lpInfo);
typedef int (__stdcall *GETFILEINFOW)(LPCWSTR buf, LONG_PTR len, LPCWSTR filename, unsigned int flag, SUSIE_FINFOW *lpInfo);
●最後に
・このソフトウェアはフリーソフトウェアです。著作権は「TORO」、
「高橋 良和」にあります。
・runspi, runsph は、Visual Studio 2008、
runspha は、Visual Studio 2019 を用いて構築しています。
●License
runspi / runsph / runspha は、MITライセンスに基づいて公開しています。
runspi / runsph / runspha is released under the MIT License.
Copyright (c) 2024 TORO
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the Software
is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
●履歴
Version 1.2 2024/03/30
・GetFileのテストで、ソースがメモリの時の動作がおかしいのを修正
Version 1.1 2024/03/17
・書庫の指定ファイル展開の説明の誤記修正と、展開が終わらないことがあるのを修正
Version 1.0 2024/03/16
・初版
●著作権者/連絡先/一次配布先 TORO/高橋 良和
E-mail toroid.jp@gmail.com
WWW http://toro.d.dooo.jp/