Subversion Repositories spk

Rev

Rev 126 | Rev 128 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 126 Rev 127
Line 80... Line 80...
80
#define DEFAULT_COMPRESSION_LEVEL	5
80
#define DEFAULT_COMPRESSION_LEVEL	5
81
 
81
 
82
#include "spkdefines.h"
82
#include "spkdefines.h"
83
#include "File_IO.h"
83
#include "File_IO.h"
84
#include "zlib/zlib.h"
84
#include "zlib/zlib.h"
-
 
85
#include "enums.h"
85
//#include "x2bc/x2bc_common/bob_dom.h"
86
//#include "x2bc/x2bc_common/bob_dom.h"
86
//#include "x2bc/x2bc_common/bob_realfile_stream.h"
87
//#include "x2bc/x2bc_common/bob_realfile_stream.h"
87
 
88
 
88
// compression type
89
// compression type
89
enum { SPKCOMPRESS_NONE, SPKCOMPRESS_ZLIB, SPKCOMPRESS_7ZIP, SPKCOMPRESS_LZMA, SPKCOMPRESS_BEST };
90
enum { SPKCOMPRESS_NONE, SPKCOMPRESS_ZLIB, SPKCOMPRESS_7ZIP, SPKCOMPRESS_LZMA, SPKCOMPRESS_BEST };
90
// file type
-
 
91
typedef enum {
-
 
92
	FILETYPE_SCRIPT,
-
 
93
	FILETYPE_TEXT,
-
 
94
	FILETYPE_README,
-
 
95
	FILETYPE_MAP,
-
 
96
	FILETYPE_MOD,
-
 
97
	FILETYPE_UNINSTALL,
-
 
98
	FILETYPE_SOUND,
-
 
99
	FILETYPE_EXTRA,
-
 
100
	FILETYPE_SCREEN,
-
 
101
	FILETYPE_MISSION,
-
 
102
	FILETYPE_ADVERT,
-
 
103
	FILETYPE_SHIPOTHER,
-
 
104
	FILETYPE_SHIPMODEL,
-
 
105
	FILETYPE_SHIPSCENE,
-
 
106
	FILETYPE_COCKPITSCENE,
-
 
107
	FILETYPE_MAX,
-
 
108
	FILETYPE_BACKUP 
-
 
109
} FileType;
-
 
110
 
91
 
111
// special file types used internally
92
// special file types used internally
112
enum {
93
enum {
113
	FILETYPE_SCRIPT_UNINSTALL		= 1000,
94
	FILETYPE_SCRIPT_UNINSTALL		= 1000,
114
};
95
};
Line 212... Line 193...
212
	virtual void ProgressPercent ( float percent ) = 0;
193
	virtual void ProgressPercent ( float percent ) = 0;
213
};
194
};
214
 
195
 
215
 
196
 
216
Utils::String SPKEXPORT GetFileTypeString ( int type );
197
Utils::String SPKEXPORT GetFileTypeString ( int type );
217
int		 SPKEXPORT GetFileTypeFromString ( CyString type );
198
FileType SPKEXPORT GetFileTypeFromString ( CyString type );
218
CyString SPKEXPORT FormatErrorString ( int error, CyString rest );
199
CyString SPKEXPORT FormatErrorString ( int error, CyString rest );
219
float	 SPKEXPORT GetLibraryVersion ();
200
float	 SPKEXPORT GetLibraryVersion ();
220
float	 SPKEXPORT GetFileFormatVersion ();
201
float	 SPKEXPORT GetFileFormatVersion ();
221
 
202
 
