[4057] added: Line of sight (vmaps) [part 2] (last part)
[mangos-git.git] / contrib / vmap_extractor_v2 / vmapextract / mpq.cpp
bloba42a3f6683142268232e57f067aa56ea685c52c1
1 #include "mpq.h"
2 //#include <vector>
3 #include "Stormlib.h"
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);
12 if (succ)
14 MPQArchive*ar = (MPQArchive*)(hMPQ);
15 printf("Opening %s\n", filename);
16 gOpenArchives.push_back(ar);
17 succ = true;
20 else
22 printf("Error!!!Not open archive %s\n", filename);
26 void MPQArchive::close()
28 SFileCloseArchive(hMPQ);
31 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
32 MPQFile::MPQFile(const char* filename):
33 eof(false),
34 buffer(0),
35 pointer(0),
36 size(0)
38 for(ArchiveSet::iterator i=gOpenArchives.begin(); i!=gOpenArchives.end();++i)
41 HANDLE hFile = "";
42 MPQArchive*(hMPQ) = *i;
43 BOOL succ = SFileOpenFileEx(hMPQ,filename,0, &hFile);
44 if (succ)
46 DWORD s = SFileGetFileSize(hFile, 0);
47 if (!s)
49 eof = true;
50 buffer = 0;
51 return;
53 size = (size_t)s;
54 buffer = new char[s];
55 SFileReadFile(hFile, buffer, s, 0, 0);
56 SFileCloseFile(hFile);
58 eof = false;
59 return;
63 eof = true;
64 buffer = 0;
68 MPQFile::~MPQFile()
70 close();
73 size_t MPQFile::read(void* dest, size_t bytes)
75 if (eof)
76 return 0;
78 size_t rpos = pointer + bytes;
79 if (rpos > size)
81 bytes = size - pointer;
82 eof = true;
85 memcpy(dest, &(buffer[pointer]), bytes);
87 pointer = rpos;
89 return bytes;
92 bool MPQFile::isEof()
94 return eof;
97 void MPQFile::seek(int offset)
99 pointer = offset;
100 eof = (pointer >= size);
103 void MPQFile::seekRelative(int offset)
105 pointer += offset;
106 eof = (pointer >= size);
109 void MPQFile::close()
111 if (buffer)
112 delete[] buffer;
113 buffer = 0;
114 eof = true;
117 size_t MPQFile::getSize()
119 return size;
122 size_t MPQFile::getPos()
124 return pointer;
127 char* MPQFile::getBuffer()
129 return buffer;
132 char* MPQFile::getPointer()
134 return buffer + pointer;