Subversion Repositories spk

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6 cycrow 1
// BaseFile.h: interface for the CBaseFile class.
2
//
3
//////////////////////////////////////////////////////////////////////
4
 
5
#ifndef __BASEFILE_H__
6
#define __BASEFILE_H__
7
 
8
#if _MSC_VER > 1000
9
#pragma once
10
#endif // _MSC_VER > 1000
11
 
12
#include "lists.h"
13
#include "StringList.h"
14
#include "File.h"
8 cycrow 15
#include "Utils/String.h"
6 cycrow 16
 
17
#define GAME_ALL			0
18
#define GAME_X2				1
19
#define GAME_X3				2
20
#define GAME_X3TC			3
21
#define GAME_X3AP			4
22
#define GAME_XREBIRTH		5
23
#define GAME_MAX			(GAME_XREBIRTH)
24
 
25
#define FILEVERSION 4.20f
20 cycrow 26
 
6 cycrow 27
#define WRITECHUNK		50000
28
 
29
class CPackages;
30
 
31
enum {
32
	READFLAG_NONE = 0,
33
	READFLAG_NOUNCOMPRESS = 1
34
};
35
 
36
enum {SPKFILE_INVALID, SPKFILE_SINGLE, SPKFILE_MULTI, SPKFILE_SINGLESHIP, SPKFILE_OLD, SPKFILE_BASE};
37
enum {SPKREAD_ALL, SPKREAD_NODATA, SPKREAD_VALUES, SPKREAD_HEADER};
38
enum {DELETESTATE_NONE, DELETESTATE_WAITING, DELETESTATE_DONE};
39
enum {SPKINSTALL_CREATEDIRECTORY, SPKINSTALL_CREATEDIRECTORY_FAIL, SPKINSTALL_WRITEFILE, SPKINSTALL_WRITEFILE_FAIL, SPKINSTALL_DELETEFILE, SPKINSTALL_DELETEFILE_FAIL,
40
		SPKINSTALL_SKIPFILE, SPKINSTALL_REMOVEDIR, SPKINSTALL_ENABLEFILE, SPKINSTALL_DISABLEFILE, SPKINSTALL_ENABLEFILE_FAIL, SPKINSTALL_DISABLEFILE_FAIL,
41
		SPKINSTALL_UNINSTALL_MOVE, SPKINSTALL_UNINSTALL_COPY, SPKINSTALL_UNINSTALL_MOVE_FAIL, SPKINSTALL_UNINSTALL_COPY_FAIL, SPKINSTALL_UNINSTALL_REMOVE, SPKINSTALL_UNINSTALL_REMOVE_FAIL,
42
		SPKINSTALL_ORIGINAL_BACKUP, SPKINSTALL_ORIGINAL_RESTORE, SPKINSTALL_ORIGINAL_BACKUP_FAIL, SPKINSTALL_ORIGINAL_RESTORE_FAIL, SPKINSTALL_FAKEPATCH, SPKINSTALL_FAKEPATCH_FAIL, 
43
		SPKINSTALL_MISSINGFILE, SPKINSTALL_SHARED, SPKINSTALL_SHARED_FAIL, SPKINSTALL_ORPHANED, SPKINSTALL_ORPHANED_FAIL, SPKINSTALL_UNCOMPRESS_FAIL, SPKINSTALL_AUTOTEXT, SPKINSTALL_AUTOTEXT_FAIL
44
};
45
 
46
enum {PACKAGETYPE_NORMAL, PACKAGETYPE_LIBRARY, PACKAGETYPE_CUSTOMSTART, PACKAGETYPE_PATCH, PACKAGETYPE_UPDATE, PACKAGETYPE_MOD, PACKAGETYPE_SHIP, PACKAGETYPE_FAKEPATCH};
47
enum {PLUGIN_NORMAL, PLUGIN_STABLE, PLUGIN_EXPERIMENTAL, PLUGIN_CHEAT, PLUGIN_MOD}; // filters for browsing packages
48
 
49
enum {TYPE_BASE, TYPE_SPK, TYPE_XSP, TYPE_ARCHIVE};
50
 
51
// text pages
52
#define TEXTPAGE_RACE		1266
53
#define TEXTPAGE_OBJECTS	17
54
#define TEXTPAGE_CLASS		2006
55
#define TEXTPAGE_CARGOCLASS	1999
56
 
