- WadArchive(const char* name)
- : m_name(name), m_wadfile(name)
- {
- if(!m_wadfile.failed())
- {
- wadinfo_t wadinfo;
- istream_read_wadinfo(m_wadfile, wadinfo);
-
- EWadVersion version = wad_version(wadinfo.identification);
- int miptexType = miptex_type_for_version(version);
-
- if(version != eNotValid)
- {
- m_wadfile.seek(wadinfo.infotableofs);
-
- for(int i = 0; i < wadinfo.numlumps; ++i)
- {
- char buffer[32];
- lumpinfo_t lumpinfo;
- istream_read_lumpinfo(m_wadfile, lumpinfo);
- if(lumpinfo.type == miptexType)
- {
- strcpy(buffer, "textures/");
- strcat(buffer, lumpinfo.name);
- strcat(buffer, type_for_version(version));
- m_files.insert(files_t::value_type(buffer, wad_record_t(lumpinfo.filepos, lumpinfo.disksize, lumpinfo.size)));
- }
- }
- }
- }
- }
-
- void release()
- {
- delete this;
- }
- ArchiveFile* openFile(const char* name)
- {
- files_t::iterator i = m_files.find(name);
- if(i != m_files.end())
- {
- return StoredArchiveFile::create(name, m_name.c_str(), i->second.m_position, i->second.m_stream_size, i->second.m_file_size);
- }
- return 0;
- }
- virtual ArchiveTextFile* openTextFile(const char* name)
- {
- files_t::iterator i = m_files.find(name);
- if(i != m_files.end())
- {
- return StoredArchiveTextFile::create(name, m_name.c_str(), i->second.m_position, i->second.m_stream_size);
- }
- return 0;
- }
- bool containsFile(const char* name)
- {
- return m_files.find(name) != m_files.end();
- }
- void forEachFile(VisitorFunc visitor, const char* root)
- {
- if(root[0] == '\0')
- {
- if(visitor.directory("textures/", 1))
- return;
- }
- else if(strcmp(root, "textures/") != 0)
- {
- return;
- }
-
- for(files_t::iterator i = m_files.begin(); i != m_files.end(); ++i)
- visitor.file(i->first.c_str());
- }
+WadArchive( const char* name )
+ : m_name( name ), m_wadfile( name ){
+ if ( !m_wadfile.failed() ) {
+ wadinfo_t wadinfo;
+ istream_read_wadinfo( m_wadfile, wadinfo );
+
+ EWadVersion version = wad_version( wadinfo.identification );
+ int miptexType = miptex_type_for_version( version );
+
+ if ( version != eNotValid ) {
+ m_wadfile.seek( wadinfo.infotableofs );
+
+ for ( int i = 0; i < wadinfo.numlumps; ++i )
+ {
+ char buffer[32];
+ lumpinfo_t lumpinfo;
+ istream_read_lumpinfo( m_wadfile, lumpinfo );
+ if ( lumpinfo.type == miptexType ) {
+ strcpy( buffer, "textures/" );
+ strcat( buffer, lumpinfo.name );
+ strcat( buffer, type_for_version( version ) );
+ m_files.insert( files_t::value_type( buffer, wad_record_t( lumpinfo.filepos, lumpinfo.disksize, lumpinfo.size ) ) );
+ }
+ }
+ }
+ }
+}
+
+void release(){
+ delete this;
+}
+ArchiveFile* openFile( const char* name ){
+ files_t::iterator i = m_files.find( name );
+ if ( i != m_files.end() ) {
+ return StoredArchiveFile::create( name, m_name.c_str(), i->second.m_position, i->second.m_stream_size, i->second.m_file_size );
+ }
+ return 0;
+}
+virtual ArchiveTextFile* openTextFile( const char* name ){
+ files_t::iterator i = m_files.find( name );
+ if ( i != m_files.end() ) {
+ return StoredArchiveTextFile::create( name, m_name.c_str(), i->second.m_position, i->second.m_stream_size );
+ }
+ return 0;
+}
+bool containsFile( const char* name ){
+ return m_files.find( name ) != m_files.end();
+}
+void forEachFile( VisitorFunc visitor, const char* root ){
+ if ( root[0] == '\0' ) {
+ if ( visitor.directory( "textures/", 1 ) ) {
+ return;
+ }
+ }
+ else if ( strcmp( root, "textures/" ) != 0 ) {
+ return;
+ }
+
+ for ( files_t::iterator i = m_files.begin(); i != m_files.end(); ++i )
+ visitor.file( i->first.c_str() );
+}