1 |
cycrow |
1 |
// File.h: interface for the C_File class.
|
|
|
2 |
//
|
|
|
3 |
//////////////////////////////////////////////////////////////////////
|
|
|
4 |
|
|
|
5 |
/*
|
|
|
6 |
File class, Created by Matthew Gravestock (Cycrow)
|
|
|
7 |
|
|
|
8 |
This class handles the store of data for each of the file in the package.
|
|
|
9 |
It also includes all the compression functions to compress and uncompress the files from the package
|
|
|
10 |
|
|
|
11 |
Enums:
|
|
|
12 |
Compression Type - The type of compression for each section and file, theres currently 3 types
|
|
|
13 |
7Zip - Compress via 7Zip compression, only works on windows version, but linux version can decompress them. Default for file data on Windows version
|
|
|
14 |
ZLIB - Compress via the ZLIB libray, ie Zip copression. Default compression for headers on all versions, and file data on Linux Version
|
|
|
15 |
None - No compression, just write in plain text (Not really used, prodcudes much larger files)
|
|
|
16 |
|
|
|
17 |
FileType - This is what type of file they are, deterimes how and where the file is installed
|
|
|
18 |
Script - A script file, goes into the X3/Scripts directory
|
|
|
19 |
Text - A Text file, ie 447532.xml, contains all text data used by script/mod. Goes in the X3/t directory
|
|
|
20 |
Readme - A Readme .txt file, can be displayed in installer in Rich Text format
|
|
|
21 |
Map - A Map script, these are xml files that create a new universe
|
|
|
22 |
Mod - .cat/.dat file pair, can also be a fake patch if named as a number, ie 01.cat
|
|
|
23 |
Uninstall - An uninstall script, only goes to X3/Scripts directory when plugin is uninstalled, allows plugins to clean themselves when removed
|
|
|
24 |
Sound - Soundtrack files, goes in the X3/Soundtrack directory, used for the sector music
|
|
|
25 |
Screen - Screen shot file, goes in the X3/loadscr directory, will be displayed as a loading screen
|
|
|
26 |
Extra - Any other file that doesn't fit in the section, can be placed in any directory thats required
|
|
|
27 |
|
|
|
28 |
Error - Stores the last error found (currently only used for a few errors)
|
|
|
29 |
None - No error, function was successful
|
|
|
30 |
Malloc - Error trying to malloc memory space, possible cause (Not enough memory)
|
|
|
31 |
Fileopen - Unable to open the file, possible cause (File doesn't exist)
|
|
|
32 |
Fileread - Error trying to read a file, happens after the file is open
|
|
|
33 |
|
|
|
34 |
Class includes all files needed for both 7Zip and ZLIB Libraries, and acts as the path between them
|
|
|
35 |
|
|
|
36 |
Functions (Windows Only):
|
|
|
37 |
LZMAEncodeData - Encodes a data stream using 7Zip, returns the encoded data as char array
|
|
|
38 |
LZMADecodeData - Decodes a compressed stream using 7Zip, returns the uncompressed data
|
|
|
39 |
LZMAEncodeFile - Encodes a file stream using 7Zip, writes to another file
|
|
|
40 |
LZMADecodeFile - Decodes a file stream using 7Zip, writes uncomressed data to file
|
|
|
41 |
|
|
|
42 |
Classes
|
|
|
43 |
CProgressInfo - Used to store progress info, basse class that needs to be dervived from to handle the progress update.
|
|
|
44 |
When decoding multi files, calls DoingFile() for each functions, allows class to display the current progress of the file
|
|
|
45 |
ProgressUpdated() is called for each progress, as the processed size and max size
|
|
|
46 |
CProgressInfo7Zip (Windows Only) - 7Zip specific progress, dervive from this for using progress on 7Zip Compression. (Currently no progress for ZLIB)
|
|
|
47 |
|
|
|
48 |
C_File:
|
|
|
49 |
The files here are stored in 1 of 2 ways, either file data, or a file pointer
|
|
|
50 |
|
|
|
51 |
File Data:
|
|
|
52 |
Uses the m_sData and m_lDataSize varibles. As well as the m_iDataCompression.
|
|
|
53 |
This method is used when reading the file to memory, either from a file or direct from the SPK Package.
|
|
|
54 |
This can be stored in compressed form so when writing the SPK File, it doesn't need to be compressed again.
|
|
|
55 |
CompressData() will compress the current data stream to m_sData, changes m_lDataSize and m_iDataCompression to match
|
|
|
56 |
UncomressData() will uncompress the data, it can either uncomress and return the uncomressed data stream, without effecting m_sData,
|
|
|
57 |
or it can change m_sData to the uncompressed data.
|
|
|
58 |
|
|
|
59 |
File Pointer:
|
|
|
60 |
When adding a new file, it will be first added as a pointer, this means that there is no data loaded, it just points to a filename on disk.
|
|
|
61 |
ReadFileSize() will read the size of the file to m_lSize
|
|
|
62 |
ReadLastModifed() will read the modified data tag of the file and store it in the class
|
|
|
63 |
ReadFromFile() will open and read the file to the data stream, m_sData, the compression will be set to None.
|
|
|
64 |
ReadFromFile (FILE *id) will read from a currently open file stream into the data, can be used to read a file from an existing SPK Package
|
|
|
65 |
|
|
|
66 |
|
|
|
67 |
*/
|
|
|
68 |
|
|
|
69 |
#if !defined(AFX_FILE_H__A0C15B81_4FD1_40D7_8EE8_2ECF5824BB8B__INCLUDED_)
|
|
|
70 |
#define AFX_FILE_H__A0C15B81_4FD1_40D7_8EE8_2ECF5824BB8B__INCLUDED_
|
|
|
71 |
|
|
|
72 |
#if _MSC_VER > 1000
|
|
|
73 |
#pragma once
|
|
|
74 |
#endif // _MSC_VER > 1000
|
|
|
75 |
|
32 |
cycrow |
76 |
#define LZMA_LEVEL 5
|
|
|
77 |
#define LZMA_DICT (1 << 26)
|
|
|
78 |
|
|
|
79 |
#define PCKHEADERSIZE 10
|
|
|
80 |
#define DEFAULT_COMPRESSION_LEVEL 5
|
|
|
81 |
|
94 |
cycrow |
82 |
#include "spkdefines.h"
|
1 |
cycrow |
83 |
#include "File_IO.h"
|
32 |
cycrow |
84 |
#include "zlib/zlib.h"
|
127 |
cycrow |
85 |
#include "enums.h"
|
1 |
cycrow |
86 |
//#include "x2bc/x2bc_common/bob_dom.h"
|
|
|
87 |
//#include "x2bc/x2bc_common/bob_realfile_stream.h"
|
|
|
88 |
|
|
|
89 |
// compression type
|
|
|
90 |
enum { SPKCOMPRESS_NONE, SPKCOMPRESS_ZLIB, SPKCOMPRESS_7ZIP, SPKCOMPRESS_LZMA, SPKCOMPRESS_BEST };
|
32 |
cycrow |
91 |
|
18 |
cycrow |
92 |
// special file types used internally
|
|
|
93 |
enum {
|
|
|
94 |
FILETYPE_SCRIPT_UNINSTALL = 1000,
|
|
|
95 |
};
|
1 |
cycrow |
96 |
// error
|
|
|
97 |
enum {SPKERR_NONE, SPKERR_MALLOC, SPKERR_FILEOPEN, SPKERR_FILEREAD, SPKERR_UNCOMPRESS, SPKERR_WRITEFILE, SPKERR_CREATEDIRECTORY, SPKERR_FILEMISMATCH};
|
|
|
98 |
enum {STATUS_NONE, STATUS_COMPRESS, STATUS_WRITE};
|
|
|
99 |
|
|
|
100 |
|
|
|
101 |
bool IsDataPCK ( const unsigned char *data, size_t size );
|
|
|
102 |
unsigned char SPKEXPORT *UnPCKData ( unsigned char *data, size_t datasize, size_t *len, bool nocrypt );
|
|
|
103 |
unsigned char SPKEXPORT *UnPCKFile ( const char *file, size_t *len, bool nocrypt );
|
|
|
104 |
unsigned char SPKEXPORT *UnPCKData ( unsigned char *data, size_t datasize, size_t *len );
|
|
|
105 |
int ReadScriptVersionFromData ( unsigned char *data, long size );
|
|
|
106 |
bool ReadSignedFromData ( unsigned char *data, long size );
|
|
|
107 |
|
|
|
108 |
struct SMultiSpkFile;
|
|
|
109 |
|
|
|
110 |
class C_File;
|
|
|
111 |
class SPKEXPORT CProgressInfo
|
|
|
112 |
{
|
|
|
113 |
public:
|
|
|
114 |
CProgressInfo () { m_bDoIn = false; m_lMaxSize = 0; m_bDoHalf = false; m_bSecondHalf = false; m_bDoSecond = false; m_iStatus = -1; m_iDone = 0;}
|
|
|
115 |
|
|
|
116 |
void SetIn ( bool in ) { m_bDoIn = in; }
|
|
|
117 |
void SetMax ( long max ) { m_lMaxSize = max; }
|
|
|
118 |
void DoHalf() { m_bDoHalf = true; m_bSecondHalf = false; }
|
|
|
119 |
void SecondHalf() { m_bSecondHalf = true; }
|
|
|
120 |
void SwitchSecond() { m_bDoSecond = !m_bDoSecond; }
|
|
|
121 |
bool IsSecond() { return m_bDoSecond; }
|
|
|
122 |
void UpdateStatus(int i ) { m_iStatus = i; StatusUpdated(i); }
|
|
|
123 |
int GetStatus() { return m_iStatus; }
|
|
|
124 |
void IncDone(int i) { m_iDone += i; }
|
|
|
125 |
void UpdateProgress ( const long cur, const long max )
|
|
|
126 |
{
|
|
|
127 |
if ( !m_bDoSecond )
|
|
|
128 |
ProgressUpdated(cur, max);
|
|
|
129 |
else
|
|
|
130 |
ProgressUpdated2(cur, max);
|
|
|
131 |
}
|
|
|
132 |
void UpdateFile(C_File *f) { DoingFile(f); }
|
|
|
133 |
void UpdatePackage(SMultiSpkFile *f) { DoingPackage(f); }
|
|
|
134 |
unsigned long *GetDonePointer() { return &m_iDone; }
|
|
|
135 |
unsigned long GetDone() { return m_iDone; }
|
|
|
136 |
void SetDone(int i) { m_iDone = i; }
|
|
|
137 |
|
|
|
138 |
protected:
|
|
|
139 |
virtual void ProgressUpdated ( const long cur, const long max ) = 0;
|
|
|
140 |
virtual void ProgressUpdated2 ( const long cur, const long max ) { };
|
|
|
141 |
virtual void StatusUpdated(int i) { }
|
|
|
142 |
virtual void DoingFile ( C_File *file ) = 0;
|
|
|
143 |
virtual void DoingPackage ( SMultiSpkFile *file ) { }
|
|
|
144 |
|
|
|
145 |
bool m_bDoIn;
|
|
|
146 |
long m_lMaxSize;
|
|
|
147 |
bool m_bDoHalf;
|
|
|
148 |
bool m_bSecondHalf;
|
|
|
149 |
bool m_bDoSecond;
|
|
|
150 |
int m_iStatus;
|
|
|
151 |
|
|
|
152 |
unsigned long m_iDone;
|
|
|
153 |
};
|
|
|
154 |
|
|
|
155 |
|
|
|
156 |
class SPKEXPORT CProgressInfoDone : public CProgressInfo
|
|
|
157 |
{
|
|
|
158 |
public:
|
|
|
159 |
CProgressInfoDone () : CProgressInfo() { m_pOnFile = NULL; m_bDontDoMax = false; m_pOnPackage = NULL; }
|
|
|
160 |
|
|
|
161 |
unsigned long GetMax() { return m_lMaxSize; }
|
|
|
162 |
C_File *GetFile() { return m_pOnFile; }
|
|
|
163 |
SMultiSpkFile *GetPackage() { return m_pOnPackage; }
|
|
|
164 |
|
|
|
165 |
void DoMax() { m_bDontDoMax = false; }
|
|
|
166 |
void DontDoMax() { m_bDontDoMax = true; }
|
|
|
167 |
|
|
|
168 |
protected:
|
|
|
169 |
virtual void ProgressUpdated ( const long cur, const long max ) { m_iDone = cur; m_lMaxSize = max; }
|
|
|
170 |
virtual void DoingFile ( C_File *file );
|
|
|
171 |
virtual void DoingPackage ( SMultiSpkFile *package );
|
|
|
172 |
virtual void StatusUpdated(int i) { if ( i == STATUS_WRITE ) this->DontDoMax(); }
|
|
|
173 |
|
|
|
174 |
SMultiSpkFile *m_pOnPackage;
|
|
|
175 |
C_File *m_pOnFile;
|
|
|
176 |
bool m_bDontDoMax;
|
|
|
177 |
};
|
|
|
178 |
|
|
|
179 |
#include "ansi7zip/7Decoder.h"
|
|
|
180 |
|
|
|
181 |
#define GZ_FLAG_TEXT 1 // 0
|
|
|
182 |
#define GZ_FLAG_HCRC 2 // 1
|
|
|
183 |
#define GZ_FLAG_EXTRA 4 // 2
|
|
|
184 |
#define GZ_FLAG_FILENAME 8 // 3
|
|
|
185 |
#define GZ_FLAG_COMMENT 16 // 4
|
|
|
186 |
#define GZ_FLAG_RES1 32 // 5
|
|
|
187 |
#define GZ_FLAG_RES2 64 // 6
|
|
|
188 |
#define GZ_FLAG_RES3 128 // 7
|
|
|
189 |
|
|
|
190 |
class CProgressInfo2
|
|
|
191 |
{
|
|
|
192 |
public:
|
|
|
193 |
virtual void ProgressPercent ( float percent ) = 0;
|
|
|
194 |
};
|
|
|
195 |
|
|
|
196 |
|
126 |
cycrow |
197 |
Utils::String SPKEXPORT GetFileTypeString ( int type );
|
155 |
cycrow |
198 |
FileType SPKEXPORT GetFileTypeFromString(const Utils::String &type);
|
130 |
cycrow |
199 |
Utils::String SPKEXPORT FormatErrorString (int error, const Utils::String &rest);
|
1 |
cycrow |
200 |
float SPKEXPORT GetLibraryVersion ();
|
|
|
201 |
float SPKEXPORT GetFileFormatVersion ();
|
|
|
202 |
|
|
|
203 |
class CBaseFile;
|
|
|
204 |
class SPKEXPORT C_File
|
|
|
205 |
{
|
|
|
206 |
public:
|
127 |
cycrow |
207 |
static Utils::String GetDirectory(FileType eType, const Utils::String &filename, CBaseFile *file);
|
|
|
208 |
static bool DoesTypeHaveExtraDir(int i);
|
|
|
209 |
|
|
|
210 |
public:
|
|
|
211 |
|
160 |
cycrow |
212 |
void clearUsed () { _iUsed = 0; }
|
|
|
213 |
void incUsed () { ++_iUsed; }
|
1 |
cycrow |
214 |
void DeleteData ();
|
|
|
215 |
// varible setting functions
|
127 |
cycrow |
216 |
void setFileType(FileType t) { m_iFileType = t; }
|
129 |
cycrow |
217 |
void SetFilename(CyString filename);
|
|
|
218 |
void setFilename(const Utils::String &filename);
|
130 |
cycrow |
219 |
void SetName(CyString name) { _sName = name.ToString(); }
|
|
|
220 |
void setName(const Utils::String &name) { _sName = name; }
|
131 |
cycrow |
221 |
void SetDir(CyString dir) { _sDir = dir.ToString(); }
|
|
|
222 |
void setDir(const Utils::String &dir) { _sDir = dir; }
|
1 |
cycrow |
223 |
void SetCreationTime ( time_t time ) { m_tTime = time; }
|
|
|
224 |
void SetFileSize ( long size ) { m_lSize = size; }
|
|
|
225 |
void SetDataSize ( long size ) { m_lDataSize = size; }
|
|
|
226 |
void SetUncompressedDataSize ( long size ) { m_lUncomprDataSize = size; }
|
|
|
227 |
void SetDataCompression ( int c ) { m_iDataCompression = c; }
|
|
|
228 |
void SetShared ( bool b ) { m_bShared = b; }
|
|
|
229 |
void SetSigned ( bool b ) { m_bSigned = b; }
|
129 |
cycrow |
230 |
void SetFullDir(CyString dir) { _sFullDir = dir.ToString(); }
|
|
|
231 |
void setFullDir(const Utils::String &dir) { _sFullDir = dir; }
|
160 |
cycrow |
232 |
void setInMod (const Utils::String &s) { _sInMod = s; }
|
1 |
cycrow |
233 |
void SetCompressedToFile ( bool b ) { m_bCompressedToFile = b; }
|
|
|
234 |
void SetData(const unsigned char *data, size_t size) { m_sData = (unsigned char *)data, m_lDataSize = (long)size; }
|
43 |
cycrow |
235 |
void copyData(const unsigned char *data, size_t size);
|
1 |
cycrow |
236 |
|
|
|
237 |
// get functions
|
160 |
cycrow |
238 |
int getUsed () { return _iUsed; }
|
1 |
cycrow |
239 |
int GetLastError () { return m_iLastError; }
|
127 |
cycrow |
240 |
int GetFileType() { return m_iFileType; }
|
|
|
241 |
FileType fileType() { return m_iFileType; }
|
158 |
cycrow |
242 |
//CyString GetFilename() { return _sName; }
|
130 |
cycrow |
243 |
const Utils::String &filename() const { return _sName; }
|
174 |
cycrow |
244 |
CyString GetFullFilename() { return CyString(_sFullDir.toString()) + "/" + CyString(_sName.toString()); }
|
130 |
cycrow |
245 |
Utils::String fullFilename() { return _sFullDir + "/" + _sName; }
|
1 |
cycrow |
246 |
long GetSize () { return m_lSize; }
|
|
|
247 |
time_t GetCreationTime () { return m_tTime; }
|
174 |
cycrow |
248 |
CyString GetName() { return _sName.toString(); }
|
130 |
cycrow |
249 |
const Utils::String &name() { return _sName; }
|
174 |
cycrow |
250 |
CyString GetDir() { return _sDir.toString(); }
|
131 |
cycrow |
251 |
const Utils::String &dir() { return _sDir; }
|
134 |
cycrow |
252 |
Utils::String dataSizeString() const;
|
1 |
cycrow |
253 |
CyString GetUncompressedSizeString ();
|
121 |
cycrow |
254 |
CyString GetDirectory(CBaseFile *spkfile);
|
|
|
255 |
Utils::String getDirectory(CBaseFile *spkfile) const;
|
1 |
cycrow |
256 |
int GetVersion () { return m_iVersion; }
|
|
|
257 |
time_t GetLastModified() { return m_tTime; }
|
134 |
cycrow |
258 |
Utils::String fileTypeString() const { return ::GetFileTypeString(m_iFileType); }
|
|
|
259 |
CyString GetFileTypeString() { return ::GetFileTypeString(m_iFileType); }
|
1 |
cycrow |
260 |
CyString GetCreationTimeString ();
|
160 |
cycrow |
261 |
const Utils::String &getTempFile () const { return _sTmpFile; }
|
129 |
cycrow |
262 |
CyString GetFullDir() { return _sFullDir; }
|
|
|
263 |
const Utils::String fullDir() const { return _sFullDir; }
|
131 |
cycrow |
264 |
CyString GetBaseName();
|
|
|
265 |
Utils::String baseName() const;
|
127 |
cycrow |
266 |
CyString GetOriginalName() { return CyString(_sOriginalName); }
|
160 |
cycrow |
267 |
const Utils::String &originalName() const { return _sOriginalName; }
|
|
|
268 |
const Utils::String &getInMod() const { return _sInMod; }
|
|
|
269 |
const Utils::String &getSignature() { if ( !m_bUpdatedSignature ) updateSignature(); return _sSignature; }
|
|
|
270 |
void updateSignature();
|
130 |
cycrow |
271 |
void ChangeBaseName(CyString b) { _sName = CyString(b + "." + this->GetFileExt()).ToString(); }
|
|
|
272 |
void changeBaseName(const Utils::String &b) { _sName = b + "." + this->fileExt(); }
|
1 |
cycrow |
273 |
bool RenameScript(CyString baseName);
|
160 |
cycrow |
274 |
bool isInMod() { return !_sInMod.empty(); }
|
1 |
cycrow |
275 |
|
130 |
cycrow |
276 |
void FixOriginalName() { _sOriginalName = _sName; }
|
127 |
cycrow |
277 |
void SetOriginalName(const Utils::String &name) { _sOriginalName = name; }
|
1 |
cycrow |
278 |
|
126 |
cycrow |
279 |
bool isFileInAddon() const;
|
121 |
cycrow |
280 |
bool IsFakePatch () const;
|
130 |
cycrow |
281 |
bool isAutoTextFile();
|
1 |
cycrow |
282 |
int GetTextFileID(CyString name = NullString);
|
|
|
283 |
bool IsCompressedToFile () { return m_bCompressedToFile; }
|
|
|
284 |
bool CompareNew ( C_File *file );
|
130 |
cycrow |
285 |
CyString GetFileExt() { return _sName.token(".", -1); }
|
|
|
286 |
Utils::String fileExt() const;
|
|
|
287 |
bool CheckFileExt ( const CyString &ext ) {
|
|
|
288 |
if ( GetFileExt().Compare(ext) ) return true; return false;
|
|
|
289 |
}
|
1 |
cycrow |
290 |
CyString ChangeFileExt(CyString ext);
|
130 |
cycrow |
291 |
const Utils::String &changeFileExt(const Utils::String &ext);
|
1 |
cycrow |
292 |
bool CheckPackedExtension();
|
125 |
cycrow |
293 |
bool shouldCheckBaseName() const;
|
1 |
cycrow |
294 |
|
|
|
295 |
int GetCompressionType () { return m_iDataCompression; }
|
|
|
296 |
long GetDataSize () { return m_lDataSize; }
|
|
|
297 |
// returns the Uncompressed Data size, based on how the file is loaded, ie view data, view pointer, etc
|
|
|
298 |
long GetUncompressedDataSize ()
|
|
|
299 |
{
|
|
|
300 |
if ( m_lUncomprDataSize )
|
|
|
301 |
return m_lUncomprDataSize;
|
|
|
302 |
if ( m_lSize )
|
|
|
303 |
return m_lSize;
|
|
|
304 |
return m_lDataSize;
|
|
|
305 |
}
|
128 |
cycrow |
306 |
CyString GetNameDirectory(CBaseFile *spkfile);
|
|
|
307 |
Utils::String getNameDirectory(CBaseFile *spkfile) const;
|
1 |
cycrow |
308 |
|
127 |
cycrow |
309 |
unsigned int game() const;
|
129 |
cycrow |
310 |
bool isForGame(int game) const;
|
|
|
311 |
int getForSingleGame() const;
|
127 |
cycrow |
312 |
void setGame(unsigned int i);
|
|
|
313 |
//TODO
|
|
|
314 |
unsigned int GetGame() const { return _iGame; }
|
1 |
cycrow |
315 |
|
|
|
316 |
unsigned char *GetData () { return m_sData; }
|
|
|
317 |
bool IsShared () { return m_bShared; }
|
|
|
318 |
bool IsSigned () { return m_bSigned; }
|
|
|
319 |
bool UpdateSigned();
|
|
|
320 |
bool ReadSignedFile();
|
|
|
321 |
|
|
|
322 |
// file reading functions
|
|
|
323 |
long ReadFileSize ();
|
|
|
324 |
time_t ReadLastModified ();
|
129 |
cycrow |
325 |
bool readFromFile(const Utils::String filename);
|
1 |
cycrow |
326 |
bool ReadFromFile (CyString filename);
|
|
|
327 |
bool ReadFromFile ();
|
58 |
cycrow |
328 |
bool readFromFile(CFileIO &File);
|
|
|
329 |
bool readFromFile(CFileIO &File, int lSize, bool bDoSize = true);
|
|
|
330 |
//bool readFromFile(std::fstream &stream, long lSize, bool bDoSize = true );
|
1 |
cycrow |
331 |
bool ReadFromData ( char *data, long size );
|
|
|
332 |
int ReadScriptVersion ();
|
129 |
cycrow |
333 |
CyString GetFilePointer();
|
88 |
cycrow |
334 |
Utils::String filePointer() const;
|
127 |
cycrow |
335 |
bool isExternalFile() const;
|
1 |
cycrow |
336 |
|
|
|
337 |
// file writing functions
|
129 |
cycrow |
338 |
bool writeToDir(const Utils::String &dir, CBaseFile *, bool = true, const Utils::String &appendDir = Utils::String::Null(), unsigned char * = NULL, long = 0);
|
|
|
339 |
bool writeToFile(const Utils::String &filename, unsigned char * = NULL, long = 0);
|
|
|
340 |
bool writeFilePointer(unsigned char *cData = NULL, long len = 0);
|
1 |
cycrow |
341 |
|
|
|
342 |
// file compression functions
|
|
|
343 |
unsigned char *CompressToData(int compressionType, unsigned long *outSize, CProgressInfo *progress = NULL, int level = DEFAULT_COMPRESSION_LEVEL);
|
|
|
344 |
bool UncompressToFile ( CyString, CBaseFile *, bool = true, CProgressInfo * = NULL );
|
|
|
345 |
bool ChangeCompression(int compresstyp, CProgressInfo *progress);
|
|
|
346 |
bool CompressData ( int compressionType, CProgressInfo * = NULL, int level = DEFAULT_COMPRESSION_LEVEL );
|
|
|
347 |
bool CompressFile ( CProgressInfo * = NULL );
|
|
|
348 |
bool UncompressData ( CProgressInfo * = NULL );
|
|
|
349 |
unsigned char *UncompressData ( long *size, CProgressInfo * = NULL );
|
|
|
350 |
|
|
|
351 |
void CopyData(C_File *, bool includeData = true);
|
|
|
352 |
|
|
|
353 |
bool IsDisabled () { return m_bDisabled; }
|
|
|
354 |
void SetDisabled ( bool b ) { m_bDisabled = b; }
|
|
|
355 |
|
|
|
356 |
void MarkSkip () { m_bSkip = true; }
|
|
|
357 |
bool Skip () { return m_bSkip; }
|
|
|
358 |
bool CheckPCK ();
|
|
|
359 |
bool CheckValidFilePointer ();
|
|
|
360 |
unsigned char *UnPCKFile ( size_t *len );
|
|
|
361 |
bool MatchFile ( C_File *file );
|
|
|
362 |
bool UnPCKFile ();
|
|
|
363 |
bool PCKFile();
|
|
|
364 |
|
|
|
365 |
void SetPos(int i) { m_iPos = i; }
|
|
|
366 |
int GetPos() { return m_iPos; }
|
|
|
367 |
|
115 |
cycrow |
368 |
unsigned char *BobDecompile(size_t *size);
|
1 |
cycrow |
369 |
bool BobDecompile();
|
|
|
370 |
bool BodCompile();
|
|
|
371 |
|
|
|
372 |
// contructor/decontructor
|
|
|
373 |
C_File();
|
127 |
cycrow |
374 |
C_File(const Utils::String &filename);
|
1 |
cycrow |
375 |
virtual ~C_File();
|
|
|
376 |
|
|
|
377 |
protected:
|
|
|
378 |
static int m_iTempNum; // Used when creating temp files, allows new tmp files without overrighing used ones
|
|
|
379 |
|
|
|
380 |
// private functions
|
|
|
381 |
void Reset();
|
129 |
cycrow |
382 |
Utils::String _getFullFileToDir(const Utils::String &dir, bool includedir, CBaseFile *file) const;
|
1 |
cycrow |
383 |
|
130 |
cycrow |
384 |
Utils::String _sName; // just the filename
|
131 |
cycrow |
385 |
Utils::String _sDir; // the extra dir (only for extras)
|
160 |
cycrow |
386 |
Utils::String _sInMod; // in a mod files
|
|
|
387 |
Utils::String _sSignature;
|
1 |
cycrow |
388 |
|
|
|
389 |
// file pointer varibles
|
129 |
cycrow |
390 |
Utils::String _sFullDir; // the full dir path of the file (This is used for file pointers when not loaded data in file)
|
1 |
cycrow |
391 |
long m_lSize; // size of current file pointer
|
|
|
392 |
|
|
|
393 |
// Main file varibles
|
|
|
394 |
int m_iVersion; // used when reading script versions
|
|
|
395 |
bool m_bSigned; // signed status of file, installer only, read from file
|
|
|
396 |
bool m_bShared; // is file a marked shared file (Not used much anymore)
|
160 |
cycrow |
397 |
int _iUsed; // used by installer, number of plugins that uses the file
|
1 |
cycrow |
398 |
time_t m_tTime; // Creation time of the file
|
|
|
399 |
|
|
|
400 |
// File data varibles
|
|
|
401 |
long m_lDataSize; // size of the data stream in what ever compression is set
|
|
|
402 |
long m_lUncomprDataSize; // size of stream if it was uncompressed
|
|
|
403 |
unsigned char *m_sData; // stores the file data if loaded in memory
|
|
|
404 |
int m_iDataCompression; // the current compression of m_sData
|
|
|
405 |
|
127 |
cycrow |
406 |
FileType m_iFileType; // type if file, ie Script, Text, etc
|
1 |
cycrow |
407 |
|
|
|
408 |
bool m_bUsedMalloc; // malloc type of m_sData, so it can use with free() or delete
|
160 |
cycrow |
409 |
Utils::String _sTmpFile;
|
1 |
cycrow |
410 |
|
|
|
411 |
bool m_bCompressedToFile;
|
|
|
412 |
|
|
|
413 |
bool m_bSkip;
|
|
|
414 |
bool m_bLoaded;
|
|
|
415 |
bool m_bDisabled; // if the file has be disabled
|
|
|
416 |
bool m_bUpdatedSignature;
|
|
|
417 |
|
|
|
418 |
int m_iPos;
|
127 |
cycrow |
419 |
unsigned int _iGame;
|
1 |
cycrow |
420 |
|
127 |
cycrow |
421 |
Utils::String _sOriginalName;
|
1 |
cycrow |
422 |
|
|
|
423 |
int m_iLastError;
|
|
|
424 |
bool m_bDontDeleteData; // fix for bad data deleteion
|
|
|
425 |
};
|
|
|
426 |
|
|
|
427 |
#endif // !defined(AFX_FILE_H__A0C15B81_4FD1_40D7_8EE8_2ECF5824BB8B__INCLUDED_)
|