Current News Archived News Search News Discussion Forum Old Forum Install Programs More Downloads... Troubleshooting Source Code Format Specs. Misc. Information Non-SF Stuff Links Small banner for links to this site: |
1 /* License information for this code is in license.txt */
3 // Code for loading SFmpqapi at run-time
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
10 #include "SFmpqapi_no-lib.h"
12 struct SFMPQAPI_DELAY_LOADER {
13 #ifndef SFMPQAPI_DELAY_LOAD
14 SFMPQAPI_DELAY_LOADER();
15 #endif
16 ~SFMPQAPI_DELAY_LOADER();
17 } SFMpqApi_Delay_Loader;
19 HINSTANCE hSFMpq = 0;
21 void LoadSFMpqDll();
23 void LoadSFMpqDll()
24 {
25 if (!hSFMpq) hSFMpq = LoadLibrary("SFmpq.dll");
26 }
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 }
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 }
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 }
58 void WINAPI SFMpqDestroy_stub()
59 {
60 LoadSFMpqDll();
61 if (hSFMpq) {
62 *(FARPROC *)&SFMpqDestroy = GetProcAddress(hSFMpq,"SFMpqDestroy");
63 if (SFMpqDestroy) SFMpqDestroy();
64 }
65 }
67 void WINAPI AboutSFMpq_stub()
68 {
69 LoadSFMpqDll();
70 if (hSFMpq) {
71 *(FARPROC *)&AboutSFMpq = GetProcAddress(hSFMpq,"AboutSFMpq");
72 if (AboutSFMpq) AboutSFMpq();
73 }
74 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
457 void WINAPI StormDestroy_stub()
458 {
459 LoadSFMpqDll();
460 if (hSFMpq) {
461 *(FARPROC *)&StormDestroy = GetProcAddress(hSFMpq,"StormDestroy");
462 if (StormDestroy) StormDestroy();
463 }
464 }
466 BOOL (WINAPI* MpqInitialize)() = MpqInitialize_stub;
468 LPCSTR (WINAPI* MpqGetVersionString)() = MpqGetVersionString_stub;
469 float (WINAPI* MpqGetVersion)() = MpqGetVersion_stub;
471 void (WINAPI* SFMpqDestroy)() = SFMpqDestroy_stub;
473 void (WINAPI* AboutSFMpq)() = AboutSFMpq_stub;
475 LPCSTR (WINAPI* SFMpqGetVersionString)() = SFMpqGetVersionString_stub;
476 DWORD (WINAPI* SFMpqGetVersionString2)(LPCSTR lpBuffer, DWORD dwBufferLength) = SFMpqGetVersionString2_stub;
477 SFMPQVERSION (WINAPI* SFMpqGetVersion)() = SFMpqGetVersion_stub;
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;
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;
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;
508 MPQHANDLE (WINAPI* MpqOpenArchiveForUpdateEx)(LPCSTR lpFileName, DWORD dwFlags, DWORD dwMaximumFilesInArchive, DWORD dwBlockSize) = MpqOpenArchiveForUpdateEx_stub;
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;
517 BOOL (WINAPI* SFileDestroy)() = SFileDestroy_stub;
518 void (WINAPI* StormDestroy)() = StormDestroy_stub;
520 #ifndef SFMPQAPI_DELAY_LOAD
521 SFMPQAPI_DELAY_LOADER::SFMPQAPI_DELAY_LOADER()
522 {
523 LoadSFMpqDll();
524 }
525 #endif
527 SFMPQAPI_DELAY_LOADER::~SFMPQAPI_DELAY_LOADER()
528 {
529 MpqInitialize = 0;
531 MpqGetVersionString = 0;
532 MpqGetVersion = 0;
534 AboutSFMpq = 0;
536 SFMpqGetVersionString = 0;
537 SFMpqGetVersionString2 = 0;
538 SFMpqGetVersion = 0;
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;
556 SFileGetFileInfo = 0;
557 SFileSetArchivePriority = 0;
558 SFileFindMpqHeader = 0;
559 SFileListFiles = 0;
561 MpqOpenArchiveForUpdate = 0;
562 MpqCloseUpdatedArchive = 0;
563 MpqAddFileToArchive = 0;
564 MpqAddWaveToArchive = 0;
565 MpqRenameFile = 0;
566 MpqDeleteFile = 0;
567 MpqCompactArchive = 0;
569 MpqOpenArchiveForUpdateEx = 0;
570 MpqAddFileToArchiveEx = 0;
571 MpqAddFileFromBufferEx = 0;
572 MpqAddFileFromBuffer = 0;
573 MpqAddWaveFromBuffer = 0;
574 MpqRenameAndSetFileLocale = 0;
575 MpqDeleteFileWithLocale = 0;
576 MpqSetFileLocale = 0;
578 SFileDestroy = 0;
579 StormDestroy = 0;
581 if (hSFMpq==0) return;
582 if (SFMpqDestroy!=0) SFMpqDestroy();
584 SFMpqDestroy = 0;
586 FreeLibrary(hSFMpq);
587 hSFMpq = 0;
588 }
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 }
|