-void Eclass_ScanFile (EntityClassCollector& collector, const char *filename)
-{
- EntityClass *e;
-
- TextFileInputStream inputFile(filename);
- if(inputFile.failed())
- {
- globalErrorStream() << "ScanFile: " << filename << " not found\n";
- return;
- }
- globalOutputStream() << "ScanFile: " << filename << "\n";
-
- enum EParserState
- {
- eParseDefault,
- eParseSolidus,
- eParseComment,
- eParseQuakeED,
- eParseEntityClass,
- eParseEntityClassEnd,
- } state = eParseDefault;
- const char* quakeEd = "QUAKED";
- const char* p = 0;
- StringBuffer buffer;
- SingleCharacterInputStream<TextFileInputStream> bufferedInput(inputFile);
- for(;;)
- {
- char c;
- if(!bufferedInput.readChar(c))
- {
- break;
- }
-
- switch(state)
- {
- case eParseDefault:
- if(c == '/')
- {
- state = eParseSolidus;
- }
- break;
- case eParseSolidus:
- if(c == '/')
- {
- state = eParseComment;
- }
- else if(c == '*')
- {
- p = quakeEd;
- state = eParseQuakeED;
- }
- break;
- case eParseComment:
- if(c == '\n')
- {
- state = eParseDefault;
- }
- break;
- case eParseQuakeED:
- if(c == *p)
- {
- if(*(++p) == '\0')
- {
- state = eParseEntityClass;
- }
- }
- else
- {
- state = eParseDefault;
- }
- break;
- case eParseEntityClass:
- if(c == '*')
- {
- state = eParseEntityClassEnd;
- }
- else
- {
- buffer.push_back(c);
- }
- break;
- case eParseEntityClassEnd:
- if(c == '/')
- {
- e = Eclass_InitFromText(buffer.c_str());
- state = eParseDefault;
- if (e)
- collector.insert(e);
- else
- globalErrorStream() << "Error parsing: " << debugname << " in " << filename << "\n";
-
- buffer.clear();
- state = eParseDefault;
- }
- else
- {
- buffer.push_back('*');
- buffer.push_back(c);
- state = eParseEntityClass;
- }
- break;
- }
- }
+void Eclass_ScanFile( EntityClassCollector& collector, const char *filename ){
+ EntityClass *e;
+
+ TextFileInputStream inputFile( filename );
+ if ( inputFile.failed() ) {
+ globalErrorStream() << "ScanFile: " << filename << " not found\n";
+ return;
+ }
+ globalOutputStream() << "ScanFile: " << filename << "\n";
+
+ enum EParserState
+ {
+ eParseDefault,
+ eParseSolidus,
+ eParseComment,
+ eParseQuakeED,
+ eParseEntityClass,
+ eParseEntityClassEnd,
+ } state = eParseDefault;
+ const char* quakeEd = "QUAKED";
+ const char* p = 0;
+ StringBuffer buffer;
+ SingleCharacterInputStream<TextFileInputStream> bufferedInput( inputFile );
+ for (;; )
+ {
+ char c;
+ if ( !bufferedInput.readChar( c ) ) {
+ break;
+ }
+
+ switch ( state )
+ {
+ case eParseDefault:
+ if ( c == '/' ) {
+ state = eParseSolidus;
+ }
+ break;
+ case eParseSolidus:
+ if ( c == '/' ) {
+ state = eParseComment;
+ }
+ else if ( c == '*' ) {
+ p = quakeEd;
+ state = eParseQuakeED;
+ }
+ break;
+ case eParseComment:
+ if ( c == '\n' ) {
+ state = eParseDefault;
+ }
+ break;
+ case eParseQuakeED:
+ if ( c == *p ) {
+ if ( *( ++p ) == '\0' ) {
+ state = eParseEntityClass;
+ }
+ }
+ else
+ {
+ state = eParseDefault;
+ }
+ break;
+ case eParseEntityClass:
+ if ( c == '*' ) {
+ state = eParseEntityClassEnd;
+ }
+ else
+ {
+ buffer.push_back( c );
+ }
+ break;
+ case eParseEntityClassEnd:
+ if ( c == '/' ) {
+ e = Eclass_InitFromText( buffer.c_str() );
+ state = eParseDefault;
+ if ( e ) {
+ collector.insert( e );
+ }
+ else{
+ globalErrorStream() << "Error parsing: " << debugname << " in " << filename << "\n";
+ }
+
+ buffer.clear();
+ state = eParseDefault;
+ }
+ else
+ {
+ buffer.push_back( '*' );
+ buffer.push_back( c );
+ state = eParseEntityClass;
+ }
+ break;
+ }
+ }