Commit | Line | Data |
7df24e1f |
1 | // License information for this code is in license.txt |
2 | |
3 | [ uuid(CF183E40-8316-11d6-9E07-00A0C9199875), version(1.08), |
4 | helpstring("ShadowFlare MPQ API Library v1.08")] |
5 | |
6 | library SFMPQAPI |
7 | { |
8 | #define WINAPI __stdcall |
9 | #define HANDLE long |
10 | #define MPQHANDLE HANDLE |
11 | #define DWORD long |
12 | #define LPDWORD DWORD * |
13 | #define LCID DWORD |
14 | #define PLONG LONG * |
15 | #define LPVOID LPSTR |
16 | #define BOOL boolean |
17 | typedef struct _OVERLAPPED { |
18 | DWORD Internal; |
19 | DWORD InternalHigh; |
20 | DWORD Offset; |
21 | DWORD OffsetHigh; |
22 | HANDLE hEvent; |
23 | } OVERLAPPED; |
24 | //#define LPOVERLAPPED OVERLAPPED * |
25 | #define LPOVERLAPPED long |
26 | typedef struct _SFMPQVERSION { |
27 | WORD Major; |
28 | WORD Minor; |
29 | WORD Revision; |
30 | WORD Subrevision; |
31 | } SFMPQVERSION; |
32 | typedef struct _FILELISTENTRY { |
33 | DWORD dwFileExists; // Nonzero if this entry is used |
34 | LCID lcLocale; // Locale ID of file |
35 | DWORD dwCompressedSize; // Compressed size of file |
36 | DWORD dwFullSize; // Uncompressed size of file |
37 | DWORD dwFlags; // Flags for file |
38 | char szFileName[260]; |
39 | } FILELISTENTRY; |
40 | |
41 | //[uuid(CF183E43-8316-11d6-9E07-00A0C9199875)] |
42 | [helpstring("General error codes")] |
43 | typedef enum { |
44 | MPQ_ERROR_MPQ_INVALID = 0x85200065, |
45 | MPQ_ERROR_FILE_NOT_FOUND = 0x85200066, |
46 | MPQ_ERROR_DISK_FULL = 0x85200068, |
47 | MPQ_ERROR_HASH_TABLE_FULL = 0x85200069, |
48 | MPQ_ERROR_ALREADY_EXISTS = 0x8520006A, |
49 | MPQ_ERROR_BAD_OPEN_MODE = 0x8520006C, |
50 | MPQ_ERROR_COMPACT_ERROR = 0x85300001, |
51 | } Error_Constants; |
52 | |
53 | [helpstring("MpqOpenArchiveForUpdate flags")] |
54 | typedef enum { |
55 | MOAU_CREATE_NEW = 0x00, |
56 | MOAU_CREATE_ALWAYS = 0x08, |
57 | MOAU_OPEN_EXISTING = 0x04, |
58 | MOAU_OPEN_ALWAYS = 0x20, |
59 | MOAU_READ_ONLY = 0x10, |
60 | MOAU_MAINTAIN_ATTRIBUTES=0x02, |
61 | MOAU_MAINTAIN_LISTFILE =0x01, |
62 | } MpqOpenArchiveForUpdate_Flags; |
63 | |
a9771b7c |
64 | [helpstring("MpqOpenArchiveForUpdateEx constants")] |
65 | typedef enum { |
66 | DEFAULT_BLOCK_SIZE = 3, |
67 | USE_DEFAULT_BLOCK_SIZE = 0xFFFFFFFF, |
68 | } MpqOpenArchiveForUpdateEx_Constants; |
69 | |
7df24e1f |
70 | [helpstring("MpqAddFileToArchive flags")] |
71 | typedef enum { |
72 | MAFA_EXISTS = 0x80000000, |
73 | MAFA_UNKNOWN40000000 = 0x40000000, |
74 | MAFA_MODCRYPTKEY = 0x00020000, |
75 | MAFA_ENCRYPT = 0x00010000, |
76 | MAFA_COMPRESS = 0x00000200, |
77 | MAFA_COMPRESS2 = 0x00000100, |
78 | MAFA_REPLACE_EXISTING =0x00000001, |
79 | } MpqAddFileToArchive_Flags; |
80 | |
81 | [helpstring("MpqAddFileToArchiveEx compression flags")] |
82 | typedef enum { |
83 | MAFA_COMPRESS_STANDARD = 0x08, |
84 | MAFA_COMPRESS_DEFLATE = 0x02, |
a9771b7c |
85 | MAFA_COMPRESS_BZIP2 = 0x10, |
7df24e1f |
86 | MAFA_COMPRESS_WAVE = 0x81, |
87 | MAFA_COMPRESS_WAVE2 = 0x41, |
88 | MAFA_COMPRESS_WAVECOMP1 = 0x80, |
89 | MAFA_COMPRESS_WAVECOMP2 = 0x40, |
90 | MAFA_COMPRESS_WAVECOMP3 = 0x01, |
91 | } MpqAddFileToArchiveEx_Compression_Types; |
92 | |
93 | [helpstring("Deflate compression level constants")] |
94 | typedef enum { |
95 | Z_NO_COMPRESSION = 0, |
96 | Z_BEST_SPEED = 1, |
97 | Z_BEST_COMPRESSION = 9, |
98 | Z_DEFAULT_COMPRESSION = (-1), |
99 | } Deflate_Compress_Level; |
100 | |
101 | [helpstring("MpqAddWaveToArchive quality flags")] |
102 | typedef enum { |
103 | MAWA_QUALITY_HIGH = 1, |
104 | MAWA_QUALITY_MEDIUM = 0, |
105 | MAWA_QUALITY_LOW = 2, |
106 | } MpqAddWaveToArchive_Quality; |
107 | |
108 | [helpstring("SFileGetFileInfo flags")] |
109 | typedef enum { |
110 | SFILE_INFO_BLOCK_SIZE = 0x01, |
111 | SFILE_INFO_HASH_TABLE_SIZE =0x02, |
112 | SFILE_INFO_NUM_FILES = 0x03, |
113 | SFILE_INFO_TYPE = 0x04, |
114 | SFILE_INFO_SIZE = 0x05, |
115 | SFILE_INFO_COMPRESSED_SIZE =0x06, |
116 | SFILE_INFO_FLAGS = 0x07, |
117 | SFILE_INFO_PARENT = 0x08, |
118 | SFILE_INFO_POSITION = 0x09, |
119 | SFILE_INFO_LOCALEID = 0x0A, |
120 | SFILE_INFO_PRIORITY = 0x0B, |
121 | SFILE_INFO_HASH_INDEX = 0x0C, |
a9771b7c |
122 | SFILE_INFO_BLOCK_INDEX = 0x0D, |
7df24e1f |
123 | } SFileGetFileInfo_Flags; |
124 | |
a9771b7c |
125 | [helpstring("Handle type constants")] |
126 | typedef enum { |
127 | SFILE_TYPE_MPQ = 0x01, |
128 | SFILE_TYPE_FILE =0x02, |
129 | } Handle_Type_Constants; |
130 | |
7df24e1f |
131 | [helpstring("SFileListFiles flags")] |
132 | typedef enum { |
133 | SFILE_LIST_MEMORY_LIST =0x01, |
134 | SFILE_LIST_ONLY_KNOWN =0x02, |
135 | SFILE_LIST_ONLY_UNKNOWN =0x04, |
a9771b7c |
136 | SFILE_LIST_FLAG_UNKNOWN =0x08, |
7df24e1f |
137 | } SFileListFiles_Flags; |
138 | |
7df24e1f |
139 | [helpstring("SFileOpenArchive flags")] |
140 | typedef enum { |
141 | SFILE_OPEN_HARD_DISK_FILE =0x0000, |
142 | SFILE_OPEN_CD_ROM_FILE = 0x0001, |
143 | SFILE_OPEN_ALLOW_WRITE = 0x8000, |
144 | } SFileOpenArchive_Flags; |
145 | |
146 | [helpstring("SFileOpenFileEx flags")] |
147 | typedef enum { |
148 | SFILE_SEARCH_CURRENT_ONLY =0x00, |
149 | SFILE_SEARCH_ALL_OPEN = 0x01 |
150 | } SFileOpenFileEx_Flags; |
151 | |
152 | [helpstring("Other misc. flags and constants")] |
153 | typedef enum { |
154 | INVALID_HANDLE_VALUE = 0xFFFFFFFF, |
155 | } Other; |
156 | |
157 | |
158 | [helpstring("SFileSetFilePointer move methods")] |
159 | typedef enum { |
160 | FILE_BEGIN = 0, |
161 | FILE_CURRENT = 1, |
162 | FILE_END = 2 |
163 | } SFileSetFilePointer_Move_Methods; |
164 | |
165 | [helpstring("Windows defined error codes")] |
166 | typedef enum { |
167 | ERROR_SUCCESS = 0, |
168 | NO_ERROR = 0, |
169 | ERROR_FILE_NOT_FOUND = 2, |
170 | ERROR_OUTOFMEMORY = 14, |
171 | ERROR_INVALID_PARAMETER = 87, |
172 | ERROR_DISK_FULL = 112, |
173 | ERROR_ALREADY_EXISTS = 183, |
174 | ERROR_FILE_INVALID = 1006, |
175 | ERROR_UNKNOWN_PROPERTY = 1608 |
176 | } WinErrors; |
177 | |
178 | [dllname("sfmpq.dll")] |
179 | |
180 | [helpstring("Version and other misc. functions")] |
181 | module SFMpq |
182 | { |
183 | [entry("MpqInitialize"),helpstring("MpqInitialize does nothing; it is only provided for compatibility with MPQ archivers that use lmpqapi.")] |
184 | BOOL WINAPI MpqInitialize(); |
185 | [entry("MpqGetVersionString"),helpstring("")] |
186 | LPCSTR WINAPI MpqGetVersionString(); |
187 | [entry("MpqGetVersion"),helpstring("")] |
188 | float WINAPI MpqGetVersion(); |
189 | [entry("SFMpqDestroy"),helpstring("This no longer needs to be called; it is only provided for compatibility with older versions")] |
190 | void WINAPI SFMpqDestroy(); |
a9771b7c |
191 | [entry("AboutSFMpq"),helpstring("Displays an about page in a web browser (this has only been tested in Internet Explorer)")] |
192 | void WINAPI AboutSFMpq(); |
7df24e1f |
193 | [entry("SFMpqGetVersionString"),helpstring("")] |
194 | LPCSTR WINAPI SFMpqGetVersionString(); |
195 | [entry("SFMpqGetVersionString2"),helpstring("SFMpqGetVersionString2's return value is the required length of the buffer plus the terminating null, so use SFMpqGetVersionString2(0, 0) to get the length.")] |
196 | DWORD WINAPI SFMpqGetVersionString2(LPCSTR lpBuffer, DWORD dwBufferLength); |
197 | [entry("SFMpqGetVersion"),helpstring("")] |
198 | SFMPQVERSION WINAPI SFMpqGetVersion(); |
7df24e1f |
199 | }; |
200 | |
201 | [helpstring("Storm SFile emulated functions")] |
202 | module SFile |
203 | { |
204 | [entry("SFileOpenArchive"),helpstring("")] |
205 | BOOL WINAPI SFileOpenArchive(LPCSTR lpFileName, DWORD dwPriority, DWORD dwFlags, MPQHANDLE *hMPQ); |
206 | [entry("SFileCloseArchive"),helpstring("")] |
207 | BOOL WINAPI SFileCloseArchive(MPQHANDLE hMPQ); |
208 | [entry("SFileOpenFileAsArchive"),helpstring("")] |
209 | BOOL WINAPI SFileOpenFileAsArchive(MPQHANDLE hSourceMPQ, LPCSTR lpFileName, DWORD dwPriority, DWORD dwFlags, MPQHANDLE *hMPQ); |
210 | [entry("SFileGetArchiveName"),helpstring("")] |
211 | BOOL WINAPI SFileGetArchiveName(MPQHANDLE hMPQ, LPCSTR lpBuffer, DWORD dwBufferLength); |
212 | [entry("SFileOpenFile"),helpstring("")] |
213 | BOOL WINAPI SFileOpenFile(LPCSTR lpFileName, MPQHANDLE *hFile); |
214 | [entry("SFileOpenFileEx"),helpstring("")] |
215 | BOOL WINAPI SFileOpenFileEx(MPQHANDLE hMPQ, LPCSTR lpFileName, DWORD dwSearchScope, MPQHANDLE *hFile); |
216 | [entry("SFileCloseFile"),helpstring("")] |
217 | BOOL WINAPI SFileCloseFile(MPQHANDLE hFile); |
218 | [entry("SFileGetFileSize"),helpstring("")] |
219 | DWORD WINAPI SFileGetFileSize(MPQHANDLE hFile, LPDWORD lpFileSizeHigh); |
220 | [entry("SFileGetFileArchive"),helpstring("")] |
221 | BOOL WINAPI SFileGetFileArchive(MPQHANDLE hFile, MPQHANDLE *hMPQ); |
222 | [entry("SFileGetFileName"),helpstring("")] |
223 | BOOL WINAPI SFileGetFileName(MPQHANDLE hFile, LPCSTR lpBuffer, DWORD dwBufferLength); |
224 | [entry("SFileSetFilePointer"),helpstring("")] |
225 | DWORD WINAPI SFileSetFilePointer(MPQHANDLE hFile, long lDistanceToMove, PLONG lplDistanceToMoveHigh, DWORD dwMoveMethod); |
226 | [entry("SFileReadFile"),helpstring("")] |
227 | BOOL WINAPI SFileReadFile(MPQHANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead,LPOVERLAPPED lpOverlapped); |
228 | [entry("SFileReadFile"),helpstring("")] |
229 | BOOL WINAPI SFileReadFileB(MPQHANDLE hFile,byte *lpBuffer,DWORD nNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead,LPOVERLAPPED lpOverlapped); |
230 | [entry("SFileSetLocale"),helpstring("")] |
231 | LCID WINAPI SFileSetLocale(LCID nNewLocale); |
232 | [entry("SFileGetBasePath"),helpstring("")] |
233 | BOOL WINAPI SFileGetBasePath(LPCSTR lpBuffer, DWORD dwBufferLength); |
234 | [entry("SFileSetBasePath"),helpstring("")] |
235 | BOOL WINAPI SFileSetBasePath(LPCSTR lpNewBasePath); |
236 | [entry("SFileGetFileInfo"),helpstring("")] |
237 | DWORD WINAPI SFileGetFileInfo(MPQHANDLE hFile, DWORD dwInfoType); |
238 | [entry("SFileSetArchivePriority"),helpstring("")] |
239 | BOOL WINAPI SFileSetArchivePriority(MPQHANDLE hMPQ, DWORD dwPriority); |
240 | [entry("SFileFindMpqHeader"),helpstring("")] |
241 | DWORD WINAPI SFileFindMpqHeader(HANDLE hFile); |
242 | [entry("SFileListFiles"),helpstring("")] |
243 | BOOL WINAPI SFileListFiles(MPQHANDLE hMPQ, LPCSTR lpFileLists, FILELISTENTRY *lpListBuffer, DWORD dwFlags); |
244 | [entry("SFileDestroy"),helpstring("")] |
245 | BOOL WINAPI SFileDestroy(); |
246 | [entry("StormDestroy"),helpstring("")] |
247 | void WINAPI StormDestroy(); |
248 | }; |
249 | |
250 | [helpstring("MPQ archive creation and editing functions")] |
251 | module MPQ |
252 | { |
253 | [entry("MpqOpenArchiveForUpdate"),helpstring("")] |
254 | MPQHANDLE WINAPI MpqOpenArchiveForUpdate(LPCSTR lpFileName, DWORD dwFlags, DWORD dwMaximumFilesInArchive); |
255 | [entry("MpqCloseUpdatedArchive"),helpstring("")] |
256 | DWORD WINAPI MpqCloseUpdatedArchive(MPQHANDLE hMPQ, DWORD dwUnknown2); |
257 | [entry("MpqAddFileToArchive"),helpstring("")] |
258 | BOOL WINAPI MpqAddFileToArchive(MPQHANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags); |
259 | [entry("MpqAddWaveToArchive"),helpstring("")] |
260 | BOOL WINAPI MpqAddWaveToArchive(MPQHANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags, DWORD dwQuality); |
261 | [entry("MpqRenameFile"),helpstring("")] |
262 | BOOL WINAPI MpqRenameFile(MPQHANDLE hMPQ, LPCSTR lpcOldFileName, LPCSTR lpcNewFileName); |
263 | [entry("MpqDeleteFile"),helpstring("")] |
264 | BOOL WINAPI MpqDeleteFile(MPQHANDLE hMPQ, LPCSTR lpFileName); |
265 | [entry("MpqCompactArchive"),helpstring("")] |
266 | BOOL WINAPI MpqCompactArchive(MPQHANDLE hMPQ); |
a9771b7c |
267 | [entry("MpqOpenArchiveForUpdateEx"),helpstring("")] |
268 | MPQHANDLE WINAPI MpqOpenArchiveForUpdateEx(LPCSTR lpFileName, DWORD dwFlags, DWORD dwMaximumFilesInArchive, DWORD dwBlockSize); |
7df24e1f |
269 | [entry("MpqAddFileToArchiveEx"),helpstring("")] |
270 | BOOL WINAPI MpqAddFileToArchiveEx(MPQHANDLE hMPQ, LPCSTR lpSourceFileName, LPCSTR lpDestFileName, DWORD dwFlags, DWORD dwCompressionType, DWORD dwCompressLevel); |
271 | [entry("MpqAddFileFromBufferEx"),helpstring("")] |
272 | BOOL WINAPI MpqAddFileFromBufferEx(MPQHANDLE hMPQ, LPVOID lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags, DWORD dwCompressionType, DWORD dwCompressLevel); |
273 | [entry("MpqAddFileFromBufferEx"),helpstring("")] |
274 | BOOL WINAPI MpqAddFileFromBufferExB(MPQHANDLE hMPQ, byte *lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags, DWORD dwCompressionType, DWORD dwCompressLevel); |
275 | [entry("MpqAddFileFromBuffer"),helpstring("")] |
276 | BOOL WINAPI MpqAddFileFromBuffer(MPQHANDLE hMPQ, LPVOID lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags); |
277 | [entry("MpqAddFileFromBuffer"),helpstring("")] |
278 | BOOL WINAPI MpqAddFileFromBufferB(MPQHANDLE hMPQ, byte *lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags); |
279 | [entry("MpqAddWaveFromBuffer"),helpstring("")] |
280 | BOOL WINAPI MpqAddWaveFromBuffer(MPQHANDLE hMPQ, LPVOID lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags, DWORD dwQuality); |
281 | [entry("MpqAddWaveFromBuffer"),helpstring("")] |
282 | BOOL WINAPI MpqAddWaveFromBufferB(MPQHANDLE hMPQ, byte *lpBuffer, DWORD dwLength, LPCSTR lpFileName, DWORD dwFlags, DWORD dwQuality); |
283 | [entry("MpqRenameAndSetFileLocale"),helpstring("")] |
284 | BOOL WINAPI MpqRenameAndSetFileLocale(MPQHANDLE hMPQ, LPCSTR lpcOldFileName, LPCSTR lpcNewFileName, LCID nOldLocale, LCID nNewLocale); |
285 | [entry("MpqDeleteFileWithLocale"),helpstring("")] |
286 | BOOL WINAPI MpqDeleteFileWithLocale(MPQHANDLE hMPQ, LPCSTR lpFileName, LCID nLocale); |
287 | [entry("MpqSetFileLocale"),helpstring("")] |
288 | BOOL WINAPI MpqSetFileLocale(MPQHANDLE hMPQ, LPCSTR lpFileName, LCID nOldLocale, LCID nNewLocale); |
289 | }; |
290 | |
291 | [dllname("kernel32.dll")] |
292 | |
293 | module LastError |
294 | { |
295 | [entry("GetLastError"),helpstring("")] |
296 | DWORD WINAPI GetLastError(); |
297 | }; |
298 | }; |
299 | |