Commit | Line | Data |
7df24e1f |
1 | /* License information for this code is in license.txt */ |
2 | |
3 | // Code for loading SFmpqapi at run-time |
4 | |
5 | // Comment out the next line to load SFmpqapi at the |
6 | // start of your program, rather that when it is first |
7 | // used. |
8 | #define SFMPQAPI_DELAY_LOAD |
9 | |
10 | #include "SFmpqapi_no-lib.h" |
11 | |
12 | struct SFMPQAPI_DELAY_LOADER { |
13 | #ifndef SFMPQAPI_DELAY_LOAD |
14 | SFMPQAPI_DELAY_LOADER(); |
15 | #endif |
16 | ~SFMPQAPI_DELAY_LOADER(); |
17 | } SFMpqApi_Delay_Loader; |
18 | |
19 | HINSTANCE hSFMpq = 0; |
20 | |
21 | void LoadSFMpqDll(); |
22 | |
23 | void LoadSFMpqDll() |
24 | { |
25 | if (!hSFMpq) hSFMpq = LoadLibrary("SFmpq.dll"); |
26 | } |
27 | |
28 | BOOL WINAPI MpqInitialize_stub() |
29 | { |
30 | LoadSFMpqDll(); |
31 | if (hSFMpq) { |
32 | *(FARPROC *)&MpqInitialize = GetProcAddress(hSFMpq,"MpqInitialize"); |
33 | if (MpqInitialize) return MpqInitialize(); |
34 | } |
35 | return FALSE; |
36 | } |
37 | |
38 | LPCSTR WINAPI MpqGetVersionString_stub() |
39 | { |
40 | LoadSFMpqDll(); |
41 | if (hSFMpq) { |
42 | *(FARPROC *)&MpqGetVersionString = GetProcAddress(hSFMpq,"MpqGetVersionString"); |
43 | if (MpqGetVersionString) return MpqGetVersionString(); |
44 | } |
45 | return 0; |
46 | } |
47 | |
48 | float WINAPI MpqGetVersion_stub() |
49 | { |
50 | LoadSFMpqDll(); |
51 | if (hSFMpq) { |
52 | *(FARPROC *)&MpqGetVersion = GetProcAddress(hSFMpq,"MpqGetVersion"); |
53 | if (MpqGetVersion) return MpqGetVersion(); |
54 | } |
55 | return 0; |
56 | } |
57 | |
58 | void WINAPI SFMpqDestroy_stub() |
59 | { |
60 | LoadSFMpqDll(); |
61 | if (hSFMpq) { |
62 | *(FARPROC *)&SFMpqDestroy = GetProcAddress(hSFMpq,"SFMpqDestroy"); |
63 | if (SFMpqDestroy) SFMpqDestroy(); |
64 | } |
65 | } |
66 | |
67 | void WINAPI AboutSFMpq_stub() |
68 | { |
69 | LoadSFMpqDll(); |
70 | if (hSFMpq) { |
71 | *(FARPROC *)&AboutSFMpq = GetProcAddress(hSFMpq,"AboutSFMpq"); |
72 | if (AboutSFMpq) AboutSFMpq(); |
73 | } |
74 | } |
75 | |
76 | LPCSTR WINAPI SFMpqGetVersionString_stub() |
77 | { |
78 | LoadSFMpqDll(); |
79 | if (hSFMpq) { |
80 | *(FARPROC *)&SFMpqGetVersionString = GetProcAddress(hSFMpq,"SFMpqGetVersionString"); |
81 | if (SFMpqGetVersionString) return SFMpqGetVersionString(); |
82 | } |
83 | return 0; |
84 | } |
85 | |
86 | DWORD WINAPI SFMpqGetVersionString2_stub(LPCSTR lpBuffer, DWORD dwBufferLength) |
87 | { |
88 | LoadSFMpqDll(); |
89 | if (hSFMpq) { |
90 | *(FARPROC *)&SFMpqGetVersionString2 = GetProcAddress(hSFMpq,"SFMpqGetVersionString2"); |
91 | if (SFMpqGetVersionString2) return SFMpqGetVersionString2(lpBuffer,dwBufferLength); |
92 | } |
93 | return 0; |
94 | } |
95 | |
96 | SFMPQVERSION WINAPI SFMpqGetVersion_stub() |
97 | { |
98 | LoadSFMpqDll(); |
99 | if (hSFMpq) { |
100 | *(FARPROC *)&SFMpqGetVersion = GetProcAddress(hSFMpq,"SFMpqGetVersion"); |
101 | if (SFMpqGetVersion) return SFMpqGetVersion(); |
102 | } |
103 | SFMPQVERSION NoVersionData = {0,0,0,0}; |
104 | return NoVersionData; |
105 | } |
106 | |
107 | BOOL WINAPI SFileOpenArchive_stub(LPCSTR lpFileName, DWORD dwPriority, DWORD dwFlags, MPQHANDLE *hMPQ) |
108 | { |
109 | LoadSFMpqDll(); |
110 | if (hSFMpq) { |
111 | *(FARPROC *)&SFileOpenArchive = GetProcAddress(hSFMpq,"SFileOpenArchive"); |
112 | if (SFileOpenArchive) return SFileOpenArchive(lpFileName,dwPriority,dwFlags,hMPQ); |
113 | } |
114 | return FALSE; |
115 | } |
116 | |
117 | BOOL WINAPI SFileCloseArchive_stub(MPQHANDLE hMPQ) |
118 | { |
119 | LoadSFMpqDll(); |
120 | if (hSFMpq) { |
121 | *(FARPROC *)&SFileCloseArchive = GetProcAddress(hSFMpq,"SFileCloseArchive"); |
122 | if (SFileCloseArchive) return SFileCloseArchive(hMPQ); |
123 | } |
124 | return FALSE; |
125 | } |
126 | |
127 | BOOL WINAPI SFileOpenFileAsArchive_stub(MPQHANDLE hSourceMPQ, LPCSTR lpFileName, DWORD dwPriority, DWORD dwFlags, MPQHANDLE *hMPQ) |
128 | { |
129 | LoadSFMpqDll(); |
130 | if (hSFMpq) { |
131 | *(FARPROC *)&SFileOpenFileAsArchive = GetProcAddress(hSFMpq,"SFileOpenFileAsArchive"); |
132 | if (SFileOpenFileAsArchive) return SFileOpenFileAsArchive(hSourceMPQ,lpFileName,dwPriority,dwFlags,hMPQ); |
133 | } |
134 | return FALSE; |
135 | } |
136 | |
137 | BOOL WINAPI SFileGetArchiveName_stub(MPQHANDLE hMPQ, LPCSTR lpBuffer, DWORD dwBufferLength) |
138 | { |
139 | LoadSFMpqDll(); |
140 | if (hSFMpq) { |
141 | *(FARPROC *)&SFileGetArchiveName = GetProcAddress(hSFMpq,"SFileGetArchiveName"); |
142 | if (SFileGetArchiveName) return SFileGetArchiveName(hMPQ,lpBuffer,dwBufferLength); |
143 | } |
144 | return FALSE; |
145 | } |
146 | |
147 | BOOL WINAPI SFileOpenFile_stub(LPCSTR lpFileName, MPQHANDLE *hFile) |
148 | { |
149 | LoadSFMpqDll(); |
150 | if (hSFMpq) { |
151 | *(FARPROC *)&SFileOpenFile = GetProcAddress(hSFMpq,"SFileOpenFile"); |
152 | if (SFileOpenFile) return SFileOpenFile(lpFileName,hFile); |
153 | } |
154 | return FALSE; |
155 | } |
156 | |
157 | BOOL WINAPI SFileOpenFileEx_stub(MPQHANDLE hMPQ, LPCSTR lpFileName, DWORD dwSearchScope, MPQHANDLE *hFile) |
158 | { |
159 | LoadSFMpqDll(); |
160 | if (hSFMpq) { |
161 | *(FARPROC *)&SFileOpenFileEx = GetProcAddress(hSFMpq,"SFileOpenFileEx"); |
162 | if (SFileOpenFileEx) return SFileOpenFileEx(hMPQ,lpFileName,dwSearchScope,hFile); |
163 | } |
164 | return FALSE; |
165 | } |
166 | |
167 | BOOL WINAPI SFileCloseFile_stub(MPQHANDLE hFile) |
168 | { |
169 | LoadSFMpqDll(); |
170 | if (hSFMpq) { |
171 | *(FARPROC *)&SFileCloseFile = GetProcAddress(hSFMpq,"SFileCloseFile"); |
172 | if (SFileCloseFile) return SFileCloseFile(hFile); |
173 | } |
174 | return FALSE; |
175 | } |
176 | |
177 | DWORD WINAPI SFileGetFileSize_stub(MPQHANDLE hFile, LPDWORD lpFileSizeHigh) |
178 | { |
179 | LoadSFMpqDll(); |
180 | if (hSFMpq) { |
181 | *(FARPROC *)&SFileGetFileSize = GetProcAddress(hSFMpq,"SFileGetFileSize"); |
182 | if (SFileGetFileSize) return SFileGetFileSize(hFile,lpFileSizeHigh); |
183 | } |
184 | return (DWORD)-1; |
185 | } |
186 | |
187 | BOOL WINAPI SFileGetFileArchive_stub(MPQHANDLE hFile, MPQHANDLE *hMPQ) |
188 | { |
189 | LoadSFMpqDll(); |
190 | if (hSFMpq) { |
191 | *(FARPROC *)&SFileGetFileArchive = GetProcAddress(hSFMpq,"SFileGetFileArchive"); |
192 | if (SFileGetFileArchive) return SFileGetFileArchive(hFile,hMPQ); |
193 | } |
194 | return FALSE; |
195 | } |
196 | |
197 | BOOL WINAPI SFileGetFileName_stub(MPQHANDLE hFile, LPCSTR lpBuffer, DWORD dwBufferLength) |
198 | { |
199 | LoadSFMpqDll(); |
200 | if (hSFMpq) { |
201 | *(FARPROC *)&SFileGetFileName = GetProcAddress(hSFMpq,"SFileGetFileName"); |
202 | if (SFileGetFileName) return SFileGetFileName(hFile,lpBuffer,dwBufferLength); |
203 | } |
204 | return FALSE; |
205 | } |
206 | |
207 | DWORD WINAPI SFileSetFilePointer_stub(MPQHANDLE hFile, long lDistanceToMove, PLONG lplDistanceToMoveHigh, DWORD dwMoveMethod) |
208 | { |
209 | LoadSFMpqDll(); |
210 | if (hSFMpq) { |
211 | *(FARPROC *)&SFileSetFilePointer = GetProcAddress(hSFMpq,"SFileSetFilePointer"); |
212 | if (SFileSetFilePointer) return SFileSetFilePointer(hFile,lDistanceToMove,lplDistanceToMoveHigh,dwMoveMethod); |
213 | } |
214 | return (DWORD)-1; |
215 | } |
216 | |
217 | BOOL WINAPI SFileReadFile_stub(MPQHANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead,LPOVERLAPPED lpOverlapped) |
218 | { |
219 | LoadSFMpqDll(); |
220 | if (hSFMpq) { |
221 | *(FARPROC *)&SFileReadFile = GetProcAddress(hSFMpq,"SFileReadFile"); |
222 | if (SFileReadFile) return SFileReadFile(hFile,lpBuffer,nNumberOfBytesToRead,lpNumberOfBytesRead,lpOverlapped); |
223 | } |
224 | return FALSE; |
225 | } |
226 | |
227 | LCID WINAPI SFileSetLocale_stub(LCID nNewLocale) |
228 | { |
229 | LoadSFMpqDll(); |
230 | if (hSFMpq) { |
231 | *(FARPROC *)&SFileSetLocale = GetProcAddress(hSFMpq,"SFileSetLocale"); |
232 | if (SFileSetLocale) return SFileSetLocale(nNewLocale); |
233 | } |
234 | return 0; |
235 | } |
236 | |
237 | BOOL WINAPI SFileGetBasePath_stub(LPCSTR lpBuffer, DWORD dwBufferLength) |
238 | { |
239 | LoadSFMpqDll(); |
240 | if (hSFMpq) { |
241 | *(FARPROC *)&SFileGetBasePath = GetProcAddress(hSFMpq,"SFileGetBasePath"); |
242 | if (SFileGetBasePath) return SFileGetBasePath(lpBuffer,dwBufferLength); |
243 | } |
244 | return FALSE; |
245 | } |
246 | |
247 | BOOL WINAPI SFileSetBasePath_stub(LPCSTR lpNewBasePath) |
248 | { |
249 | LoadSFMpqDll(); |
250 | if (hSFMpq) { |
251 | *(FARPROC *)&SFileSetBasePath = GetProcAddress(hSFMpq,"SFileSetBasePath"); |
252 | if (SFileSetBasePath) return SFileSetBasePath(lpNewBasePath); |
253 | } |
254 | return FALSE; |
255 | } |
256 | |
257 | DWORD WINAPI SFileGetFileInfo_stub(MPQHANDLE hFile, DWORD dwInfoType) |
258 | { |
259 | LoadSFMpqDll(); |
260 | if (hSFMpq) { |
261 | *(FARPROC *)&SFileGetFileInfo = GetProcAddress(hSFMpq,"SFileGetFileInfo"); |
262 | if (SFileGetFileInfo) return SFileGetFileInfo(hFile,dwInfoType); |
263 | } |
264 | return (DWORD)-1; |
265 | } |
266 | |
267 | BOOL WINAPI SFileSetArchivePriority_stub(MPQHANDLE hMPQ, DWORD dwPriority) |
268 | { |
269 | LoadSFMpqDll(); |
270 | if (hSFMpq) { |
271 | *(FARPROC *)&SFileSetArchivePriority = GetProcAddress(hSFMpq,"SFileSetArchivePriority"); |
272 | if (SFileSetArchivePriority) return SFileSetArchivePriority(hMPQ,dwPriority); |
273 | } |
274 | return FALSE; |
275 | } |
276 | |
277 | DWORD WINAPI SFileFindMpqHeader_stub(HANDLE hFile) |
278 | { |
279 | LoadSFMpqDll(); |
280 | if (hSFMpq) { |
281 | *(FARPROC *)&SFileFindMpqHeader = GetProcAddress(hSFMpq,"SFileFindMpqHeader"); |
282 | if (SFileFindMpqHeader) return SFileFindMpqHeader(hFile); |
283 | } |
284 | return (DWORD)-1; |
285 | } |
286 | |
287 | BOOL WINAPI SFileListFiles_stub(MPQHANDLE hMPQ, LPCSTR lpFileLists, FILELISTENTRY *lpListBuffer, DWORD dwFlags) |
288 | { |
289 | LoadSFMpqDll(); |
290 | if (hSFMpq) { |
291 | *(FARPROC *)&SFileListFiles = GetProcAddress(hSFMpq,"SFileListFiles"); |
292 | if (SFileListFiles) return SFileListFiles(hMPQ,lpFileLists,lpListBuffer,dwFlags); |
293 | } |
294 | return FALSE; |
295 | } |
296 | |
297 | MPQHANDLE WINAPI MpqOpenArchiveForUpdate_stub(LPCSTR lpFileName, DWORD dwFlags, DWORD dwMaximumFilesInArchive) |
298 | { |
299 | LoadSFMpqDll(); |
300 | if (hSFMpq) { |
301 | *(FARPROC *)&MpqOpenArchiveForUpdate = GetProcAddress(hSFMpq,"MpqOpenArchiveForUpdate"); |
302 | if (MpqOpenArchiveForUpdate) return MpqOpenArchiveForUpdate(lpFileName,dwFlags,dwMaximumFilesInArchive); |
303 | } |
304 | return INVALID_HANDLE_VALUE; |
305 | } |
306 | |
307 | DWORD WINAPI MpqCloseUpdatedArchive_stub(MPQHANDLE hMPQ, DWORD dwUnknown2) |
308 | { |
309 | LoadSFMpqDll(); |
310 | if (hSFMpq) { |
311 | *(FARPROC *)&MpqCloseUpdatedArchive = GetProcAddress(hSFMpq,"MpqCloseUpdatedArchive"); |
312 | if (MpqCloseUpdatedArchive) return MpqCloseUpdatedArchive(hMPQ,dwUnknown2); |
313 | } |
314 | return 0; |
315 | } |
316 | |
317 | BOOL WINAPI MpqAddFileToArchive_stub(MPQHANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags) |
318 | { |
319 | LoadSFMpqDll(); |
320 | if (hSFMpq) { |
321 | *(FARPROC *)&MpqAddFileToArchive = GetProcAddress(hSFMpq,"MpqAddFileToArchive"); |
322 | if (MpqAddFileToArchive) return MpqAddFileToArchive(hMPQ,lpSourceFileName,lpDestFileName,dwFlags); |
323 | } |
324 | return FALSE; |
325 | } |
326 | |
327 | BOOL WINAPI MpqAddWaveToArchive_stub(MPQHANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags, DWORD dwQuality) |
328 | { |
329 | LoadSFMpqDll(); |
330 | if (hSFMpq) { |
331 | *(FARPROC *)&MpqAddWaveToArchive = GetProcAddress(hSFMpq,"MpqAddWaveToArchive"); |
332 | if (MpqAddWaveToArchive) return MpqAddWaveToArchive(hMPQ,lpSourceFileName,lpDestFileName,dwFlags,dwQuality); |
333 | } |
334 | return FALSE; |
335 | } |
336 | |
337 | BOOL WINAPI MpqRenameFile_stub(MPQHANDLE hMPQ, LPCSTR lpcOldFileName, LPCSTR lpcNewFileName) |
338 | { |
339 | LoadSFMpqDll(); |
340 | if (hSFMpq) { |
341 | *(FARPROC *)&MpqRenameFile = GetProcAddress(hSFMpq,"MpqRenameFile"); |
342 | if (MpqRenameFile) return MpqRenameFile(hMPQ,lpcOldFileName,lpcNewFileName); |
343 | } |
344 | return FALSE; |
345 | } |
346 | |
347 | BOOL WINAPI MpqDeleteFile_stub(MPQHANDLE hMPQ, LPCSTR lpFileName) |
348 | { |
349 | LoadSFMpqDll(); |
350 | if (hSFMpq) { |
351 | *(FARPROC *)&MpqDeleteFile = GetProcAddress(hSFMpq,"MpqDeleteFile"); |
352 | if (MpqDeleteFile) return MpqDeleteFile(hMPQ,lpFileName); |
353 | } |
354 | return FALSE; |
355 | } |
356 | |
357 | BOOL WINAPI MpqCompactArchive_stub(MPQHANDLE hMPQ) |
358 | { |
359 | LoadSFMpqDll(); |
360 | if (hSFMpq) { |
361 | *(FARPROC *)&MpqCompactArchive = GetProcAddress(hSFMpq,"MpqCompactArchive"); |
362 | if (MpqCompactArchive) return MpqCompactArchive(hMPQ); |
363 | } |
364 | return FALSE; |
365 | } |
366 | |
a9771b7c |
367 | MPQHANDLE WINAPI MpqOpenArchiveForUpdateEx_stub(LPCSTR lpFileName, DWORD dwFlags, DWORD dwMaximumFilesInArchive, DWORD dwBlockSize) |
368 | { |
369 | LoadSFMpqDll(); |
370 | if (hSFMpq) { |
371 | *(FARPROC *)&MpqOpenArchiveForUpdateEx = GetProcAddress(hSFMpq,"MpqOpenArchiveForUpdateEx"); |
372 | if (MpqOpenArchiveForUpdateEx) return MpqOpenArchiveForUpdateEx(lpFileName,dwFlags,dwMaximumFilesInArchive,dwBlockSize); |
373 | } |
374 | return INVALID_HANDLE_VALUE; |
375 | } |
376 | |
7df24e1f |
377 | BOOL WINAPI MpqAddFileToArchiveEx_stub(MPQHANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags, DWORD dwCompressionType, DWORD dwCompressLevel) |
378 | { |
379 | LoadSFMpqDll(); |
380 | if (hSFMpq) { |
381 | *(FARPROC *)&MpqAddFileToArchiveEx = GetProcAddress(hSFMpq,"MpqAddFileToArchiveEx"); |
382 | if (MpqAddFileToArchiveEx) return MpqAddFileToArchiveEx(hMPQ,lpSourceFileName,lpDestFileName,dwFlags,dwCompressionType,dwCompressLevel); |
383 | } |
384 | return FALSE; |
385 | } |
386 | |
387 | BOOL WINAPI MpqAddFileFromBufferEx_stub(MPQHANDLE hMPQ, LPVOID lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags, DWORD dwCompressionType, DWORD dwCompressLevel) |
388 | { |
389 | LoadSFMpqDll(); |
390 | if (hSFMpq) { |
391 | *(FARPROC *)&MpqAddFileFromBufferEx = GetProcAddress(hSFMpq,"MpqAddFileFromBufferEx"); |
392 | if (MpqAddFileFromBufferEx) return MpqAddFileFromBufferEx(hMPQ,lpBuffer,dwLength,lpFileName,dwFlags,dwCompressionType,dwCompressLevel); |
393 | } |
394 | return FALSE; |
395 | } |
396 | |
397 | BOOL WINAPI MpqAddFileFromBuffer_stub(MPQHANDLE hMPQ, LPVOID lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags) |
398 | { |
399 | LoadSFMpqDll(); |
400 | if (hSFMpq) { |
401 | *(FARPROC *)&MpqAddFileFromBuffer = GetProcAddress(hSFMpq,"MpqAddFileFromBuffer"); |
402 | if (MpqAddFileFromBuffer) return MpqAddFileFromBuffer(hMPQ,lpBuffer,dwLength,lpFileName,dwFlags); |
403 | } |
404 | return FALSE; |
405 | } |
406 | |
407 | BOOL WINAPI MpqAddWaveFromBuffer_stub(MPQHANDLE hMPQ, LPVOID lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags, DWORD dwQuality) |
408 | { |
409 | LoadSFMpqDll(); |
410 | if (hSFMpq) { |
411 | *(FARPROC *)&MpqAddWaveFromBuffer = GetProcAddress(hSFMpq,"MpqAddWaveFromBuffer"); |
412 | if (MpqAddWaveFromBuffer) return MpqAddWaveFromBuffer(hMPQ,lpBuffer,dwLength,lpFileName,dwFlags,dwQuality); |
413 | } |
414 | return FALSE; |
415 | } |
416 | |
417 | BOOL WINAPI MpqRenameAndSetFileLocale_stub(MPQHANDLE hMPQ, LPCSTR lpcOldFileName, LPCSTR lpcNewFileName, LCID nOldLocale, LCID nNewLocale) |
418 | { |
419 | LoadSFMpqDll(); |
420 | if (hSFMpq) { |
421 | *(FARPROC *)&MpqRenameAndSetFileLocale = GetProcAddress(hSFMpq,"MpqRenameAndSetFileLocale"); |
422 | if (MpqRenameAndSetFileLocale) return MpqRenameAndSetFileLocale(hMPQ,lpcOldFileName,lpcNewFileName,nOldLocale,nNewLocale); |
423 | } |
424 | return FALSE; |
425 | } |
426 | |
427 | BOOL WINAPI MpqDeleteFileWithLocale_stub(MPQHANDLE hMPQ, LPCSTR lpFileName, LCID nLocale) |
428 | { |
429 | LoadSFMpqDll(); |
430 | if (hSFMpq) { |
431 | *(FARPROC *)&MpqDeleteFileWithLocale = GetProcAddress(hSFMpq,"MpqDeleteFileWithLocale"); |
432 | if (MpqDeleteFileWithLocale) return MpqDeleteFileWithLocale(hMPQ,lpFileName,nLocale); |
433 | } |
434 | return FALSE; |
435 | } |
436 | |
437 | BOOL WINAPI MpqSetFileLocale_stub(MPQHANDLE hMPQ, LPCSTR lpFileName, LCID nOldLocale, LCID nNewLocale) |
438 | { |
439 | LoadSFMpqDll(); |
440 | if (hSFMpq) { |
441 | *(FARPROC *)&MpqSetFileLocale = GetProcAddress(hSFMpq,"MpqSetFileLocale"); |
442 | if (MpqSetFileLocale) return MpqSetFileLocale(hMPQ,lpFileName,nOldLocale,nNewLocale); |
443 | } |
444 | return FALSE; |
445 | } |
446 | |
447 | BOOL WINAPI SFileDestroy_stub() |
448 | { |
449 | LoadSFMpqDll(); |
450 | if (hSFMpq) { |
451 | *(FARPROC *)&SFileDestroy = GetProcAddress(hSFMpq,"SFileDestroy"); |
452 | if (SFileDestroy) return SFileDestroy(); |
453 | } |
454 | return FALSE; |
455 | } |
456 | |
457 | void WINAPI StormDestroy_stub() |
458 | { |
459 | LoadSFMpqDll(); |
460 | if (hSFMpq) { |
461 | *(FARPROC *)&StormDestroy = GetProcAddress(hSFMpq,"StormDestroy"); |
462 | if (StormDestroy) StormDestroy(); |
463 | } |
464 | } |
465 | |
466 | BOOL (WINAPI* MpqInitialize)() = MpqInitialize_stub; |
467 | |
468 | LPCSTR (WINAPI* MpqGetVersionString)() = MpqGetVersionString_stub; |
469 | float (WINAPI* MpqGetVersion)() = MpqGetVersion_stub; |
470 | |
471 | void (WINAPI* SFMpqDestroy)() = SFMpqDestroy_stub; |
472 | |
473 | void (WINAPI* AboutSFMpq)() = AboutSFMpq_stub; |
474 | |
475 | LPCSTR (WINAPI* SFMpqGetVersionString)() = SFMpqGetVersionString_stub; |
476 | DWORD (WINAPI* SFMpqGetVersionString2)(LPCSTR lpBuffer, DWORD dwBufferLength) = SFMpqGetVersionString2_stub; |
477 | SFMPQVERSION (WINAPI* SFMpqGetVersion)() = SFMpqGetVersion_stub; |
478 | |
479 | BOOL (WINAPI* SFileOpenArchive)(LPCSTR lpFileName, DWORD dwPriority, DWORD dwFlags, MPQHANDLE *hMPQ) = SFileOpenArchive_stub; |
480 | BOOL (WINAPI* SFileCloseArchive)(MPQHANDLE hMPQ) = SFileCloseArchive_stub; |
481 | BOOL (WINAPI* SFileOpenFileAsArchive)(MPQHANDLE hSourceMPQ, LPCSTR lpFileName, DWORD dwPriority, DWORD dwFlags, MPQHANDLE *hMPQ) = SFileOpenFileAsArchive_stub; |
482 | BOOL (WINAPI* SFileGetArchiveName)(MPQHANDLE hMPQ, LPCSTR lpBuffer, DWORD dwBufferLength) = SFileGetArchiveName_stub; |
483 | BOOL (WINAPI* SFileOpenFile)(LPCSTR lpFileName, MPQHANDLE *hFile) = SFileOpenFile_stub; |
484 | BOOL (WINAPI* SFileOpenFileEx)(MPQHANDLE hMPQ, LPCSTR lpFileName, DWORD dwSearchScope, MPQHANDLE *hFile) = SFileOpenFileEx_stub; |
485 | BOOL (WINAPI* SFileCloseFile)(MPQHANDLE hFile) = SFileCloseFile_stub; |
486 | DWORD (WINAPI* SFileGetFileSize)(MPQHANDLE hFile, LPDWORD lpFileSizeHigh) = SFileGetFileSize_stub; |
487 | BOOL (WINAPI* SFileGetFileArchive)(MPQHANDLE hFile, MPQHANDLE *hMPQ) = SFileGetFileArchive_stub; |
488 | BOOL (WINAPI* SFileGetFileName)(MPQHANDLE hFile, LPCSTR lpBuffer, DWORD dwBufferLength) = SFileGetFileName_stub; |
489 | DWORD (WINAPI* SFileSetFilePointer)(MPQHANDLE hFile, long lDistanceToMove, PLONG lplDistanceToMoveHigh, DWORD dwMoveMethod) = SFileSetFilePointer_stub; |
490 | BOOL (WINAPI* SFileReadFile)(MPQHANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead,LPOVERLAPPED lpOverlapped) = SFileReadFile_stub; |
491 | LCID (WINAPI* SFileSetLocale)(LCID nNewLocale) = SFileSetLocale_stub; |
492 | BOOL (WINAPI* SFileGetBasePath)(LPCSTR lpBuffer, DWORD dwBufferLength) = SFileGetBasePath_stub; |
493 | BOOL (WINAPI* SFileSetBasePath)(LPCSTR lpNewBasePath) = SFileSetBasePath_stub; |
494 | |
495 | DWORD (WINAPI* SFileGetFileInfo)(MPQHANDLE hFile, DWORD dwInfoType) = SFileGetFileInfo_stub; |
496 | BOOL (WINAPI* SFileSetArchivePriority)(MPQHANDLE hMPQ, DWORD dwPriority) = SFileSetArchivePriority_stub; |
497 | DWORD (WINAPI* SFileFindMpqHeader)(HANDLE hFile) = SFileFindMpqHeader_stub; |
498 | BOOL (WINAPI* SFileListFiles)(MPQHANDLE hMPQ, LPCSTR lpFileLists, FILELISTENTRY *lpListBuffer, DWORD dwFlags) = SFileListFiles_stub; |
499 | |
500 | MPQHANDLE (WINAPI* MpqOpenArchiveForUpdate)(LPCSTR lpFileName, DWORD dwFlags, DWORD dwMaximumFilesInArchive) = MpqOpenArchiveForUpdate_stub; |
501 | DWORD (WINAPI* MpqCloseUpdatedArchive)(MPQHANDLE hMPQ, DWORD dwUnknown2) = MpqCloseUpdatedArchive_stub; |
502 | BOOL (WINAPI* MpqAddFileToArchive)(MPQHANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags) = MpqAddFileToArchive_stub; |
503 | BOOL (WINAPI* MpqAddWaveToArchive)(MPQHANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags, DWORD dwQuality) = MpqAddWaveToArchive_stub; |
504 | BOOL (WINAPI* MpqRenameFile)(MPQHANDLE hMPQ, LPCSTR lpcOldFileName, LPCSTR lpcNewFileName) = MpqRenameFile_stub; |
505 | BOOL (WINAPI* MpqDeleteFile)(MPQHANDLE hMPQ, LPCSTR lpFileName) = MpqDeleteFile_stub; |
506 | BOOL (WINAPI* MpqCompactArchive)(MPQHANDLE hMPQ) = MpqCompactArchive_stub; |
507 | |
a9771b7c |
508 | MPQHANDLE (WINAPI* MpqOpenArchiveForUpdateEx)(LPCSTR lpFileName, DWORD dwFlags, DWORD dwMaximumFilesInArchive, DWORD dwBlockSize) = MpqOpenArchiveForUpdateEx_stub; |
7df24e1f |
509 | BOOL (WINAPI* MpqAddFileToArchiveEx)(MPQHANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags, DWORD dwCompressionType, DWORD dwCompressLevel) = MpqAddFileToArchiveEx_stub; |
510 | BOOL (WINAPI* MpqAddFileFromBufferEx)(MPQHANDLE hMPQ, LPVOID lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags, DWORD dwCompressionType, DWORD dwCompressLevel) = MpqAddFileFromBufferEx_stub; |
511 | BOOL (WINAPI* MpqAddFileFromBuffer)(MPQHANDLE hMPQ, LPVOID lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags) = MpqAddFileFromBuffer_stub; |
512 | BOOL (WINAPI* MpqAddWaveFromBuffer)(MPQHANDLE hMPQ, LPVOID lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags, DWORD dwQuality) = MpqAddWaveFromBuffer_stub; |
513 | BOOL (WINAPI* MpqRenameAndSetFileLocale)(MPQHANDLE hMPQ, LPCSTR lpcOldFileName, LPCSTR lpcNewFileName, LCID nOldLocale, LCID nNewLocale) = MpqRenameAndSetFileLocale_stub; |
514 | BOOL (WINAPI* MpqDeleteFileWithLocale)(MPQHANDLE hMPQ, LPCSTR lpFileName, LCID nLocale) = MpqDeleteFileWithLocale_stub; |
515 | BOOL (WINAPI* MpqSetFileLocale)(MPQHANDLE hMPQ, LPCSTR lpFileName, LCID nOldLocale, LCID nNewLocale) = MpqSetFileLocale_stub; |
516 | |
517 | BOOL (WINAPI* SFileDestroy)() = SFileDestroy_stub; |
518 | void (WINAPI* StormDestroy)() = StormDestroy_stub; |
519 | |
520 | #ifndef SFMPQAPI_DELAY_LOAD |
521 | SFMPQAPI_DELAY_LOADER::SFMPQAPI_DELAY_LOADER() |
522 | { |
523 | LoadSFMpqDll(); |
524 | } |
525 | #endif |
526 | |
527 | SFMPQAPI_DELAY_LOADER::~SFMPQAPI_DELAY_LOADER() |
528 | { |
529 | MpqInitialize = 0; |
530 | |
531 | MpqGetVersionString = 0; |
532 | MpqGetVersion = 0; |
533 | |
534 | AboutSFMpq = 0; |
535 | |
536 | SFMpqGetVersionString = 0; |
537 | SFMpqGetVersionString2 = 0; |
538 | SFMpqGetVersion = 0; |
539 | |
540 | SFileOpenArchive = 0; |
541 | SFileCloseArchive = 0; |
542 | SFileOpenFileAsArchive = 0; |
543 | SFileGetArchiveName = 0; |
544 | SFileOpenFile = 0; |
545 | SFileOpenFileEx = 0; |
546 | SFileCloseFile = 0; |
547 | SFileGetFileSize = 0; |
548 | SFileGetFileArchive = 0; |
549 | SFileGetFileName = 0; |
550 | SFileSetFilePointer = 0; |
551 | SFileReadFile = 0; |
552 | SFileSetLocale = 0; |
553 | SFileGetBasePath = 0; |
554 | SFileSetBasePath = 0; |
555 | |
556 | SFileGetFileInfo = 0; |
557 | SFileSetArchivePriority = 0; |
558 | SFileFindMpqHeader = 0; |
559 | SFileListFiles = 0; |
560 | |
561 | MpqOpenArchiveForUpdate = 0; |
562 | MpqCloseUpdatedArchive = 0; |
563 | MpqAddFileToArchive = 0; |
564 | MpqAddWaveToArchive = 0; |
565 | MpqRenameFile = 0; |
566 | MpqDeleteFile = 0; |
567 | MpqCompactArchive = 0; |
568 | |
a9771b7c |
569 | MpqOpenArchiveForUpdateEx = 0; |
7df24e1f |
570 | MpqAddFileToArchiveEx = 0; |
571 | MpqAddFileFromBufferEx = 0; |
572 | MpqAddFileFromBuffer = 0; |
573 | MpqAddWaveFromBuffer = 0; |
574 | MpqRenameAndSetFileLocale = 0; |
575 | MpqDeleteFileWithLocale = 0; |
576 | MpqSetFileLocale = 0; |
577 | |
578 | SFileDestroy = 0; |
579 | StormDestroy = 0; |
580 | |
581 | if (hSFMpq==0) return; |
582 | if (SFMpqDestroy!=0) SFMpqDestroy(); |
583 | |
584 | SFMpqDestroy = 0; |
585 | |
586 | FreeLibrary(hSFMpq); |
587 | hSFMpq = 0; |
588 | } |
589 | |
590 | long SFMpqCompareVersion() |
591 | { |
592 | SFMPQVERSION ExeVersion = {1,0,8,1}; |
593 | SFMPQVERSION DllVersion = SFMpqGetVersion(); |
594 | if (DllVersion.Major>ExeVersion.Major) return 1; |
595 | else if (DllVersion.Major<ExeVersion.Major) return -1; |
596 | if (DllVersion.Minor>ExeVersion.Minor) return 1; |
597 | else if (DllVersion.Minor<ExeVersion.Minor) return -1; |
598 | if (DllVersion.Revision>ExeVersion.Revision) return 1; |
599 | else if (DllVersion.Revision<ExeVersion.Revision) return -1; |
600 | if (DllVersion.Subrevision>ExeVersion.Subrevision) return 1; |
601 | else if (DllVersion.Subrevision<ExeVersion.Subrevision) return -1; |
602 | return 0; |
603 | } |
604 | |