X-Git-Url: https://sfsrealm.hopto.org/projects/?a=blobdiff_plain;f=loadstorm%2FStorm.cpp;h=4d73c820d2a049462f852722d084958218eef918;hb=2d86db8c62512403ab189a8f7eacf7898e3df4e3;hp=c8e636631b1cdc02009c7061ea1fe4ac2d1a0bd1;hpb=561c0942c0bb8e6dcfcc3616a5b89123cadd9ce1;p=grpapi.git diff --git a/loadstorm/Storm.cpp b/loadstorm/Storm.cpp index c8e6366..4d73c82 100644 --- a/loadstorm/Storm.cpp +++ b/loadstorm/Storm.cpp @@ -1,121 +1,111 @@ -/* - Storm.cpp -*/ - -#include "storm.h" - -struct STORMMODULE { - STORMMODULE(); - ~STORMMODULE(); -} Storm; - -void FreeStorm(); - -HINSTANCE hStorm = 0; -BOOL AlreadyLoaded = FALSE; - -// Storm Function Names -funcSFileCloseArchive SFileCloseArchive = 0; -funcSFileCloseFile SFileCloseFile = 0; -funcSFileDestroy SFileDestroy = 0; -funcSFileGetFileArchive SFileGetFileArchive = 0; -funcSFileGetFileSize SFileGetFileSize = 0; -funcSFileOpenArchive SFileOpenArchive = 0; -funcSFileOpenFile SFileOpenFile = 0; -funcSFileOpenFileEx SFileOpenFileEx = 0; -funcSFileReadFile SFileReadFile = 0; -funcSFileSetBasePath SFileSetBasePath = 0; -funcSFileSetFilePointer SFileSetFilePointer = 0; -funcSFileSetLocale SFileSetLocale = 0; -funcSFileGetBasePath SFileGetBasePath = 0; -funcSFileGetArchiveName SFileGetArchiveName = 0; -funcSFileGetFileName SFileGetFileName = 0; - -STORMMODULE::STORMMODULE() -{ - if (hStorm!=0) return; - const char STORM_DLL[] = "Storm.dll"; - hStorm = GetModuleHandle(STORM_DLL); - if (hStorm == NULL) hStorm = LoadLibrary(STORM_DLL); - else AlreadyLoaded=TRUE; - - if (hStorm != NULL) - { - SFileCloseArchive = (funcSFileCloseArchive)GetProcAddress(hStorm, (LPCSTR)0xFC); - SFileCloseFile = (funcSFileCloseFile)GetProcAddress(hStorm, (LPCSTR)0xFD); - SFileDestroy = (funcSFileDestroy)GetProcAddress(hStorm, (LPCSTR)0x106); - SFileGetFileArchive = (funcSFileGetFileArchive)GetProcAddress(hStorm, (LPCSTR)0x108); - SFileGetFileSize = (funcSFileGetFileSize)GetProcAddress(hStorm, (LPCSTR)0x109); - SFileOpenArchive = (funcSFileOpenArchive)GetProcAddress(hStorm, (LPCSTR)0x10A); - SFileOpenFile = (funcSFileOpenFile)GetProcAddress(hStorm, (LPCSTR)0x10B); - SFileOpenFileEx = (funcSFileOpenFileEx)GetProcAddress(hStorm, (LPCSTR)0x10C); - SFileReadFile = (funcSFileReadFile)GetProcAddress(hStorm, (LPCSTR)0x10D); - SFileSetBasePath = (funcSFileSetBasePath)GetProcAddress(hStorm, (LPCSTR)0x10E); - SFileSetFilePointer = (funcSFileSetFilePointer)GetProcAddress(hStorm, (LPCSTR)0x10F); - SFileSetLocale = (funcSFileSetLocale)GetProcAddress(hStorm, (LPCSTR)0x110); - SFileGetBasePath = (funcSFileGetBasePath)GetProcAddress(hStorm, (LPCSTR)0x111); - SFileGetArchiveName = (funcSFileGetArchiveName)GetProcAddress(hStorm, (LPCSTR)0x113); - SFileGetFileName = (funcSFileGetFileName)GetProcAddress(hStorm, (LPCSTR)0x114); - } - if (SFileDestroy && !AlreadyLoaded) SFileDestroy(); -} - -STORMMODULE::~STORMMODULE() -{ - FreeStorm(); -} - -HINSTANCE LoadStorm(char * DllFileName) -{ - FreeStorm(); - if (hStorm!=0) return 0; - hStorm = GetModuleHandle(DllFileName); - if (hStorm == NULL) hStorm = LoadLibrary(DllFileName); - else AlreadyLoaded=TRUE; - - if (hStorm != NULL) - { - SFileCloseArchive = (funcSFileCloseArchive)GetProcAddress(hStorm, (LPCSTR)0xFC); - SFileCloseFile = (funcSFileCloseFile)GetProcAddress(hStorm, (LPCSTR)0xFD); - SFileDestroy = (funcSFileDestroy)GetProcAddress(hStorm, (LPCSTR)0x106); - SFileGetFileArchive = (funcSFileGetFileArchive)GetProcAddress(hStorm, (LPCSTR)0x108); - SFileGetFileSize = (funcSFileGetFileSize)GetProcAddress(hStorm, (LPCSTR)0x109); - SFileOpenArchive = (funcSFileOpenArchive)GetProcAddress(hStorm, (LPCSTR)0x10A); - SFileOpenFile = (funcSFileOpenFile)GetProcAddress(hStorm, (LPCSTR)0x10B); - SFileOpenFileEx = (funcSFileOpenFileEx)GetProcAddress(hStorm, (LPCSTR)0x10C); - SFileReadFile = (funcSFileReadFile)GetProcAddress(hStorm, (LPCSTR)0x10D); - SFileSetBasePath = (funcSFileSetBasePath)GetProcAddress(hStorm, (LPCSTR)0x10E); - SFileSetFilePointer = (funcSFileSetFilePointer)GetProcAddress(hStorm, (LPCSTR)0x10F); - SFileSetLocale = (funcSFileSetLocale)GetProcAddress(hStorm, (LPCSTR)0x110); - SFileGetBasePath = (funcSFileGetBasePath)GetProcAddress(hStorm, (LPCSTR)0x111); - SFileGetArchiveName = (funcSFileGetArchiveName)GetProcAddress(hStorm, (LPCSTR)0x113); - SFileGetFileName = (funcSFileGetFileName)GetProcAddress(hStorm, (LPCSTR)0x114); - } - if (SFileDestroy && !AlreadyLoaded) SFileDestroy(); - if (AlreadyLoaded==TRUE) return 0; - return hStorm; -} - -void FreeStorm() -{ - SFileCloseArchive = 0; - SFileCloseFile = 0; - SFileDestroy = 0; - SFileGetFileArchive = 0; - SFileGetFileSize = 0; - SFileOpenArchive = 0; - SFileOpenFile = 0; - SFileOpenFileEx = 0; - SFileReadFile = 0; - SFileSetBasePath = 0; - SFileSetFilePointer = 0; - SFileSetLocale = 0; - SFileGetBasePath = 0; - SFileGetArchiveName = 0; - SFileGetFileName = 0; - - if (hStorm==0) return; - - if (AlreadyLoaded==FALSE) FreeLibrary(hStorm); - hStorm = 0; -} +/* + Storm.cpp +*/ +/* License information for this code is in license.txt */ + +#include "storm.h" + +struct STORMMODULE { + STORMMODULE(); + ~STORMMODULE(); +} Storm; + +void LoadStormFunctions(); +void FreeStorm(); + +HINSTANCE hStorm = 0; +BOOL AlreadyLoaded = FALSE; + +// Storm Function Names +BOOL (WINAPI* SFileOpenArchive)(LPCSTR lpFilename, DWORD dwPriority, DWORD dwFlags, MPQHANDLE *hMPQ) = 0; +BOOL (WINAPI* SFileCloseArchive)(MPQHANDLE hMPQ) = 0; +BOOL (WINAPI* SFileOpenFile)(LPCSTR lpFileName, MPQHANDLE *hFile) = 0; +BOOL (WINAPI* SFileOpenFileEx)(MPQHANDLE hMPQ, LPCSTR lpFileName, DWORD dwSearchScope, MPQHANDLE *hFile) = 0; +BOOL (WINAPI* SFileCloseFile)(MPQHANDLE hFile) = 0; +DWORD (WINAPI* SFileGetFileSize)(MPQHANDLE hFile, LPDWORD lpFileSizeHigh) = 0; +DWORD (WINAPI* SFileSetFilePointer)(MPQHANDLE hFile, long lDistanceToMove, PLONG lplDistanceToMoveHigh, DWORD dwMoveMethod) = 0; +BOOL (WINAPI* SFileReadFile)(MPQHANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) = 0; +LCID (WINAPI* SFileSetLocale)(LCID nNewLocale) = 0; +BOOL (WINAPI* SFileDestroy)() = 0; +BOOL (WINAPI* SFileGetArchiveName)(MPQHANDLE hMPQ, LPCSTR lpBuffer, DWORD dwBufferLength) = 0; +BOOL (WINAPI* SFileGetFileName)(MPQHANDLE hFile, LPCSTR lpBuffer, DWORD dwBufferLength) = 0; +BOOL (WINAPI* SFileGetFileArchive)(MPQHANDLE hFile, MPQHANDLE *hMPQ) = 0; +BOOL (WINAPI* SFileGetBasePath)(LPCSTR lpBuffer, DWORD dwBufferLength) = 0; +BOOL (WINAPI* SFileSetBasePath)(LPCSTR lpNewBasePath) = 0; + +STORMMODULE::STORMMODULE() +{ + if (hStorm!=0) return; + const char STORM_DLL[] = "Storm.dll"; + hStorm = GetModuleHandle(STORM_DLL); + if (hStorm == NULL) hStorm = LoadLibrary(STORM_DLL); + else AlreadyLoaded=TRUE; + + LoadStormFunctions(); + if (SFileDestroy && !AlreadyLoaded) SFileDestroy(); +} + +STORMMODULE::~STORMMODULE() +{ + FreeStorm(); +} + +HINSTANCE LoadStorm(char * DllFileName) +{ + FreeStorm(); + if (hStorm!=0) return 0; + hStorm = GetModuleHandle(DllFileName); + if (hStorm == NULL) hStorm = LoadLibrary(DllFileName); + else AlreadyLoaded=TRUE; + + LoadStormFunctions(); + if (SFileDestroy && !AlreadyLoaded) SFileDestroy(); + if (AlreadyLoaded==TRUE) return 0; + return hStorm; +} + +void LoadStormFunctions() +{ + if (hStorm != NULL) + { + *(FARPROC *)&SFileCloseArchive = GetProcAddress(hStorm, (LPCSTR)0xFC); + *(FARPROC *)&SFileCloseFile = GetProcAddress(hStorm, (LPCSTR)0xFD); + *(FARPROC *)&SFileDestroy = GetProcAddress(hStorm, (LPCSTR)0x106); + *(FARPROC *)&SFileGetFileArchive = GetProcAddress(hStorm, (LPCSTR)0x108); + *(FARPROC *)&SFileGetFileSize = GetProcAddress(hStorm, (LPCSTR)0x109); + *(FARPROC *)&SFileOpenArchive = GetProcAddress(hStorm, (LPCSTR)0x10A); + *(FARPROC *)&SFileOpenFile = GetProcAddress(hStorm, (LPCSTR)0x10B); + *(FARPROC *)&SFileOpenFileEx = GetProcAddress(hStorm, (LPCSTR)0x10C); + *(FARPROC *)&SFileReadFile = GetProcAddress(hStorm, (LPCSTR)0x10D); + *(FARPROC *)&SFileSetBasePath = GetProcAddress(hStorm, (LPCSTR)0x10E); + *(FARPROC *)&SFileSetFilePointer = GetProcAddress(hStorm, (LPCSTR)0x10F); + *(FARPROC *)&SFileSetLocale = GetProcAddress(hStorm, (LPCSTR)0x110); + *(FARPROC *)&SFileGetBasePath = GetProcAddress(hStorm, (LPCSTR)0x111); + *(FARPROC *)&SFileGetArchiveName = GetProcAddress(hStorm, (LPCSTR)0x113); + *(FARPROC *)&SFileGetFileName = GetProcAddress(hStorm, (LPCSTR)0x114); + } +} + +void FreeStorm() +{ + SFileCloseArchive = 0; + SFileCloseFile = 0; + SFileDestroy = 0; + SFileGetFileArchive = 0; + SFileGetFileSize = 0; + SFileOpenArchive = 0; + SFileOpenFile = 0; + SFileOpenFileEx = 0; + SFileReadFile = 0; + SFileSetBasePath = 0; + SFileSetFilePointer = 0; + SFileSetLocale = 0; + SFileGetBasePath = 0; + SFileGetArchiveName = 0; + SFileGetFileName = 0; + + if (hStorm==0) return; + + if (AlreadyLoaded==FALSE) FreeLibrary(hStorm); + hStorm = 0; +}