57
 
58
// spk header struct
59
tstruct SSPKHeader {
60
	SSPKHeader () { fVersion = 0; iValueCompression = lValueCompressSize = 0; }
61
	float fVersion;
62
	int iValueCompression;
63
	unsigned long lValueCompressSize;
64
} SSPKHeader;
65
 
66
tstruct SNeededLibrary {
67
	CyString	sName;
68
	CyString	sAuthor;
69
	CyString	sMinVersion;
70
} SNeededLibrary;
71
 
72
tstruct SGameCompat {
73
	int			iGame;
74
	CyString	sVersion;
75
	int			iVersion;
76
} SGameCompat;
77
 
78
tstruct SSPKHeader2 {
79
	SSPKHeader2 () { iNumFiles = 0; lSize = 0; lFullSize = 0; }
80
	int iNumFiles;
81
	long lSize;
82
	long lFullSize;
83
	int iFileCompression;
84
	int iDataCompression;
85
} SSPKHeader2;
86
 
87
tstruct SInstallText {
88
	int		iLanguage;
89
	CyString	sBefore;
90
	CyString	sAfter;
91
} SInstallText;
92
 
93
typedef struct SNames {
94
	int iLanguage;
95
	CyString sName;
96
} SNames;
97
 
98
 
99
class SPKEXPORT CBaseFile 
100
{
101
public:
13 cycrow 102
	static Utils::String ConvertGameToString(int game);
103
	static int GetGameFromString(const Utils::String &game);
6 cycrow 104
	static CyString ErrorString(int error, CyString errorStr = NullString);
105
 
106
	CBaseFile();
107
	virtual ~CBaseFile();
108
 
109
	// Get basic Settings
110
	CyString GetName ()			{ return m_sName; }
111
	CyString GetVersion ()		{ return m_sVersion; }
112
	CyString GetAuthor ()		{ return m_sAuthor; }
113
	CyString GetWebSite ()		{ return m_sWebSite; }
114
	CyString GetWebAddress ()	{ return m_sWebAddress; }
115
	CyString GetEmail ()		{ return m_sEmail; }
116
	CyString GetCreationDate ()	{ return m_sCreationDate; }
117
	CyString GetDescription ()	{ return m_sDescription; }
118
	CyString GetForumLink ()	{ return m_sForumLink; }
119
	virtual CyString GetFullPackageName(int language, CyString byString) { return GetFullPackageName(language, true, byString); }
120
	virtual CyString GetFullPackageName(int language, bool includeVersion = true, CyString byString = "by") 
121
	{ 
122
		CyString p;
123
		if ( language == -1 )
124
			p = m_sName;
125
		else
126
			p = GetLanguageName(language);
127
		if ( includeVersion )
128
		{
129
			p += " V";
130
			p += m_sVersion;
131
		}
132
		p += " ";
133
		p += byString + " " + m_sAuthor;
134
		return p;
135
	}
136
	CLinkList<C_File> *GetFileList() { return &m_lFiles; }
137
	C_File *GetIcon () { return m_pIconFile; }
138
	CyString GetIconExt () { return m_sIconExt; }
139
	CyString GetNameValidFile ();
140
	int GetDataCompression () { return m_SHeader2.iDataCompression; }
141
	float GetFileVersion () { return m_SHeader.fVersion; }
142
	long GetFullFileSize ();
143
	CyString GetLanguageName ( int lang );
144
	virtual CyString GetFullPackageName(CyString format, int lang);
145
	CyString GetAutosaveName();
146
	void SetAutosaveName() { m_sFilename = GetAutosaveName(); }
147
	SGameCompat *GetGameCompatability(int game);
148
	bool RemoveGameCompatability(int game);
149
	void AddGameCompatability(int game, CyString version);
150
	bool CheckGameCompatability(int game);
151
	bool CheckGameVersionCompatability(int game, CyString sVersion, int iVersion);
152
	bool AnyGameCompatability() { return !m_lGames.empty(); }
153
 
154
	bool AnyWebMirrors() { return !m_lMirrors.Empty(); }
155
	CyStringList *GetWebMirrors() { return &m_lMirrors; }
156
	int GetMaxWebMirrors() { return m_lMirrors.Count(); }
157
	CyString GetWebMirror(int i) { if ( i >= 0 && i < m_lMirrors.Count() ) return m_lMirrors.StringAt(i); return NullString; }
158
	void ClearWebMirrors() { m_lMirrors.Clear(); }
159
 
160
	CLinkList<C_File> *GetFileList(int type);
13 cycrow 161
	C_File *GetFirstFile(int type) const;
162
	C_File *GetNextFile(C_File *prev) const;
163
	C_File *GetPrevFile(C_File *next) const;
6 cycrow 164
 
165
	int GetRecommended() { return m_iRecommended; }
166
	int GetEaseOfUse() { return m_iEaseOfUse; }
167
	int GetGameChanging() { return m_iGameChanging; }
168
 
14 cycrow 169
	virtual Utils::String CreateValuesLine () const;
6 cycrow 170
 
14 cycrow 171
	virtual bool LoadPackageData(const Utils::String &sFfirst, const Utils::String &sRest);
6 cycrow 172
	virtual bool GeneratePackagerScript(bool wildcard, CyStringList *list, bool datafile = false);
173
	virtual bool GeneratePackagerScriptFile(bool wildcard, CyStringList *list);
174
 
175
	void ConvertNormalMod(C_File *f, CyString to);
176
	void ConvertFakePatch(C_File *f);
177
	void ConvertAutoText(C_File *f);
178
	C_File *FindMatchingMod(C_File *f);
179
	void RenameFile(C_File *f, CyString baseName);
180
 
181
	// set basic settings
182
	void SetName			( CyString str ) { m_sName = str.Remove ( '|' ); m_bChanged = true; }
183
	void SetVersion			( CyString str ) { m_sVersion = str; m_bChanged = true; }
184
	void SetAuthor			( CyString str ) { m_sAuthor = str.Remove ( '|' ); m_bChanged = true; }
185
	void SetWebAddress		( CyString str ) { m_sWebAddress = str; m_bChanged = true; }
186
	void SetWebSite			( CyString str ) { m_sWebSite = str; m_bChanged = true; }
187
	void SetEmail			( CyString str ) { m_sEmail = str; m_bChanged = true; }
188
	void SetCreationDate	( CyString str ) { m_sCreationDate = str; m_bChanged = true; }
189
	void AddWebMirror		( CyString str ) { m_lMirrors.PushBack(str, "", true); m_bChanged = true; }
190
	void RemoveWebMirror	( CyString str ) { m_lMirrors.Remove(str, true); m_bChanged = true; }
191
	void SetDescription		( CyString str ) { m_sDescription = str; m_bChanged = true; }
192
	void SetDataCompression ( int c )       { m_SHeader2.iDataCompression = c; }
193
	void SetFileCompression ( int c )       { m_SHeader2.iFileCompression = c; }
194
	void SetValueCompression( int c )       { m_SHeader.iValueCompression = c; }
195
	void SetForumLink		( CyString str ) { m_sForumLink = str; m_bChanged = true; }
196
	void SetIcon ( C_File *file, CyString ext ) { if ( m_pIconFile ) delete m_pIconFile; m_sIconExt = ext; m_pIconFile = file; m_bChanged = true; }
197
	void SetFtpAddr			( CyString str ) { m_sFtpAddr = str; }
198
 
199
	void AddFileScript(int filetype, bool shared, CyString rest);
200
	void SetFilename ( CyString str ) { m_sFilename = str; }
201
	CyString GetFilename() { return m_sFilename; }
202
	CyString GetExportFilename() { return m_sExportFilename; }
203
 
204
	void SetRecommended ( int i ) { m_iRecommended = i; m_bChanged = true; }
205
	void SetGameChanging ( int i ) { m_iGameChanging = i; m_bChanged = true; }
206
	void SetEaseOfUse ( int i ) { m_iEaseOfUse = i; m_bChanged = true; }
207
 
208
	bool IsMod();
13 cycrow 209
	bool IsFakePatch() const;
6 cycrow 210
 
211
	// error handling
212
	void ClearError () { m_sLastError = ""; m_iLastError = SPKERR_NONE; }
213
	int GetLastError () { return m_iLastError; }
214
	CyString GetLastErrorString() { return m_sLastError; }
215
 
216
	// file handling
217
	void AddFile ( C_File *file );
218
	C_File *AddFile ( CyString, CyString, int type, int game = 0 );
219
	C_File *AppendFile ( CyString file, int type, int game, CyString dir = NullString, CProgressInfo *progress = NULL );
220
	C_File *FindFile ( CyString, int, CyString = NullString, int game = 0 );
221
	bool AddFileNow ( CyString, CyString, int type, CProgressInfo *progress = NULL );
222
	int CountFiles ( int filetype );
223
	C_File *FindFileAt ( int filetype, int pos );
224
	virtual bool RemoveFile ( int pos );
225
	virtual bool RemoveFile ( C_File *files );
226
	virtual bool RemoveFile ( CyString file, int type, CyString dir = NullString, int game = 0 );
227
	void RemoveAllFiles ( int type, int game );
228
	CyString CreateFilesLine ( bool updateheader, CProgressInfo * = NULL );
229
 
230
	virtual bool WriteHeader ( FILE *id, int, int );
231
	virtual bool WriteData ( FILE *id, CProgressInfo * = NULL );
232
	virtual bool WriteFile ( CyString filename, CProgressInfo * = NULL );
233
	virtual bool ReadFile ( CyString filename, int readType = SPKREAD_ALL, CProgressInfo *progress = NULL );
234
	virtual bool ReadFile ( FILE *id, int readtype, CProgressInfo *progress );
235
 
236
	virtual bool ExtractFile ( C_File *file, CyString dir, bool includedir = true, CProgressInfo *progress = NULL );
237
	virtual bool ExtractFile ( int file, CyString dir, bool includedir = true, CProgressInfo *progress = NULL );
238
	virtual bool ExtractAll ( CyString dir, int game, bool includedir = true, CProgressInfo *progress = NULL );
239
 
240
	virtual bool SaveToArchive(CyString filename, int game, CProgressInfo *progress = NULL);
241
	void ClearFileData();
242
 
243
	CLinkList<SNames> *GetNamesList() { return &m_lNames; }
244
 
245
	// reading files
246
	void ReadAllFilesToMemory ();
247
	void ReadIconFileToMemory ();
248
	bool ReadFileToMemory(C_File *f);
249
 
250
	// compression
251
	void RecompressAllFiles ( int compresstype, CProgressInfo *progress );
252
	void CompressAllFiles ( int compresstype, CProgressInfo *progress = NULL, int level = DEFAULT_COMPRESSION_LEVEL );
253
	bool UncompressAllFiles ( CProgressInfo * = NULL );
254
 
255
	// static functions
256
	static CyString GetEndOfLine ( FILE *id, int *line = NULL, bool upper = true );
257
	static int CheckFile ( CyString filename, float *version = NULL );
258
 
259
	bool IsFileAdded(C_File *f) { return m_lFiles.FindData(f); }
260
 
261
	// installing
262
	void SwitchFilePointer(C_File *oldFile, C_File *newFile);
263
	bool InstallFiles ( CyString destdir, CProgressInfo *progress, CLinkList<C_File> *spklist, CyStringList *errorStr, bool enabled = true, CPackages *packages = NULL );
264
	virtual bool IsPatch () { return false; }
265
 
266
	// installer functions
267
	bool IsProfileEnabled () { return m_bProfile; }
268
	bool IsEnabled () { return m_bEnable; }
269
	bool IsModifiedEnabled () { return m_bModifiedEnabled; }
270
	bool IsGlobalEnabled () { return m_bGlobal; }
271
 
272
	void SetProfileEnabled ( bool en ) { m_bProfile = en; }
273
	void SetEnabled ( bool en ) { m_bEnable = en; }
274
	void SetModifiedEnabled ( bool en ) { m_bModifiedEnabled = en; }
275
	void SetGlobalEnabled ( bool en ) { m_bGlobal = en; }
276
 
277
	int  GetLoadError() { return m_iLoadError; }
278
	void SetLoadError(int i) { m_iLoadError = i; }
279
	CyString CreateUpdateFile(CyString dir);
280
 
281
	// language functions
282
	void RemoveLanguageName ( int lang );
283
	void AddLanguageName ( int lang, CyString name );
284
	void ClearNames ();
285
 
14 cycrow 286
	virtual bool ParseValueLine(const Utils::String &line);
6 cycrow 287
	int	ParseInstallText(CyString lang);
288
 
289
	CLinkList<SInstallText> *GetInstallTextList() { return &m_lInstallText; }
290
	CLinkList<SInstallText> *GetUninstallTextList() { return &m_lUninstallText; }
291
	CLinkList<SGameCompat>  *GetGameCompatabilityList() { return &m_lGames; }
292
	CyString GetInstallAfterText ( int lang, bool noDefault = false ) { return GetAfterText ( &m_lInstallText, lang, noDefault ); }
293
	CyString GetInstallBeforeText ( int lang, bool noDefault = false ) { return GetBeforeText ( &m_lInstallText, lang, noDefault ); }
294
	CyString GetUninstallAfterText ( int lang, bool noDefault = false ) { return GetAfterText ( &m_lUninstallText, lang, noDefault ); }
295
	CyString GetUninstallBeforeText ( int lang, bool noDefault = false ) { return GetBeforeText ( &m_lUninstallText, lang, noDefault ); }
296
 
297
	SInstallText *AddInstallBeforeText ( int lang, CyString data ) { return AddInstallText ( true, true, lang, data ); }
298
	SInstallText *AddInstallAfterText ( int lang, CyString data ) { return AddInstallText ( false, true, lang, data ); }
299
	SInstallText *AddUninstallBeforeText ( int lang, CyString data ) { return AddInstallText ( true, false, lang, data ); }
300
	SInstallText *AddUninstallAfterText ( int lang, CyString data ) { return AddInstallText ( false, false, lang, data ); }
301
	SInstallText *FindInstallText ( int lang ) { return FindInstallText ( true, lang ); }
302
	SInstallText *FindUninstallText ( int lang ) { return FindInstallText ( false, lang ); }
303
	void AddInstallText ( SInstallText * );
304
	void AddUninstallText ( SInstallText * );
305
	void RemoveInstallText ( int lang ) { RemoveInstallText ( true, lang ); }
306
	void RemoveUninstallText ( int lang  ) { RemoveInstallText ( false, lang ); }
307
	bool IsThereInstallText () { return IsThereInstallText ( true ); }
308
	bool IsThereUninstallText () { return IsThereInstallText ( false ); }
309
 
310
	CyString GetFullFileSizeString();
311
 
312
	CLinkList<SNeededLibrary> *GetNeededLibraries() { return &m_lNeededLibrarys; }
313
	void AddNeededLibrary(CyString scriptName, CyString author, CyString minVersion);
314
	bool IsPackageNeeded(CyString scriptName, CyString author);
315
	SNeededLibrary *FindPackageNeeded(CyString scriptName, CyString author);
316
	void RemovePackageNeeded(CyString scriptName, CyString author);
317
	void ClearNeededPackages();
318
	bool AnyDependacies() { return (m_lNeededLibrarys.size()) ? true: false; }
319
	bool AutoGenerateUpdateFile() { return m_bAutoGenerateUpdateFile; }
320
	void RemoveFakePatchOrder(bool after, CyString scriptName, CyString author);
321
	void RemoveFakePatchOrder(CyString scriptName, CyString author);
322
	void AddFakePatchOrder(bool after, CyString scriptName, CyString author);
323
	bool AnyFakePatchOrder() { if ( !m_lFakePatchBefore.Empty() || !m_lFakePatchAfter.Empty() ) return true; return false; }
324
	CyStringList &GetFakePatchBeforeOrder() { return m_lFakePatchBefore; }
325
	CyStringList &GetFakePatchAfterOrder() { return m_lFakePatchAfter; }
326
	int		GetPluginType() { return m_iPluginType; }
327
	void	SetPluginType(int i) { m_iPluginType = i; m_bChanged = true; }
328
 
329
	bool IsChanged() { return m_bChanged; }
330
	void SetChanged(bool b) { m_bChanged = b; }
331
 
332
	int  FindFirstGameInPackage();
333
	bool IsAnyGameInPackage();
334
	bool IsMultipleGamesInPackage();
335
	bool IsGameInPackage(int game);
336
 
337
	virtual int GetType () { return TYPE_BASE; }
338
	bool AnyFileType ( int type );
339
	CBaseFile *GetParent () { return m_pParent; }
340
	void SetParent ( CBaseFile *file ) { m_pParent = file; }
341
	int ParseLanguage(CyString lang);
342
 
343
	virtual bool UpdateSigned (bool updateFiles);
344
	int GetNum() { return m_iNum; }
345
	void SetNum(int i) { m_iNum = i; }
346
 
347
	bool	IsFullyLoaded() { return m_bFullyLoaded; }
348
	virtual bool   IsSigned ()		{ return m_bSigned;}
349
	void SetOverrideFiles(bool b) { m_bOverrideFiles = b; }
350
	bool IsUpdateChecked () { return m_bUpdate; }
351
	void SetUpdateChecked ( bool en ) { m_bUpdate = en; }
352
 
353
	unsigned char *CreateData(size_t *size, CProgressInfo *progress = NULL);
354
 
355
protected:
356
	virtual void Delete ();
357
	virtual void SetDefaults ();
358
 
359
	// reading of files
14 cycrow 360
	virtual bool CheckHeader(const Utils::String header) const;
6 cycrow 361
	virtual bool ParseHeader ( CyString header );
362
	virtual bool ParseFileHeader ( CyString header );
363
	virtual bool ParseFilesLine ( CyString line );
364
	virtual void ReadValues ( CyString values );
365
	virtual void ReadFiles ( CyString values );
366
 
367
	SInstallText *AddInstallText ( bool before, bool install, int lang, CyString data );
368
	SInstallText *FindInstallText ( bool install, int lang );
369
	void RemoveInstallText ( bool install, int lang );
370
	bool IsThereInstallText ( bool );
371
 
372
	CyString GetAfterText ( CLinkList<SInstallText> *list, int lang, bool noDefault = false );
373
	CyString GetBeforeText ( CLinkList<SInstallText> *list, int lang, bool noDefault = false );
374
 
14 cycrow 375
	void _install_adjustFakePatches(CPackages *pPackages);
376
 
6 cycrow 377
	int m_iType;
378
	SSPKHeader m_SHeader;
379
	SSPKHeader2 m_SHeader2;
380
 
381
	CyString m_sName;
382
	CyString m_sVersion;
383
	CyString m_sAuthor;
384
	CyString m_sWebSite;
385
	CyString m_sWebAddress;
386
	CyString m_sEmail;
387
	CyString m_sDescription;
388
	CyString m_sCreationDate;
389
	CyString m_sForumLink;
390
 
391
	C_File *m_pIconFile;
392
	CyString m_sIconExt;
393
	CyString m_sLastError;
394
	int m_iLastError;
395
 
396
	CyString m_sFilename;
397
	CyString m_sExportFilename;
398
 
399
	CLinkList<C_File>  m_lFiles;
400
	CLinkList<SNames> m_lNames;
401
	CLinkList<SInstallText> m_lInstallText;
402
	CLinkList<SInstallText> m_lUninstallText;
403
	CyStringList m_lMirrors;
404
	CyStringList m_lFakePatchBefore;
405
	CyStringList m_lFakePatchAfter;
406
 
407
	int m_iPluginType;
408
	CLinkList<SGameCompat> m_lGames;
409
 
410
	// package stats
411
	int m_iRecommended;
412
	int m_iEaseOfUse;
413
	int m_iGameChanging;
414
 
415
	bool m_bSigned;
416
	bool m_bFullyLoaded;
417
 
418
	//installer varibles
419
	bool m_bEnable;
420
	bool m_bModifiedEnabled;
421
	bool m_bGlobal;
422
	bool m_bProfile;
423
	int m_iLoadError;
424
 
425
	CBaseFile *m_pParent;
426
 
427
	int m_iNum;
428
	bool	m_bChanged;
429
 
430
	CLinkList<SNeededLibrary> m_lNeededLibrarys;
431
 
432
	bool	m_bOverrideFiles;
433
	CyString	m_sFtpAddr;
434
	bool	m_bAutoGenerateUpdateFile;
435
	bool m_bUpdate;
436
};
437
 
438
 
439
class SPKEXPORT CArchiveFile : public CBaseFile
440
{
441
public:
442
	CArchiveFile();
443
	virtual ~CArchiveFile();
444
	virtual CyString GetFullPackageName(CyString format, int lang) { return CyString("Archive(") + m_sName + ")"; }
445
	virtual CyString GetFullPackageName(int language, CyString byString) { return CyString("Archive(") + m_sName + ")"; }
446
	virtual CyString GetFullPackageName(int language, bool includeVersion = true, CyString byString = "by") { return CyString("Archive(") + m_sName + ")"; }
447
	virtual int GetType () { return TYPE_ARCHIVE; }
448
};
449
 
450
#endif //__BASEFILE_H__
451