Artifact f3a830d4992fbcda67b50125da78c6f3dfaa2800
1 //--- K.I.LIB ---
2 // kl_carc.h : handling "common archivers' dll"
3
4 #ifndef AFX_KIARCDLLRAW_H__C94DE2A0_4292_49CE_8471_2CAA1340D216__INCLUDED_
5 #define AFX_KIARCDLLRAW_H__C94DE2A0_4292_49CE_8471_2CAA1340D216__INCLUDED_
6
7 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
8 // 統合アーカイバDLL共通の定義
9
10 // FNAME_MAX
11 #if !defined(FNAME_MAX32)
12 #define FNAME_MAX32 512
13 #define FNAME_MAX FNAME_MAX32
14 #else
15 #if !defined(FNAME_MAX)
16 #define FNAME_MAX 128
17 #endif
18 #endif
19
20 // CHECKARCHIVE
21 #if !defined(CHECKARCHIVE_RAPID)
22 #define CHECKARCHIVE_RAPID 0
23 #define CHECKARCHIVE_BASIC 1
24 #define CHECKARCHIVE_FULLCRC 2
25 #endif
26
27 // ISARC
28 #if !defined(ISARC_FUNCTION_START)
29 #define ISARC_FUNCTION_START 0
30 #define ISARC 0
31 #define ISARC_GET_VERSION 1
32 #define ISARC_GET_CURSOR_INTERVAL 2
33 #define ISARC_SET_CURSOR_INTERVAL 3
34 #define ISARC_GET_BACK_GROUND_MODE 4
35 #define ISARC_SET_BACK_GROUND_MODE 5
36 #define ISARC_GET_CURSOR_MODE 6
37 #define ISARC_SET_CURSOR_MODE 7
38 #define ISARC_GET_RUNNING 8
39
40 #define ISARC_CHECK_ARCHIVE 16
41 #define ISARC_CONFIG_DIALOG 17
42 #define ISARC_GET_FILE_COUNT 18
43 #define ISARC_QUERY_FUNCTION_LIST 19
44 #define ISARC_HOUT 20
45 #define ISARC_STRUCTOUT 21
46 #define ISARC_GET_ARC_FILE_INFO 22
47
48 #define ISARC_OPEN_ARCHIVE 23
49 #define ISARC_CLOSE_ARCHIVE 24
50 #define ISARC_FIND_FIRST 25
51 #define ISARC_FIND_NEXT 26
52 #define ISARC_EXTRACT 27
53 #define ISARC_ADD 28
54 #define ISARC_MOVE 29
55 #define ISARC_DELETE 30
56 #define ISARC_SETOWNERWINDOW 31
57 #define ISARC_CLEAROWNERWINDOW 32
58 #define ISARC_SETOWNERWINDOWEX 33
59 #define ISARC_KILLOWNERWINDOWEX 34
60
61 #define ISARC_GET_ARC_FILE_NAME 40
62 #define ISARC_GET_ARC_FILE_SIZE 41
63 #define ISARC_GET_ARC_ORIGINAL_SIZE 42
64 #define ISARC_GET_ARC_COMPRESSED_SIZE 43
65 #define ISARC_GET_ARC_RATIO 44
66 #define ISARC_GET_ARC_DATE 45
67 #define ISARC_GET_ARC_TIME 46
68 #define ISARC_GET_ARC_OS_TYPE 47
69 #define ISARC_GET_ARC_IS_SFX_FILE 48
70 #define ISARC_GET_ARC_WRITE_TIME_EX 49
71 #define ISARC_GET_ARC_CREATE_TIME_EX 50
72 #define ISARC_GET_ARC_ACCESS_TIME_EX 51
73 #define ISARC_GET_ARC_CREATE_TIME_EX2 52
74 #define ISARC_GET_ARC_WRITE_TIME_EX2 53
75 #define ISARC_GET_FILE_NAME 57
76 #define ISARC_GET_ORIGINAL_SIZE 58
77 #define ISARC_GET_COMPRESSED_SIZE 59
78 #define ISARC_GET_RATIO 60
79 #define ISARC_GET_DATE 61
80 #define ISARC_GET_TIME 62
81 #define ISARC_GET_CRC 63
82 #define ISARC_GET_ATTRIBUTE 64
83 #define ISARC_GET_OS_TYPE 65
84 #define ISARC_GET_METHOD 66
85 #define ISARC_GET_WRITE_TIME 67
86 #define ISARC_GET_CREATE_TIME 68
87 #define ISARC_GET_ACCESS_TIME 69
88 #define ISARC_GET_WRITE_TIME_EX 70
89 #define ISARC_GET_CREATE_TIME_EX 71
90 #define ISARC_GET_ACCESS_TIME_EX 72
91 #define ISARC_SET_ENUM_MEMBERS_PROC 80
92 #define ISARC_CLEAR_ENUM_MEMBERS_PROC 81
93
94 #define ISARC_FUNCTION_END 81
95 #endif
96
97 // ERROR
98 #if !defined(ERROR_START)
99 #define ERROR_START 0x8000
100 // warning
101 #define ERROR_DISK_SPACE 0x8005
102 #define ERROR_READ_ONLY 0x8006
103 #define ERROR_USER_SKIP 0x8007
104 #define ERROR_UNKNOWN_TYPE 0x8008
105 #define ERROR_METHOD 0x8009
106 #define ERROR_PASSWORD_FILE 0x800A
107 #define ERROR_VERSION 0x800B
108 #define ERROR_FILE_CRC 0x800C
109 #define ERROR_FILE_OPEN 0x800D
110 #define ERROR_MORE_FRESH 0x800E
111 #define ERROR_NOT_EXIST 0x800F
112 #define ERROR_ALREADY_EXIST 0x8010
113
114 #define ERROR_TOO_MANY_FILES 0x8011
115 // error
116 #define ERROR_MAKEDIRECTORY 0x8012
117 #define ERROR_CANNOT_WRITE 0x8013
118 #define ERROR_HUFFMAN_CODE 0x8014
119 #define ERROR_COMMENT_HEADER 0x8015
120 #define ERROR_HEADER_CRC 0x8016
121 #define ERROR_HEADER_BROKEN 0x8017
122 #define ERROR_ARC_FILE_OPEN 0x8018
123 #define ERROR_NOT_ARC_FILE 0x8019
124 #define ERROR_CANNOT_READ 0x801A
125 #define ERROR_FILE_STYLE 0x801B
126 #define ERROR_COMMAND_NAME 0x801C
127 #define ERROR_MORE_HEAP_MEMORY 0x801D
128 #define ERROR_ENOUGH_MEMORY 0x801E
129 #if !defined(ERROR_ALREADY_RUNNING)
130 #define ERROR_ALREADY_RUNNING 0x801F
131 #endif
132 #define ERROR_USER_CANCEL 0x8020
133 #define ERROR_HARC_ISNOT_OPENED 0x8021
134 #define ERROR_NOT_SEARCH_MODE 0x8022
135 #define ERROR_NOT_SUPPORT 0x8023
136 #define ERROR_TIME_STAMP 0x8024
137 #define ERROR_TMP_OPEN 0x8025
138 #define ERROR_LONG_FILE_NAME 0x8026
139 #define ERROR_ARC_READ_ONLY 0x8027
140 #define ERROR_SAME_NAME_FILE 0x8028
141 #define ERROR_NOT_FIND_ARC_FILE 0x8029
142 #define ERROR_RESPONSE_READ 0x802A
143 #define ERROR_NOT_FILENAME 0x802B
144 #define ERROR_TMP_COPY 0x802C
145 #define ERROR_EOF 0x802D
146 #define ERROR_ADD_TO_LARC 0x802E
147 #define ERROR_TMP_BACK_SPACE 0x802F
148 #define ERROR_SHARING 0x8030
149 #define ERROR_NOT_FIND_FILE 0x8031
150 #define ERROR_LOG_FILE 0x8032
151 #define ERROR_NO_DEVICE 0x8033
152 #define ERROR_GET_ATTRIBUTES 0x8034
153 #define ERROR_SET_ATTRIBUTES 0x8035
154 #define ERROR_GET_INFORMATION 0x8036
155 #define ERROR_GET_POINT 0x8037
156 #define ERROR_SET_POINT 0x8038
157 #define ERROR_CONVERT_TIME 0x8039
158 #define ERROR_GET_TIME 0x803a
159 #define ERROR_SET_TIME 0x803b
160 #define ERROR_CLOSE_FILE 0x803c
161 #define ERROR_HEAP_MEMORY 0x803d
162 #define ERROR_HANDLE 0x803e
163 #define ERROR_TIME_STAMP_RANGE 0x803f
164 #define ERROR_MAKE_ARCHIVE 0x8040
165
166 #define ERROR_END ERROR_MAKE_ARCHIVE
167 #define ERROR_BUF_TOO_SMALL 0x8041 /**/
168 #endif
169
170 // CONFIG
171 #if !defined(UNPACK_CONFIG_MODE)
172 #define UNPACK_CONFIG_MODE 1
173 #define PACK_CONFIG_MODE 2
174 #endif
175
176 // OPENARCHIVE
177 #if !defined(EXTRACT_FOUND_FILE)
178 #define M_INIT_FILE_USE 0x00000001L
179 #define M_REGARDLESS_INIT_FILE 0x00000002L
180 #define M_NO_BACKGROUND_MODE 0x00000004L
181 #define M_NOT_USE_TIME_STAMP 0x00000008L
182 #define M_EXTRACT_REPLACE_FILE 0x00000010L
183 #define M_EXTRACT_NEW_FILE 0x00000020L
184 #define M_EXTRACT_UPDATE_FILE 0x00000040L
185 #define M_CHECK_ALL_PATH 0x00000100L
186 #define M_CHECK_FILENAME_ONLY 0x00000200L
187 #define M_CHECK_DISK_SIZE 0x00000400L
188 #define M_REGARDLESS_DISK_SIZE 0x00000800L
189 #define M_USE_DRIVE_LETTER 0x00001000L
190 #define M_NOT_USE_DRIVE_LETTER 0x00002000L
191 #define M_INQUIRE_DIRECTORY 0x00004000L
192 #define M_NOT_INQUIRE_DIRECTORY 0x00008000L
193 #define M_INQUIRE_WRITE 0x00010000L
194 #define M_NOT_INQUIRE_WRITE 0x00020000L
195 #define M_CHECK_READONLY 0x00040000L
196 #define M_REGARDLESS_READONLY 0x00080000L
197 #define M_REGARD_E_COMMAND 0x00100000L
198 #define M_REGARD_X_COMMAND 0x00200000L
199 #define M_ERROR_MESSAGE_ON 0x00400000L
200 #define M_ERROR_MESSAGE_OFF 0x00800000L
201 #define M_BAR_WINDOW_ON 0x01000000L
202 #define M_BAR_WINDOW_OFF 0x02000000L
203 #define M_CHECK_PATH 0x04000000L
204 #define M_RECOVERY_ON 0x08000000L
205
206 #define M_MAKE_INDEX_FILE 0x10000000L
207 #define M_NOT_MAKE_INDEX_FILE 0x20000000L
208 #define EXTRACT_FOUND_FILE 0x40000000L
209 #define EXTRACT_NAMED_FILE 0x80000000L
210 #endif
211
212 // ATTRIBUTE
213 #ifndef FA_RDONLY
214 #define FA_RDONLY 0x01
215 #define FA_HIDDEN 0x02
216 #define FA_SYSTEM 0x04
217 #define FA_LABEL 0x08
218 #define FA_DIREC 0x10
219 #define FA_ARCH 0x20
220 #endif
221 #ifndef FA_ENCRYPTED
222 #define FA_ENCRYPTED 0x40
223 #endif
224
225 // STRUCTURES
226 #if defined(__BORLANDC__)
227 #pragma option -a-
228 #else
229 #pragma pack(1)
230 #endif
231
232 typedef HGLOBAL HARCHIVE;
233
234 #ifndef ARC_DECSTRACT
235 #define ARC_DECSTRACT
236 typedef HGLOBAL HARC;
237
238 typedef struct {
239 DWORD dwOriginalSize;
240 DWORD dwCompressedSize;
241 DWORD dwCRC;
242 UINT uFlag;
243 UINT uOSType;
244 WORD wRatio;
245 WORD wDate;
246 WORD wTime;
247 char szFileName[FNAME_MAX32 + 1];
248 char dummy1[3];
249 char szAttribute[8];
250 char szMode[8];
251 } INDIVIDUALINFO, FAR *LPINDIVIDUALINFO;
252
253 typedef struct {
254 DWORD dwFileSize;
255 DWORD dwWriteSize;
256 char szSourceFileName[FNAME_MAX32 + 1];
257 char dummy1[3];
258 char szDestFileName[FNAME_MAX32 + 1];
259 char dummy[3];
260 } EXTRACTINGINFO, FAR *LPEXTRACTINGINFO;
261
262 typedef struct {
263 EXTRACTINGINFO exinfo;
264 DWORD dwCompressedSize;
265 DWORD dwCRC;
266 UINT uOSType;
267 WORD wRatio;
268 WORD wDate;
269 WORD wTime;
270 char szAttribute[8];
271 char szMode[8];
272 } EXTRACTINGINFOEX, *LPEXTRACTINGINFOEX;
273 #endif
274
275 #if !defined(__BORLANDC__)
276 #pragma pack()
277 #else
278 #pragma option -a.
279 #endif
280
281 #if !defined(__BORLANDC__)
282 #define _export
283 #endif
284
285 // WindowsMessage
286 #ifndef WM_ARCEXTRACT
287 #define WM_ARCEXTRACT "wm_arcextract"
288 #define ARCEXTRACT_BEGIN 0
289 #define ARCEXTRACT_INPROCESS 1
290 #define ARCEXTRACT_END 2
291 #define ARCEXTRACT_OPEN 3
292 #define ARCEXTRACT_COPY 4
293 typedef BOOL CALLBACK ARCHIVERPROC(HWND,UINT,UINT,LPEXTRACTINGINFOEX);
294 typedef ARCHIVERPROC *LPARCHIVERPROC;
295 #endif
296
297 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
298 // 統合アーカイバDLLを非常に薄く覆うレイヤ
299
300 class kiArcDLLRaw
301 {
302 public: //-- 外向きインターフェイス --------------------------
303
304 // DLL名で初期化。
305 kiArcDLLRaw( const char* dllname );
306 kiPath& name()
307 { return m_DllPath; }
308
309 // DLLが生きているかどうか。
310 bool isAlive();
311
312 // API のラッパ [ DLLやAPIが無いときの返値 ]
313
314 // バージョンx100 [ 0 ]
315 WORD getVer();
316 // バージョンサブx100 [ 0 ]
317 WORD getVerSub();
318 // コマンド送り [ ERROR_NOT_SUPPORT ]
319 int command( const HWND wnd, LPCSTR cmd, LPSTR buf, const DWORD siz );
320 // 書庫チェック [ FALSE ]
321 BOOL check( LPCSTR filename, const int mode );
322 // 書庫の種類 [ 0 ]
323 int getArcType( LPCSTR filename );
324
325 // 開く [ NULL ]
326 HARC openArc( const HWND wnd, LPCSTR arcname, const DWORD flag );
327 // 閉じる
328 void closeArc( HARC arc );
329 // 一つ目を検索 [ ERROR_NOT_SUPPORT ]
330 int findfirst( HARC arc, LPCSTR wildname, INDIVIDUALINFO* inf );
331 // 二つ目以降を検索 [ ERROR_NOT_SUPPORT ]
332 int findnext( HARC arc, INDIVIDUALINFO* inf );
333 // 属性取得 [ 0 ]
334 int getAttr( HARC arc );
335
336 // オーナー指定 [ FALSE ]
337 BOOL setOwner( HWND wnd );
338 // オーナー解除 [ FALSE ]
339 BOOL clearOwner();
340
341 // ※load系は呼ばなくても内部で何とかするのでできれば使わないこと。
342 bool load();
343 void unload();
344
345 private: //-- 内部処理 -----------------------------------
346
347 HINSTANCE m_hDLL;
348 bool not_loaded_yet;
349
350 kiPath m_DllPath;
351 kiStr m_DllNameBody;
352 FARPROC getProc( const char* procname );
353
354 FARPROC m_Proc[ ISARC_FUNCTION_END ];
355 FARPROC f_VSb;
356 #define f_Cmd m_Proc[ ISARC ]
357 #define f_Chk m_Proc[ ISARC_GET_VERSION ]
358 #define f_Gat m_Proc[ 13 ]
359 #define f_Ver m_Proc[ ISARC_CHECK_ARCHIVE ]
360 #define f_Opn m_Proc[ ISARC_OPEN_ARCHIVE ]
361 #define f_Cls m_Proc[ ISARC_CLOSE_ARCHIVE ]
362 #define f_Ffs m_Proc[ ISARC_FIND_FIRST ]
363 #define f_Fnx m_Proc[ ISARC_FIND_NEXT ]
364 #define f_GAr m_Proc[ ISARC_GET_ATTRIBUTE ]
365 #define f_SOw m_Proc[ ISARC_SETOWNERWINDOW ]
366 #define f_COw m_Proc[ ISARC_CLEAROWNERWINDOW ]
367
368 public:
369 virtual ~kiArcDLLRaw();
370 };
371
372 #endif