Subversion Repositories spk

Rev

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

Rev 56 Rev 58
Line 771... Line 771...
771
	// no file to read from
771
	// no file to read from
772
	if ( m_sFilename.Empty() )
772
	if ( m_sFilename.Empty() )
773
		return false;
773
		return false;
774
 
774
 
775
	// now open the file
775
	// now open the file
776
	std::fstream stream(m_sFilename.ToString().c_str(), std::ios::in | std::ios::binary);
776
	CFileIO File(m_sFilename.ToString());
777
	if ( !stream.is_open() ) return false;
777
	if ( !File.startRead() ) return false;
778
 
778
 
779
	// read the header
779
	// read the header
780
	CBaseFile::readEndOfLine(stream, NULL, false);
780
	File.readEndOfLine();
781
	// skip past values
781
	// skip past values
782
	stream.seekg(4 + m_SHeader.lComprLen, std::ios::cur);
782
	File.seek(4 + m_SHeader.lComprLen);
783
 
783
 
784
	bool ret = false;
784
	bool ret = false;
785
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() ) {
785
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() ) {
786
		SMultiSpkFile *it = node->Data();
786
		SMultiSpkFile *it = node->Data();
787
		if ( it == ms )
787
		if ( it == ms )
Line 791... Line 791...
791
				if ( ms->iType == TYPE_XSP )
791
				if ( ms->iType == TYPE_XSP )
792
					ms->pFile = new CXspFile;
792
					ms->pFile = new CXspFile;
793
				else
793
				else
794
					ms->pFile = new CSpkFile;
794
					ms->pFile = new CSpkFile;
795
			}
795
			}
796
			ret = it->pFile->readFile(stream, type, NULL);
796
			ret = it->pFile->readFile(File, type, NULL);
797
			break;
797
			break;
798
		}
798
		}
799
		else
799
		else
800
			stream.seekg(it->lSize, std::ios::cur);
800
			File.seek(it->lSize);
801
	}
801
	}
802
 
802
 
803
	stream.clear();
803
	File.close();
804
	return ret;
804
	return ret;
805
}
805
}
806
 
806
 
807
bool CMultiSpkFile::ReadAllPackages( int type, CLinkList<CBaseFile> *addToList )
807
bool CMultiSpkFile::ReadAllPackages( int type, CLinkList<CBaseFile> *addToList )
808
{
808
{
809
	// no file to read from
809
	// no file to read from
810
	if ( m_sFilename.Empty() )
810
	if ( m_sFilename.Empty() )
811
		return false;
811
		return false;
812
 
812
 
813
	// now open the file
813
	// now open the file
814
	std::fstream stream(m_sFilename.ToString().c_str(), std::ios::in | std::ios::binary);
814
	CFileIO File(m_sFilename.ToString());
815
	if ( !stream.is_open() ) return false;
815
	if ( !File.startRead() ) return false;
816
 
816
 
817
	// read the header
817
	// read the header
818
	CBaseFile::readEndOfLine(stream, NULL, false);
818
	File.readEndOfLine();
819
	// skip past values
819
	// skip past values
820
	stream.seekg(4 + m_SHeader.lComprLen, std::ios::cur);
820
	File.seek(4 + m_SHeader.lComprLen);
821
 
821
 
822
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() ) {
822
	for ( CListNode<SMultiSpkFile> *node = m_lFiles.Front(); node; node = node->next() ) {
823
		SMultiSpkFile *ms = node->Data();
823
		SMultiSpkFile *ms = node->Data();
824
		CBaseFile *package = NULL;
824
		CBaseFile *package = NULL;
825
		if ( ms->iType == TYPE_XSP )
825
		if ( ms->iType == TYPE_XSP )
Line 833... Line 833...
833
				package = ms->pFile;
833
				package = ms->pFile;
834
			}
834
			}
835
		}
835
		}
836
 
836
 
837
		if ( !package->IsFullyLoaded() ) {
837
		if ( !package->IsFullyLoaded() ) {
838
			long tell = stream.tellg();
838
			long tell = File.position();
839
			package->readFile(stream, type, NULL);
839
			package->readFile(File, type, NULL);
840
 
840
 
841
			if ( addToList ) {
841
			if ( addToList ) {
842
				addToList->push_back(package);
842
				addToList->push_back(package);
843
				package->SetEnabled(ms->bOn);
843
				package->SetEnabled(ms->bOn);
844
			}
844
			}
845
			else if ( package )
845
			else if ( package )
846
				ms->pFile = package;
846
				ms->pFile = package;
847
 
847
 
848
			// move to correct position in file for next stream of data
848
			// move to correct position in file for next stream of data
849
			// should be fine, this is more of a failsafe
849
			// should be fine, this is more of a failsafe
850
			stream.seekg(tell, std::ios::beg);
850
			File.seekStart(tell);
851
		}
851
		}
852
		stream.seekg(ms->lSize, std::ios::cur);
852
		File.seek(ms->lSize);
853
	}
853
	}
854
 
854
 
855
	stream.close();
855
	File.close();
856
	return true;
856
	return true;
857
}
857
}
858
 
858
 
859
 
859
 
860
SMultiSpkFile *CMultiSpkFile::FindFile ( CyString name )
860
SMultiSpkFile *CMultiSpkFile::FindFile ( CyString name )