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




1 /*\r
2         Storm.cpp\r
3 */\r
4 \r
5 #include "storm.h"\r
6 \r
7 struct STORMMODULE {\r
8         STORMMODULE();\r
9         ~STORMMODULE();\r
10 } Storm;\r
11 \r
12 void FreeStorm();\r
13 \r
14 HINSTANCE hStorm = 0;\r
15 BOOL AlreadyLoaded = FALSE;\r
16 \r
17 // Storm Function Names\r
18 funcSFileCloseArchive SFileCloseArchive = 0;\r
19 funcSFileCloseFile SFileCloseFile = 0;\r
20 funcSFileDestroy SFileDestroy = 0;\r
21 funcSFileGetFileArchive SFileGetFileArchive = 0;\r
22 funcSFileGetFileSize SFileGetFileSize = 0;\r
23 funcSFileOpenArchive SFileOpenArchive = 0;\r
24 funcSFileOpenFile SFileOpenFile = 0;\r
25 funcSFileOpenFileEx SFileOpenFileEx = 0;\r
26 funcSFileReadFile SFileReadFile = 0;\r
27 funcSFileSetBasePath SFileSetBasePath = 0;\r
28 funcSFileSetFilePointer SFileSetFilePointer = 0;\r
29 funcSFileSetLocale SFileSetLocale = 0;\r
30 funcSFileGetBasePath SFileGetBasePath = 0;\r
31 funcSFileGetArchiveName SFileGetArchiveName = 0;\r
32 funcSFileGetFileName SFileGetFileName = 0;\r
33 \r
34 STORMMODULE::STORMMODULE()\r
35 {\r
36         if (hStorm!=0) return;\r
37         const char STORM_DLL[] = "Storm.dll";\r
38         hStorm = GetModuleHandle(STORM_DLL);\r
39         if (hStorm == NULL) hStorm = LoadLibrary(STORM_DLL);\r
40         else AlreadyLoaded=TRUE;\r
41 \r
42         if (hStorm != NULL)\r
43         {\r
44                 SFileCloseArchive = (funcSFileCloseArchive)GetProcAddress(hStorm, (LPCSTR)0xFC);\r
45                 SFileCloseFile = (funcSFileCloseFile)GetProcAddress(hStorm, (LPCSTR)0xFD);\r
46                 SFileDestroy = (funcSFileDestroy)GetProcAddress(hStorm, (LPCSTR)0x106);\r
47                 SFileGetFileArchive = (funcSFileGetFileArchive)GetProcAddress(hStorm, (LPCSTR)0x108);\r
48                 SFileGetFileSize = (funcSFileGetFileSize)GetProcAddress(hStorm, (LPCSTR)0x109);\r
49                 SFileOpenArchive = (funcSFileOpenArchive)GetProcAddress(hStorm, (LPCSTR)0x10A);\r
50                 SFileOpenFile = (funcSFileOpenFile)GetProcAddress(hStorm, (LPCSTR)0x10B);\r
51                 SFileOpenFileEx = (funcSFileOpenFileEx)GetProcAddress(hStorm, (LPCSTR)0x10C);\r
52                 SFileReadFile = (funcSFileReadFile)GetProcAddress(hStorm, (LPCSTR)0x10D);\r
53                 SFileSetBasePath = (funcSFileSetBasePath)GetProcAddress(hStorm, (LPCSTR)0x10E);\r
54                 SFileSetFilePointer = (funcSFileSetFilePointer)GetProcAddress(hStorm, (LPCSTR)0x10F);\r
55                 SFileSetLocale = (funcSFileSetLocale)GetProcAddress(hStorm, (LPCSTR)0x110);\r
56                 SFileGetBasePath = (funcSFileGetBasePath)GetProcAddress(hStorm, (LPCSTR)0x111);\r
57                 SFileGetArchiveName = (funcSFileGetArchiveName)GetProcAddress(hStorm, (LPCSTR)0x113);\r
58                 SFileGetFileName = (funcSFileGetFileName)GetProcAddress(hStorm, (LPCSTR)0x114);\r
59         }\r
60         if (SFileDestroy && !AlreadyLoaded) SFileDestroy();\r
61 }\r
62 \r
63 STORMMODULE::~STORMMODULE()\r
64 {\r
65         FreeStorm();\r
66 }\r
67 \r
68 HINSTANCE LoadStorm(char * DllFileName)\r
69 {\r
70         FreeStorm();\r
71         if (hStorm!=0) return 0;\r
72         hStorm = GetModuleHandle(DllFileName);\r
73         if (hStorm == NULL) hStorm = LoadLibrary(DllFileName);\r
74         else AlreadyLoaded=TRUE;\r
75 \r
76         if (hStorm != NULL)\r
77         {\r
78                 SFileCloseArchive = (funcSFileCloseArchive)GetProcAddress(hStorm, (LPCSTR)0xFC);\r
79                 SFileCloseFile = (funcSFileCloseFile)GetProcAddress(hStorm, (LPCSTR)0xFD);\r
80                 SFileDestroy = (funcSFileDestroy)GetProcAddress(hStorm, (LPCSTR)0x106);\r
81                 SFileGetFileArchive = (funcSFileGetFileArchive)GetProcAddress(hStorm, (LPCSTR)0x108);\r
82                 SFileGetFileSize = (funcSFileGetFileSize)GetProcAddress(hStorm, (LPCSTR)0x109);\r
83                 SFileOpenArchive = (funcSFileOpenArchive)GetProcAddress(hStorm, (LPCSTR)0x10A);\r
84                 SFileOpenFile = (funcSFileOpenFile)GetProcAddress(hStorm, (LPCSTR)0x10B);\r
85                 SFileOpenFileEx = (funcSFileOpenFileEx)GetProcAddress(hStorm, (LPCSTR)0x10C);\r
86                 SFileReadFile = (funcSFileReadFile)GetProcAddress(hStorm, (LPCSTR)0x10D);\r
87                 SFileSetBasePath = (funcSFileSetBasePath)GetProcAddress(hStorm, (LPCSTR)0x10E);\r
88                 SFileSetFilePointer = (funcSFileSetFilePointer)GetProcAddress(hStorm, (LPCSTR)0x10F);\r
89                 SFileSetLocale = (funcSFileSetLocale)GetProcAddress(hStorm, (LPCSTR)0x110);\r
90                 SFileGetBasePath = (funcSFileGetBasePath)GetProcAddress(hStorm, (LPCSTR)0x111);\r
91                 SFileGetArchiveName = (funcSFileGetArchiveName)GetProcAddress(hStorm, (LPCSTR)0x113);\r
92                 SFileGetFileName = (funcSFileGetFileName)GetProcAddress(hStorm, (LPCSTR)0x114);\r
93         }\r
94         if (SFileDestroy && !AlreadyLoaded) SFileDestroy();\r
95         if (AlreadyLoaded==TRUE) return 0;\r
96         return hStorm;\r
97 }\r
98 \r
99 void FreeStorm()\r
100 {\r
101         SFileCloseArchive = 0;\r
102         SFileCloseFile = 0;\r
103         SFileDestroy = 0;\r
104         SFileGetFileArchive = 0;\r
105         SFileGetFileSize = 0;\r
106         SFileOpenArchive = 0;\r
107         SFileOpenFile = 0;\r
108         SFileOpenFileEx = 0;\r
109         SFileReadFile = 0;\r
110         SFileSetBasePath = 0;\r
111         SFileSetFilePointer = 0;\r
112         SFileSetLocale = 0;\r
113         SFileGetBasePath = 0;\r
114         SFileGetArchiveName = 0;\r
115         SFileGetFileName = 0;\r
116 \r
117         if (hStorm==0) return;\r
118 \r
119         if (AlreadyLoaded==FALSE) FreeLibrary(hStorm);\r
120         hStorm = 0;\r
121 }\r