Subversion Repositories spk

Rev

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

Rev 56 Rev 57
Line 8... Line 8...
8
 * Adds an exe name available
8
 * Adds an exe name available
9
 */
9
 */
10
int CGameExe::AddExe(const Utils::String &exe)
10
int CGameExe::AddExe(const Utils::String &exe)
11
{
11
{
12
	// search if it already exists
12
	// search if it already exists
13
	int count = 0;
-
 
14
	for ( CListNode<SGameExe> *node = m_lExe.Front(); node; node = node->next() ) {
-
 
15
		if ( node->Data()->sExe.Compare(exe) )
13
	int iCount = this->_findExe(exe);
16
			return count;
14
	if ( iCount != -1 ) return iCount;
17
		--count;
-
 
18
	}
-
 
19
 
15
 
20
	// not found, we need to add
16
	// not found, we need to add
21
	SGameExe *sExe = new SGameExe;
17
	SGameExe *sExe = new SGameExe;
22
	sExe->sExe = exe;
18
	sExe->sExe = exe;
23
	sExe->iName = 0;
19
	sExe->iName = 0;
24
	sExe->iFlags = 0;
20
	sExe->iFlags = 0;
25
	sExe->iMaxPatch = 1;
21
	sExe->iMaxPatch = 1;
26
	sExe->iAddonTo = 0;
22
	sExe->iAddonTo = 0;
-
 
23
	sExe->iTextNum = 0;
27
 
24
 
28
	m_lExe.push_back(sExe);
25
	m_lExe.push_back(sExe);
29
 
26
 
30
	return m_lExe.size() - 1;
27
	return m_lExe.size() - 1;
31
}
28
}
32
 
29
 
33
/**
30
/**
34
 * Find Exe
31
 * Find Exe
35
 *
32
 *
36
 * Find an exe and return its position in the file
33
 * Find an exe and return its position in the file
37
 *
34
 *
38
 * Argument:	exe,	String - name of the exe file to find
35
 * Argument:	exe,	String - name of the exe file to find
39
 */
36
 */
40
int CGameExe::FindExe(const Utils::String &exe)
37
int CGameExe::_findExe(const Utils::String &exe) const
41
{
38
{
42
	int count = 0;
39
	int count = 0;
43
	for ( CListNode<SGameExe> *node = m_lExe.Front(); node; node = node->next() )
40
	for ( CListNode<SGameExe> *node = m_lExe.Front(); node; node = node->next() )
44
	{
41
	{
45
		if ( node->Data()->sExe.Compare(exe) )
42
		if ( node->Data()->sExe.Compare(exe) )
46
			return count;
43
			return count;
47
		++count;
44
		++count;
48
	}
45
	}
49
 
46
 
50
	return -1;
47
	return -1;
51
}
48
}
52
 
49
 
53
SGameExe *CGameExe::GetGameExe(const Utils::String &exe)
50
SGameExe *CGameExe::gameExe(const Utils::String &exe)
54
{
51
{
55
	int e = FindExe(exe);
52
	int e = this->_findExe(exe);
56
	if ( e < 0 ) return NULL;
53
	if ( e < 0 ) return NULL;
57
	return m_lExe[e];
54
	return m_lExe[e];
58
}
55
}
59
 
56
 
