Subversion Repositories spk

Rev

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

Rev 175 Rev 176
Line 90... Line 90...
90
	m_lFiles.push_back ( ms );
90
	m_lFiles.push_back ( ms );
91
 
91
 
92
	m_bChanged = true;
92
	m_bChanged = true;
93
	return true;
93
	return true;
94
}
94
}
95
bool CMultiSpkFile::AddFile ( CyString file, bool on )
95
bool CMultiSpkFile::AddFile ( CyString sFile, bool on )
96
{
96
{
-
 
97
	Utils::String file = sFile.ToString();
97
	// multipack
98
	// multipack
98
	if ( file.IsIn ( "::" ) )
99
	if (file.contains( "::" ))
99
	{
100
	{
100
		CyString mfile = file.Left ( file.FindPos("::") );
101
		Utils::String mfile = file.left(file.findPos("::"));
101
		CMultiSpkFile spkfile;
102
		CMultiSpkFile spkfile;
102
		if ( spkfile.ReadFile ( mfile, false ) )
103
		if ( spkfile.ReadFile ( mfile, false ) )
103
		{
104
		{
104
			SMultiSpkFile *ms = new SMultiSpkFile;
105
			SMultiSpkFile *ms = new SMultiSpkFile;
105
			ms->bRemove = false;
106
			ms->bRemove = false;
106
			ms->sName = file.Right ( (int)(file.Length() - file.FindPos("::")) - 2 );
107
			ms->sName = file.right((int)(file.length() - file.findPos("::")) - 2 );
107
			ms->pFile = NULL;
108
			ms->pFile = NULL;
108
			ms->sData = NULL;
109
			ms->sData = NULL;
109
			if ( spkfile.ExtractData ( ms ) )
110
			if ( spkfile.ExtractData ( ms ) )
110
			{
111
			{
111
				ms->bOn = on;
112
				ms->bOn = on;
Line 116... Line 117...
116
		}
117
		}
117
		return false;
118
		return false;
118
	}
119
	}
119
 
120
 
120
	// check its a valid file
121
	// check its a valid file
121
	int check = CBaseFile::CheckFile(file.ToString());
122
	int check = CBaseFile::CheckFile(file);
122
	if ( check == SPKFILE_MULTI )
123
	if ( check == SPKFILE_MULTI )
123
	{
124
	{
124
		CMultiSpkFile spkfile;
125
		CMultiSpkFile spkfile;
125
		if ( spkfile.ReadFile ( file, false ) )
126
		if ( spkfile.ReadFile ( file, false ) )
126
		{
127
		{
Line 152... Line 153...
152
 
153
 
153
	// create entry
154
	// create entry
154
	SMultiSpkFile *ms = new SMultiSpkFile;
155
	SMultiSpkFile *ms = new SMultiSpkFile;
155
	ms->bRemove = false;
156
	ms->bRemove = false;
156
	ms->pFile = NULL;
157
	ms->pFile = NULL;
157
	ms->sName = file;
158
	ms->sName = CFileIO(file).filename();
158
	ms->sName = ms->sName.FindReplace ( "\\", "/" );
-
 
159
	ms->sName = ms->sName.GetToken ( ms->sName.NumToken('/'), '/' );
-
 
160
	ms->bOn = on;
159
	ms->bOn = on;
161
 
160
 
162
	// read data
161
	// read data
163
	ms->sData = (char *)File.readAll((size_t *)&ms->lSize);
162
	ms->sData = (char *)File.readAll((size_t *)&ms->lSize);
164
	File.close();
163
	File.close();
Line 168... Line 167...
168
		baseFile = new CSpkFile;
167
		baseFile = new CSpkFile;
169
	else if ( check == SPKFILE_SINGLESHIP )
168
	else if ( check == SPKFILE_SINGLESHIP )
170
		baseFile = new CXspFile;
169
		baseFile = new CXspFile;
171
 
170
 
172
	if ( baseFile ) {
171
	if ( baseFile ) {
173
		if ( baseFile->readFile(file.ToString(), SPKREAD_VALUES)) {
172
		if ( baseFile->readFile(file, SPKREAD_VALUES)) {
174
			ms->sScriptAuthor	= baseFile->author();
173
			ms->sScriptAuthor	= baseFile->author();
175
			ms->sScriptName		= baseFile->name();
174
			ms->sScriptName		= baseFile->name();
176
			ms->sScriptVersion	= baseFile->version();
175
			ms->sScriptVersion	= baseFile->version();
177
			ms->iType			= baseFile->GetType();
176
			ms->iType			= baseFile->GetType();
178
		}
177
		}
Line 188... Line 187...
188
SMultiSpkFile *CMultiSpkFile::AddFileEntry ( CyString filename )
187
SMultiSpkFile *CMultiSpkFile::AddFileEntry ( CyString filename )
189
{
188
{
190
	SMultiSpkFile *ms = new SMultiSpkFile;
189
	SMultiSpkFile *ms = new SMultiSpkFile;
191
	ms->bRemove = false;
190
	ms->bRemove = false;
192
	ms->pFile = NULL;
191
	ms->pFile = NULL;
193
	ms->sName = filename;
192
	ms->sName = filename.ToString();
194
	ms->bOn = true;
193
	ms->bOn = true;
195
	ms->iType = -1;
194
	ms->iType = -1;
196
 
195
 
197
	m_lFiles.push_back ( ms );
196
	m_lFiles.push_back ( ms );
198
	m_bChanged = true;
197
	m_bChanged = true;
Line 200... Line 199...
200
	return ms;
199
	return ms;
201
}
200
}
202
 
201
 
203
CyString CMultiSpkFile::CreateData ()
202
CyString CMultiSpkFile::CreateData ()
204
{
203
{
205
	CyString ret;
204
	Utils::String ret;
206
	if ( !m_sName.Empty() )
205
	if ( !_sName.empty() )
207
		ret = CyString("Name: ") + m_sName + "\n";
206
		ret = "Name: " + _sName + "\n";
208
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() )
207
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() )
209
	{
208
	{
210
		SMultiSpkFile *ms = node->Data();
209
		SMultiSpkFile *ms = node->Data();
211
		if ( ms->iType == TYPE_XSP )
210
		if ( ms->iType == TYPE_XSP )
212
			ret += "XspFile: ";
211
			ret += "XspFile: ";
Line 218... Line 217...
218
		else
217
		else
219
			ret += "0:";
218
			ret += "0:";
220
		ret += ms->lSize;
219
		ret += ms->lSize;
221
		ret += ":";
220
		ret += ":";
222
		ret += ms->sName;
221
		ret += ms->sName;
223
		if ( !ms->sScriptName.Empty() )
222
		if ( !ms->sScriptName.empty() )
224
			ret += (CyString(":") + ms->sScriptName + "|" + ms->sScriptAuthor + "|" + ms->sScriptVersion);
223
			ret += ":" + ms->sScriptName + "|" + ms->sScriptAuthor + "|" + ms->sScriptVersion;
225
		ret += "\n";
224
		ret += "\n";
226
	}
225
	}
227
 
226
 
228
	return ret;
227
	return ret;
229
}
228
}
Line 304... Line 303...
304
	m_SHeader.bSelection = (header.GetToken ( 4, ';' ).ToInt()) ? true : false;
303
	m_SHeader.bSelection = (header.GetToken ( 4, ';' ).ToInt()) ? true : false;
305
 
304
 
306
	return true;
305
	return true;
307
}
306
}
308
 
307
 
309
bool CMultiSpkFile::ParseValueLine ( CyString line )
308
bool CMultiSpkFile::ParseValueLine ( CyString sLine )
310
{
309
{
-
 
310
	Utils::String line = sLine.ToString();
311
	CyString first = line.GetToken ( 1, &apos; &apos; );
311
	Utils::String first = line.token(&quot; &quot;, 1);
312
	CyString rest  = line.GetToken ( 2, -1, &apos; &apos; );
312
	Utils::String rest  = line.tokens(&quot; &quot;, 2);
313
 
313
 
314
	if ( first == "Name:" )
314
	if ( first == "Name:" )
315
		m_sName = rest;
315
		_sName = rest;
316
	else if ( first == "SpkFile:" )
316
	else if ( first == "SpkFile:" )
317
	{
317
	{
318
		SMultiSpkFile *ms = new SMultiSpkFile;
318
		SMultiSpkFile *ms = new SMultiSpkFile;
319
		ms->bRemove = false;
319
		ms->bRemove = false;
320
		ms->pFile = NULL;
320
		ms->pFile = NULL;
321
		ms->bOn = (rest.GetToken ( 1, &apos;:&apos; ).ToInt()) ? true : false;
321
		ms->bOn = (rest.token(&quot;:&quot;, 1).toInt()) ? true : false;
322
		ms->lSize = rest.GetToken ( 2, &apos;:&apos; ).ToLong();
322
		ms->lSize = rest.token(&quot;:&quot;, 2).toLong();
323
		ms->sName = rest.GetToken ( 3, &apos;:&apos; );
323
		ms->sName = rest.token (&quot;:&quot;, 3);
324
		ms->sData = NULL;
324
		ms->sData = NULL;
325
		ms->iType = TYPE_SPK;
325
		ms->iType = TYPE_SPK;
326
		CyString r = rest.GetToken ( 4, -1, &apos;:&apos; );
326
		Utils::String r = rest.tokens(&quot;:&quot;, 4);
327
		if ( !r.Empty() )
327
		if (!r.empty())
328
		{
328
		{
329
			ms->sScriptName = r.GetToken ( 1, &apos;|&apos; );
329
			ms->sScriptName = r.token(&quot;|&quot;, 1);
330
			ms->sScriptAuthor = r.GetToken ( 2, &apos;|&apos; );
330
			ms->sScriptAuthor = r.token(&quot;|&quot;, 2);
331
			ms->sScriptVersion = r.GetToken ( 3, -1, &apos;|&apos; );
331
			ms->sScriptVersion = r.tokens(&quot;|&quot;, 3);
332
		}
332
		}
333
		m_lFiles.push_back ( ms );
333
		m_lFiles.push_back ( ms );
334
	}
334
	}
335
	else if ( first == "XspFile:" )
335
	else if ( first == "XspFile:" )
336
	{
336
	{
337
		SMultiSpkFile *ms = new SMultiSpkFile;
337
		SMultiSpkFile *ms = new SMultiSpkFile;
338
		ms->bRemove = false;
338
		ms->bRemove = false;
339
		ms->pFile = NULL;
339
		ms->pFile = NULL;
340
		ms->bOn = (rest.GetToken ( 1, &apos;:&apos; ).ToInt()) ? true : false;
340
		ms->bOn = (rest.token(&quot;:&quot;, 1).toInt()) ? true : false;
341
		ms->lSize = rest.GetToken ( 2, &apos;:&apos; ).ToLong();
341
		ms->lSize = rest.token(&quot;:&quot;, 2).toLong();
342
		ms->sName = rest.GetToken ( 3, &apos;:&apos; );
342
		ms->sName = rest.token(&quot;:&quot;, 3);
343
		ms->sData = NULL;
343
		ms->sData = NULL;
344
		ms->iType = TYPE_XSP;
344
		ms->iType = TYPE_XSP;
345
		CyString r = rest.GetToken ( 4, -1, &apos;:&apos; );
345
		Utils::String r = rest.tokens(&quot;:&quot;, 4);
346
		if ( !r.Empty() )
346
		if ( !r.empty() )
347
		{
347
		{
348
			ms->sScriptName = r.GetToken ( 1, &apos;|&apos; );
348
			ms->sScriptName = r.token(&quot;|&quot;, 1);
349
			ms->sScriptAuthor = r.GetToken ( 2, &apos;|&apos; );
349
			ms->sScriptAuthor = r.token(&quot;|&quot;, 2);
350
			ms->sScriptVersion = r.GetToken ( 3, -1, &apos;|&apos; );
350
			ms->sScriptVersion = r.tokens(&quot;|&quot;, 3);
351
		}
351
		}
352
		m_lFiles.push_back ( ms );
352
		m_lFiles.push_back ( ms );
353
	}
353
	}
354
	else if ( first == "BaseFile:" )
354
	else if ( first == "BaseFile:" )
355
	{
355
	{
356
		SMultiSpkFile *ms = new SMultiSpkFile;
356
		SMultiSpkFile *ms = new SMultiSpkFile;
357
		ms->bRemove = false;
357
		ms->bRemove = false;
358
		ms->pFile = NULL;
358
		ms->pFile = NULL;
359
		ms->bOn = (rest.GetToken ( 1, &apos;:&apos; ).ToInt()) ? true : false;
359
		ms->bOn = (rest.token(&quot;:&quot;, 1).toInt()) ? true : false;
360
		ms->lSize = rest.GetToken ( 2, &apos;:&apos; ).ToLong();
360
		ms->lSize = rest.token(&quot;:&quot;, 2).toLong();
361
		ms->sName = rest.GetToken ( 3, &apos;:&apos; );
361
		ms->sName = rest.token(&quot;:&quot;, 3);
362
		ms->sData = NULL;
362
		ms->sData = NULL;
363
		ms->iType = TYPE_BASE;
363
		ms->iType = TYPE_BASE;
364
		CyString r = rest.GetToken ( 4, -1, &apos;:&apos; );
364
		Utils::String r = rest.tokens(&quot;:&quot;, 4);
365
		if ( !r.Empty() )
365
		if (!r.empty())
366
		{
366
		{
367
			ms->sScriptName = r.GetToken ( 1, &apos;|&apos; );
367
			ms->sScriptName = r.token(&quot;|&quot;, 1);
368
			ms->sScriptAuthor = r.GetToken ( 2, &apos;|&apos; );
368
			ms->sScriptAuthor = r.token(&quot;|&quot;, 2);
369
			ms->sScriptVersion = r.GetToken ( 3, -1, &apos;|&apos; );
369
			ms->sScriptVersion = r.tokens(&quot;|&quot;, 3);
370
		}
370
		}
371
		m_lFiles.push_back ( ms );
371
		m_lFiles.push_back ( ms );
372
	}
372
	}
373
	else
373
	else
374
		return false;
374
		return false;
Line 443... Line 443...
443
			SMultiSpkFile *ms = node->Data();
443
			SMultiSpkFile *ms = node->Data();
444
			ms->sData = (char *)File.read(ms->lSize);
444
			ms->sData = (char *)File.read(ms->lSize);
445
		}
445
		}
446
	}
446
	}
447
 
447
 
448
	m_sFilename = filename;
448
	_sFilename = filename.ToString();
449
 
449
 
450
	File.close();
450
	File.close();
451
	m_bChanged = false;
451
	m_bChanged = false;
452
 
452
 
453
	return true;
453
	return true;
Line 482... Line 482...
482
	m_lFiles.clear(true);
482
	m_lFiles.clear(true);
483
}
483
}
484
 
484
 
485
bool CMultiSpkFile::ExtractData ( SMultiSpkFile *ms )
485
bool CMultiSpkFile::ExtractData ( SMultiSpkFile *ms )
486
{
486
{
487
	FILE *id = fopen ( m_sFilename.c_str(), "rb" );
487
	FILE *id = fopen (_sFilename.c_str(), "rb");
488
	if ( !id )
488
	if ( !id )
489
		return false;
489
		return false;
490
 
490
 
491
	// skip past the header
491
	// skip past the header
492
	CSpkFile::GetEndOfLine ( id, NULL, false );
492
	CSpkFile::GetEndOfLine ( id, NULL, false );
Line 525... Line 525...
525
bool CMultiSpkFile::ReadFileToMemory ( SMultiSpkFile *ms )
525
bool CMultiSpkFile::ReadFileToMemory ( SMultiSpkFile *ms )
526
{
526
{
527
	if ( ms->sData )
527
	if ( ms->sData )
528
		return true;
528
		return true;
529
 
529
 
530
	FILE *id = fopen ( m_sFilename.c_str(), ";rb" );
530
	FILE *id = fopen(_sFilename.c_str(), ";rb");
531
	if ( !id )
531
	if ( !id )
532
		return false;
532
		return false;
533
 
533
 
534
	// skip past the header
534
	// skip past the header
535
	CSpkFile::GetEndOfLine ( id, NULL, false );
535
	CSpkFile::GetEndOfLine ( id, NULL, false );
Line 586... Line 586...
586
	return true;
586
	return true;
587
}
587
}
588
 
588
 
589
bool CMultiSpkFile::ExtractAll ( CyString dir )
589
bool CMultiSpkFile::ExtractAll ( CyString dir )
590
{
590
{
591
	if ( m_sFilename.Empty() )
591
	if (_sFilename.empty())
592
		return false;
592
		return false;
593
 
593
 
594
	if ( !ReadAllFilesToMemory () )
594
	if ( !ReadAllFilesToMemory () )
595
		return false;
595
		return false;
596
 
596
 
Line 641... Line 641...
641
}
641
}
642
 
642
 
643
bool CMultiSpkFile::ReadAllFilesToMemory (CProgressInfo *progress)
643
bool CMultiSpkFile::ReadAllFilesToMemory (CProgressInfo *progress)
644
{
644
{
645
	// no file to read from
645
	// no file to read from
646
	if ( m_sFilename.Empty() )
646
	if (_sFilename.empty())
647
		return false;
647
		return false;
648
 
648
 
649
	// now open the file
649
	// now open the file
650
	FILE *id = fopen ( m_sFilename.c_str(), ";rb" );
650
	FILE *id = fopen(_sFilename.c_str(), ";rb");
651
	if ( !id )
651
	if ( !id )
652
		return false;
652
		return false;
653
 
653
 
654
	// read the header
654
	// read the header
655
	CSpkFile::GetEndOfLine ( id, NULL, false );
655
	CSpkFile::GetEndOfLine ( id, NULL, false );
Line 673... Line 673...
673
	}
673
	}
674
 
674
 
675
	return true;
675
	return true;
676
}
676
}
677
 
677
 
678
bool CMultiSpkFile::RemoveFile ( CyString file )
678
bool CMultiSpkFile::RemoveFile ( CyString sFile )
679
{
679
{
-
 
680
	Utils::String file = sFile.ToString();
680
	int num = 0;
681
	int num = 0;
681
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() )
682
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() )
682
	{
683
	{
683
		SMultiSpkFile *it = node->Data();
684
		SMultiSpkFile *it = node->Data();
684
		if ( file.Compare(it->sName) )
685
		if ( file.Compare(it->sName) )
Line 714... Line 715...
714
 
715
 
715
	m_bChanged = true;
716
	m_bChanged = true;
716
	return true;
717
	return true;
717
}
718
}
718
 
719
 
719
bool CMultiSpkFile::MarkRemoveFile ( CyString file )
720
bool CMultiSpkFile::MarkRemoveFile ( CyString sFile )
720
{
721
{
-
 
722
	Utils::String file = sFile.ToString();
721
	int num = 0;
723
	int num = 0;
722
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() )
724
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() )
723
	{
725
	{
724
		SMultiSpkFile *it = node->Data();
726
		SMultiSpkFile *it = node->Data();
725
		if ( file.Compare(it->sName) )
727
		if ( file.Compare(it->sName) )
Line 765... Line 767...
765
{
767
{
766
	if ( ms->pFile->IsFullyLoaded() )
768
	if ( ms->pFile->IsFullyLoaded() )
767
		return true;
769
		return true;
768
 
770
 
769
	// no file to read from
771
	// no file to read from
770
	if ( m_sFilename.Empty() )
772
	if (_sFilename.empty())
771
		return false;
773
		return false;
772
 
774
 
773
	// now open the file
775
	// now open the file
774
	CFileIO File(m_sFilename.ToString());
776
	CFileIO File(_sFilename);
775
	if ( !File.startRead() ) return false;
777
	if ( !File.startRead() ) return false;
776
 
778
 
777
	// read the header
779
	// read the header
778
	File.readEndOfLine();
780
	File.readEndOfLine();
779
	// skip past values
781
	// skip past values
Line 803... Line 805...
803
}
805
}
804
 
806
 
805
bool CMultiSpkFile::ReadAllPackages( int type, CLinkList<CBaseFile> *addToList )
807
bool CMultiSpkFile::ReadAllPackages( int type, CLinkList<CBaseFile> *addToList )
806
{
808
{
807
	// no file to read from
809
	// no file to read from
808
	if ( m_sFilename.Empty() )
810
	if (_sFilename.empty())
809
		return false;
811
		return false;
810
 
812
 
811
	// now open the file
813
	// now open the file
812
	CFileIO File(m_sFilename.ToString());
814
	CFileIO File(_sFilename);
813
	if ( !File.startRead() ) return false;
815
	if ( !File.startRead() ) return false;
814
 
816
 
815
	// read the header
817
	// read the header
816
	File.readEndOfLine();
818
	File.readEndOfLine();
817
	// skip past values
819
	// skip past values
Line 853... Line 855...
853
	File.close();
855
	File.close();
854
	return true;
856
	return true;
855
}
857
}
856
 
858
 
857
 
859
 
858
SMultiSpkFile *CMultiSpkFile::FindFile ( CyString name )
860
SMultiSpkFile *CMultiSpkFile::FindFile ( CyString sName )
859
{
861
{
-
 
862
	Utils::String name = sName.ToString();
860
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() )
863
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() )
861
	{
864
	{
862
		SMultiSpkFile *ms = node->Data();
865
		SMultiSpkFile *ms = node->Data();
863
		if ( ms->sName.Compare(name) )
866
		if ( ms->sName.Compare(name) )
864
			return ms;
867
			return ms;