222
class CBaseFile;
203
class CBaseFile;
223
class SPKEXPORT C_File
204
class SPKEXPORT C_File
224
{
205
{
225
public:
206
public:
-
 
207
	static Utils::String GetDirectory(FileType eType, const Utils::String &filename, CBaseFile *file);
226
	static bool DoesTypeHaveExtraDir(int i)
208
	static bool DoesTypeHaveExtraDir(int i);
227
	{
209
 
228
		switch (i)
210
public:
229
		{
-
 
230
			case FILETYPE_EXTRA:
-
 
231
			case FILETYPE_SHIPSCENE:
-
 
232
			case FILETYPE_COCKPITSCENE:
-
 
233
			case FILETYPE_SHIPMODEL:
-
 
234
			case FILETYPE_SHIPOTHER:
-
 
235
				return true;
-
 
236
		}
-
 
237
		return false;
-
 
238
	}
211
 
239
	void ClearUsed () { m_iUsed = 0; }
212
	void ClearUsed () { m_iUsed = 0; }
240
	void IncUsed () { ++m_iUsed; }
213
	void IncUsed () { ++m_iUsed; }
241
	void DeleteData ();
214
	void DeleteData ();
242
	// varible setting functions
215
	// varible setting functions
243
	void SetFileType ( int t ) { m_iFileType = t; }
216
	void SetFileType(FileType t) { m_iFileType = t; }
-
 
217
	void setFileType(FileType t) { m_iFileType = t; }
244
	void SetFilename ( CyString filename );
218
	void SetFilename ( CyString filename );
245
	void SetName ( CyString name ) { m_sName = name; }
219
	void SetName ( CyString name ) { m_sName = name; }
246
	void SetDir ( CyString dir ) { m_sDir = dir; }
220
	void SetDir ( CyString dir ) { m_sDir = dir; }
247
	void SetCreationTime ( time_t time ) { m_tTime = time; }
221
	void SetCreationTime ( time_t time ) { m_tTime = time; }
248
	void SetFileSize ( long size ) { m_lSize = size; }
222
	void SetFileSize ( long size ) { m_lSize = size; }
Line 258... Line 232...
258
	void copyData(const unsigned char *data, size_t size);
232
	void copyData(const unsigned char *data, size_t size);
259
 
233
 
260
	// get functions
234
	// get functions
261
	int GetUsed () { return m_iUsed; }
235
	int GetUsed () { return m_iUsed; }
262
	int GetLastError () { return m_iLastError; }
236
	int GetLastError () { return m_iLastError; }
263
	int GetFileType () { return m_iFileType; }
237
	int GetFileType() { return m_iFileType; }
-
 
238
	FileType fileType() { return m_iFileType; }
264
	CyString GetFilename () { return m_sName; }
239
	CyString GetFilename () { return m_sName; }
265
	CyString GetFullFilename () { return m_sFullDir + "/" + m_sName; }
240
	CyString GetFullFilename () { return m_sFullDir + "/" + m_sName; }
266
	long GetSize () { return m_lSize; }
241
	long GetSize () { return m_lSize; }
267
	time_t GetCreationTime () { return m_tTime; }
242
	time_t GetCreationTime () { return m_tTime; }
268
	CyString GetName () { return m_sName; }
243
	CyString GetName () { return m_sName; }
Line 276... Line 251...
276
	CyString GetFileTypeString () { return ::GetFileTypeString ( m_iFileType ); }
251
	CyString GetFileTypeString () { return ::GetFileTypeString ( m_iFileType ); }
277
	CyString GetCreationTimeString ();
252
	CyString GetCreationTimeString ();
278
	CyString GetTempFile () { return m_sTmpFile; }
253
	CyString GetTempFile () { return m_sTmpFile; }
279
	CyString GetFullDir () { return m_sFullDir; }
254
	CyString GetFullDir () { return m_sFullDir; }
280
	CyString GetBaseName ();
255
	CyString GetBaseName ();
281
	CyString GetOriginalName() { return m_sOriginalName; }
256
	CyString GetOriginalName() { return CyString(_sOriginalName); }
-
 
257
	const Utils::String &originalName() { return _sOriginalName; }
282
	CyString GetInMod() { return m_sInMod; }
258
	CyString GetInMod() { return m_sInMod; }
283
	CyString GetSignature() { if ( !m_bUpdatedSignature ) UpdateSignature(); return m_sSignature; }
259
	CyString GetSignature() { if ( !m_bUpdatedSignature ) UpdateSignature(); return m_sSignature; }
284
	void UpdateSignature();
260
	void UpdateSignature();
285
	void ChangeBaseName(CyString b) { m_sName = b + "." + this->GetFileExt(); }
261
	void ChangeBaseName(CyString b) { m_sName = b + "." + this->GetFileExt(); }
286
	bool RenameScript(CyString baseName);
262
	bool RenameScript(CyString baseName);
287
	bool IsInMod() { return !m_sInMod.Empty(); }
263
	bool IsInMod() { return !m_sInMod.Empty(); }
288
 
264
 
289
	void FixOriginalName() { m_sOriginalName = m_sName; }
265
	void FixOriginalName() { _sOriginalName = m_sName.ToString(); }
290
	void SetOriginalName(CyString name) { m_sOriginalName = name; }
266
	void SetOriginalName(const Utils::String &name) { _sOriginalName = name; }
291
 
267
 
292
	bool isFileInAddon() const;
268
	bool isFileInAddon() const;
293
	bool IsFakePatch () const;
269
	bool IsFakePatch () const;
294
	bool IsAutoTextFile();
270
	bool IsAutoTextFile();
295
	int  GetTextFileID(CyString name = NullString);
271
	int  GetTextFileID(CyString name = NullString);
Line 312... Line 288...
312
			return m_lSize;
288
			return m_lSize;
313
		return m_lDataSize;
289
		return m_lDataSize;
314
	}
290
	}
315
	CyString GetNameDirectory ( CBaseFile *spkfile );
291
	CyString GetNameDirectory ( CBaseFile *spkfile );
316
 
292
 
-
 