60
int CGameExe::FindVersion(int exe, int size, Utils::String *fVersion)
57
int CGameExe::_findVersion(int exe, int size, Utils::String *fVersion)
61
{
58
{
62
	if ( fVersion )
-
 
63
		*fVersion = -1.0;
59
	if ( fVersion ) *fVersion = -1.0;
64
 
-
 
65
	if ( exe < 0 )
60
	if ( exe < 0 ) return -1;
66
		return -1;
-
 
67
 
61
 
68
	SGameExe *gameExe = m_lExe[exe];
62
	SGameExe *gameExe = m_lExe[exe];
69
	if ( !gameExe )
63
	if ( !gameExe ) return -1;
70
		return -1;
-
 
71
 
64
 
72
	int count = 0;
65
	int count = 0;
73
	for ( CListNode<SGameExeVersion> *node = gameExe->lVersions.Front(); node; node = node->next() )
66
	for ( CListNode<SGameExeVersion> *node = gameExe->lVersions.Front(); node; node = node->next() ) {
74
	{
-
 
75
		// check each size of a watch
-
 
76
		for ( CListNode<int> *iNode = node->Data()->lSize.Front(); iNode; iNode = iNode->next() )
67
		for ( CListNode<int> *iNode = node->Data()->lSize.Front(); iNode; iNode = iNode->next() ) {
77
		{
-
 
78
			int checkSize = *iNode->Data();
68
			int checkSize = *iNode->Data();
79
			if ( checkSize == size )
69
			if ( checkSize == size ) {
80
			{
-
 
81
				*fVersion = node->Data()->fVersion;
70
				*fVersion = node->Data()->fVersion;
82
				return count;
71
				return count;
83
			}
72
			}
84
		}
73
		}
85
 
74
 
Line 89... Line 78...
89
	return -1;
78
	return -1;
90
}
79
}
91
 
80
 
92
int CGameExe::FindVersion(const Utils::String &exe, int size, Utils::String *fVersion)
81
int CGameExe::FindVersion(const Utils::String &exe, int size, Utils::String *fVersion)
93
{
82
{
94
	int iExe = this->FindExe(exe);
83
	int iExe = this->_findExe(exe);
95
	if ( iExe < 0 )
84
	if ( iExe < 0 )
96
		return -1;
85
		return -1;
97
 
86
 
98
	int iVersion = this->FindVersion(iExe, size, fVersion);
87
	int iVersion = this->_findVersion(iExe, size, fVersion);
99
	if ( iVersion < 0 )
88
	if ( iVersion < 0 )
100
		return -2 - iExe;
89
		return -2 - iExe;
101
 
90
 
102
	return -1;
91
	return -1;
103
}
92
}
Line 145... Line 134...
145
		++pos;
134
		++pos;
146
		++namestart;
135
		++namestart;
147
		++sizestart;
136
		++sizestart;
148
		sExe->sAddon = line.token(":", EXE_VERSIONPOS);
137
		sExe->sAddon = line.token(":", EXE_VERSIONPOS);
149
		if ( sExe->sAddon.isin("!") ) {
138
		if ( sExe->sAddon.isin("!") ) {
150
			sExe->iAddonTo = this->FindExe(sExe->sAddon.token("!", 2));
139
			sExe->iAddonTo = this->_findExe(sExe->sAddon.token("!", 2));
151
			sExe->sAddon = sExe->sAddon.token("!", 1);
140
			sExe->sAddon = sExe->sAddon.token("!", 1);
152
		}
141
		}
153
	}
142
	}
154
 
143
 
155
	int iVersions = line.token(":", pos);
144
	int iVersions = line.token(":", pos);
Line 450... Line 439...
450
		else {
439
		else {
451
			if ( Dir.Exists(exe->sExe) )
440
			if ( Dir.Exists(exe->sExe) )
452
				return count;
441
				return count;
453
			// check for addon dir
442
			// check for addon dir
454
			if ( !exe->sAddon.empty() ) {
443
			if ( !exe->sAddon.empty() ) {
455
				CyString top = Dir.TopDir();
-
 
456
				if ( exe->sAddon.Compare(Dir.TopDir().ToString()) )
444
				if ( exe->sAddon.Compare(Dir.TopDir().ToString()) )
457
					return count;
445
					return count;
458
			}
446
			}
459
		}
447
		}
460
		++count;
448
		++count;
Line 536... Line 524...
536
	Utils::String gameDir = sGameExe;
524
	Utils::String gameDir = sGameExe;
537
	Utils::String gameExe = this->GetGameDir(sGameExe) + "/" + m_lExe[gameType]->sExe;
525
	Utils::String gameExe = this->GetGameDir(sGameExe) + "/" + m_lExe[gameType]->sExe;
538
	int size = (int)CFileIO(gameExe).GetFilesize();
526
	int size = (int)CFileIO(gameExe).GetFilesize();
539
 
527
 
540
	Utils::String fVersion;
528
	Utils::String fVersion;
541
	int version = this->FindVersion(gameType, size, &fVersion);
529
	int version = this->_findVersion(gameType, size, &fVersion);
542
	// not matched version
530
	// not matched version
543
	// lets read the text file
531
	// lets read the text file
544
 
532
 
545
	if ( version != -1 ) {
533
	if ( version != -1 ) {
546
		(*versionName) = this->GetGameVersionFromType(gameType, version, fVersion);
534
		(*versionName) = this->GetGameVersionFromType(gameType, version, fVersion);
Line 591... Line 579...
591
		gameExe = CDirIO(gameExe).Back().ToString() + "/" + m_lExe[gameType]->sExe;
579
		gameExe = CDirIO(gameExe).Back().ToString() + "/" + m_lExe[gameType]->sExe;
592
	else
580
	else
593
		gameExe = gameExe + "/" + m_lExe[gameType]->sExe;
581
		gameExe = gameExe + "/" + m_lExe[gameType]->sExe;
594
	int size = (int)CFileIO(gameExe).GetFilesize();
582
	int size = (int)CFileIO(gameExe).GetFilesize();
595
 
583
 
596
	int version = this->FindVersion(gameType, size, a_fVersion);
584
	int version = this->_findVersion(gameType, size, a_fVersion);
597
 
585
 
598
	Utils::String sText = this->_extractTextData(this->_readTextFile(gameDir), 1910, 10000);
586
	Utils::String sText = this->_extractTextData(this->_readTextFile(gameDir), 1910, 10000);
599
	Utils::String sVersion = sText.between("ver=", "&amp");
587
	Utils::String sVersion = sText.between("ver=", "&amp");
600
 
588
 
601
	if ( !sVersion.empty() )
589
	if ( !sVersion.empty() )