4 #define __STORMLIB_SELF__
6 typedef std::vector
<MPQArchive
*> ArchiveSet
;
7 ArchiveSet gOpenArchives
;
8 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
9 MPQArchive::MPQArchive(const char* filename
)
11 BOOL succ
= SFileOpenArchive(filename
, 0, 0,&hMPQ
);
14 MPQArchive
*ar
= (MPQArchive
*)(hMPQ
);
15 printf("Opening %s\n", filename
);
16 gOpenArchives
.push_back(ar
);
22 printf("Error!!!Not open archive %s\n", filename
);
26 void MPQArchive::close()
28 SFileCloseArchive(hMPQ
);
31 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
32 MPQFile::MPQFile(const char* filename
):
38 for(ArchiveSet::iterator i
=gOpenArchives
.begin(); i
!=gOpenArchives
.end();++i
)
42 MPQArchive
*(hMPQ
) = *i
;
43 BOOL succ
= SFileOpenFileEx(hMPQ
,filename
,0, &hFile
);
46 DWORD s
= SFileGetFileSize(hFile
, 0);
55 SFileReadFile(hFile
, buffer
, s
, 0, 0);
56 SFileCloseFile(hFile
);
73 size_t MPQFile::read(void* dest
, size_t bytes
)
78 size_t rpos
= pointer
+ bytes
;
81 bytes
= size
- pointer
;
85 memcpy(dest
, &(buffer
[pointer
]), bytes
);
97 void MPQFile::seek(int offset
)
100 eof
= (pointer
>= size
);
103 void MPQFile::seekRelative(int offset
)
106 eof
= (pointer
>= size
);
109 void MPQFile::close()
117 size_t MPQFile::getSize()
122 size_t MPQFile::getPos()
127 char* MPQFile::getBuffer()
132 char* MPQFile::getPointer()
134 return buffer
+ pointer
;