293
	unsigned int game() const;
317
	int  GetGame() { return m_iGame; }
294
	void setGame(unsigned int i);
-
 
295
	//TODO
318
	void SetGame(int i) { m_iGame = i; }
296
	unsigned int GetGame() const { return _iGame;  }
319
 
297
 
320
	unsigned char *GetData () { return m_sData; }
298
	unsigned char *GetData () { return m_sData; }
321
	bool IsShared () { return m_bShared; }
299
	bool IsShared () { return m_bShared; }
322
	bool IsSigned () { return m_bSigned; }
300
	bool IsSigned () { return m_bSigned; }
323
	bool UpdateSigned();
301
	bool UpdateSigned();
Line 333... Line 311...
333
	//bool readFromFile(std::fstream &stream, long lSize, bool bDoSize = true );
311
	//bool readFromFile(std::fstream &stream, long lSize, bool bDoSize = true );
334
	bool ReadFromData ( char *data, long size );
312
	bool ReadFromData ( char *data, long size );
335
	int ReadScriptVersion ();
313
	int ReadScriptVersion ();
336
	CyString GetFilePointer ();
314
	CyString GetFilePointer ();
337
	Utils::String filePointer() const;
315
	Utils::String filePointer() const;
-
 
316
	bool isExternalFile() const;
338
 
317
 
339
	// file writing functions
318
	// file writing functions
340
	bool WriteToFile ( CyString filename, unsigned char * = NULL, long = 0 );
319
	bool WriteToFile ( CyString filename, unsigned char * = NULL, long = 0 );
341
	bool WriteToDir ( CyString &dir, CBaseFile *, bool = true, CyString appendDir = NullString, unsigned char * = NULL, long = 0 );
320
	bool WriteToDir ( CyString &dir, CBaseFile *, bool = true, CyString appendDir = NullString, unsigned char * = NULL, long = 0 );
342
	bool WriteFilePointer ( unsigned char *cData = NULL, long len = 0 );
321
	bool WriteFilePointer ( unsigned char *cData = NULL, long len = 0 );
Line 371... Line 350...
371
	bool BobDecompile();
350
	bool BobDecompile();
372
	bool BodCompile();
351
	bool BodCompile();
373
 
352
 
374
	// contructor/decontructor
353
	// contructor/decontructor
375
	C_File();
354
	C_File();
376
	C_File ( CyString filename );
355
	C_File(const Utils::String &filename);
377
	C_File ( const char *filename );
-
 
378
	virtual ~C_File();
356
	virtual ~C_File();
379
 
357
 
380
protected:
358
protected:
381
	static int m_iTempNum; // Used when creating temp files, allows new tmp files without overrighing used ones
359
	static int m_iTempNum; // Used when creating temp files, allows new tmp files without overrighing used ones
382
 
360
 
Line 404... Line 382...
404
	long	m_lDataSize;  // size of the data stream in what ever compression is set
382
	long	m_lDataSize;  // size of the data stream in what ever compression is set
405
	long	m_lUncomprDataSize; // size of stream if it was uncompressed
383
	long	m_lUncomprDataSize; // size of stream if it was uncompressed
406
	unsigned char   *m_sData;  // stores the file data if loaded in memory
384
	unsigned char   *m_sData;  // stores the file data if loaded in memory
407
	int		m_iDataCompression; // the current compression of m_sData
385
	int		m_iDataCompression; // the current compression of m_sData
408
 
386
 
409
	int     m_iFileType; // type if file, ie Script, Text, etc
387
	FileType m_iFileType; // type if file, ie Script, Text, etc
410
 
388
 
411
	bool    m_bUsedMalloc; // malloc type of m_sData, so it can use with free() or delete
389
	bool    m_bUsedMalloc; // malloc type of m_sData, so it can use with free() or delete
412
	CyString	m_sTmpFile;
390
	CyString	m_sTmpFile;
413
 
391
 
414
	bool	m_bCompressedToFile;
392
	bool	m_bCompressedToFile;
Line 417... Line 395...
417
	bool	m_bLoaded;
395
	bool	m_bLoaded;
418
	bool	m_bDisabled;	// if the file has be disabled
396
	bool	m_bDisabled;	// if the file has be disabled
419
	bool	m_bUpdatedSignature;
397
	bool	m_bUpdatedSignature;
420
 
398
 
421
	int		m_iPos;
399
	int		m_iPos;
422
	int		m_iGame;
400
	unsigned int _iGame;
423
 
401
 
424
	CyString	m_sOriginalName;
402
	Utils::String _sOriginalName;
425
 
403
 
426
	int m_iLastError;
404
	int m_iLastError;
427
	bool	m_bDontDeleteData; // fix for bad data deleteion
405
	bool	m_bDontDeleteData; // fix for bad data deleteion
428
};
406
};
429
 
407