moved rbuild.cpp per Casper's request
Added: branches/xmlbuildsystem/reactos/tools/rbuild/
Added: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.cpp
Deleted: branches/xmlbuildsystem/reactos/tools/rbuild.cpp

Copied: branches/xmlbuildsystem/reactos/tools/rbuild/rbuild.cpp (from rev 12758, branches/xmlbuildsystem/reactos/tools/rbuild.cpp)

Deleted: branches/xmlbuildsystem/reactos/tools/rbuild.cpp
--- branches/xmlbuildsystem/reactos/tools/rbuild.cpp	2005-01-03 18:44:36 UTC (rev 12758)
+++ branches/xmlbuildsystem/reactos/tools/rbuild.cpp	2005-01-03 19:29:19 UTC (rev 12759)
@@ -1,318 +0,0 @@
-// rbuild.cpp
-
-#ifdef _MSC_VER
-#pragma warning ( disable : 4786 )
-#endif//_MSC_VER
-
-#include <string>
-#include <vector>
-
-#include <stdio.h>
-#include <io.h>
-#include <assert.h>
-//#include <sys/stat.h>
-//#include <sys/types.h>
-
-using std::string;
-using std::vector;
-
-#ifdef _MSC_VER
-unsigned __int64
-#else
-unsigned long long
-#endif
-filelen ( FILE* f )
-{
-#ifdef WIN32
-	return _filelengthi64 ( _fileno(f) );
-#elif defined(UNIX)
-	struct stat64 file_stat;
-	if ( fstat64(fileno(f), &file_stat) != 0 )
-		return 0;
-	return file_stat.st_size;
-#endif
-}
-
-static const char* WS = " \t\r\n";
-static const char* WSEQ = " =\t\r\n";
-
-class XMLFile
-{
-	vector<FILE*> _f;
-	string _buf;
-	const char *_p, *_end;
-public:
-	XMLFile() {}
-	void close()
-	{
-		while ( _f.size() )
-		{
-			fclose ( _f.back() );
-			_f.pop_back();
-		}
-		_buf.resize(0);
-		_p = _end = NULL;
-	}
-	bool open ( const char* filename )
-	{
-		close();
-		FILE* f = fopen ( filename, "r" );
-		if ( !f )
-			return false;
-		unsigned long len = (unsigned long)filelen(f);
-		_buf.resize ( len );
-		fread ( &_buf[0], 1, len, f );
-		_p = _buf.c_str();
-		_end = _p + len;
-		_f.push_back ( f );
-		next_token();
-		return true;
-	}
-	// next_token() moves the pointer to next token, which may be
-	// an xml element or a text element, basically it's a glorified
-	// skipspace, normally the user of this class won't need to call
-	// this function
-	void next_token()
-	{
-		_p += strspn ( _p, WS );
-	}
-	bool next_is_text()
-	{
-		return *_p != '<';
-	}
-	bool more_tokens()
-	{
-		return _p != _end;
-	}
-	// get_token() is used to return a token, and move the pointer
-	// past the token
-	bool get_token ( string& token )
-	{
-		const char* tokend;
-		if ( *_p == '<' )
-		{
-			tokend = strchr ( _p, '>' );
-			if ( !tokend )
-				tokend = _end;
-			else
-				++tokend;
-		}
-		else
-		{
-			tokend = strchr ( _p, '<' );
-			if ( !tokend )
-				tokend = _end;
-			while ( tokend > _p && isspace(tokend[-1]) )
-				--tokend;
-		}
-		if ( tokend == _p )
-			return false;
-		token = string ( _p, tokend-_p );
-		_p = tokend;
-		next_token();
-		return true;
-	}
-#if 0
-	bool getc ( char& c )
-	{
-		while ( _bufidx >= _buf.size() )
-		{
-			static buf[4096];
-			if ( !fgets ( buf, sizeof(buf), _f.back() ) )
-			{
-				fclose ( _f.back() );
-				f.pop_back();
-				continue;
-			}
-			_buf = buf;
-			_bufidx = 0;
-			// REM TODO FIXME - check for and load includes here...
-			/*char* p = &_buf[0];
-			p += strspn ( p, " \t" );
-			if ( *p++ != '#' )
-				break;
-			p += strspn ( p, " \t" );
-			if ( strncmp ( p, "include", 7 ) )
-				break;
-			p += 7;
-			if ( !isspace(*p++) )
-				break;*/
-
-		}
-		c = _buf[_bufidx++];
-		return true;
-	}
-#endif
-};
-
-class XMLAttribute
-{
-public:
-	string name, value;
-
-	XMLAttribute() {}
-
-	XMLAttribute ( const string& name_, const string& value_ )
-		: name(name_), value(value_)
-	{
-	}
-
-	XMLAttribute ( const XMLAttribute& src )
-	{
-		name = src.name;
-		value = src.value;
-	}
-
-	XMLAttribute& operator = ( const XMLAttribute& src )
-	{
-		name = src.name;
-		value = src.value;
-		return *this;
-	}
-};
-
-class XMLElement
-{
-public:
-	string name;
-	vector<XMLAttribute> attributes;
-	vector<XMLElement*> subElements;
-	string value;
-
-	XMLElement() {}
-	// Parse() returns true if you need to look for a </tag> for
-	// this one...
-	bool Parse ( const string& token, bool& end_tag )
-	{
-		const char* p = token.c_str();
-		assert ( *p == '<' );
-		p++;
-		p += strspn ( p, WS );
-		end_tag = ( *p == '/' );
-		if ( end_tag )
-		{
-			++p;
-			p += strspn ( p, WS );
-		}
-		const char* end = strpbrk ( p, WS );
-		if ( !end )
-		{
-			end = strpbrk ( p, "/>" );
-			assert ( end );
-		}
-		name = string ( p, end-p );
-		p = end;
-		p += strspn ( p, WS );
-		while ( *p != '>' && *p != '/' )
-		{
-			end = strpbrk ( p, WSEQ );
-			if ( !end )
-			{
-				end = strpbrk ( p, "/>" );
-				assert ( end );
-			}
-			string attribute ( p, end-p ), value;
-			p = end;
-			p += strspn ( p, WS );
-			if ( *p == '=' )
-			{
-				++p;
-				p += strspn ( p, WS );
-				char quote = 0;
-				if ( strchr ( "\"'", *p ) )
-				{
-					quote = *p++;
-					end = strchr ( p, quote );
-				}
-				else
-				{
-					end = strpbrk ( p, WS );
-				}
-				if ( !end )
-				{
-					end = strchr ( p, '>' );
-					assert(end);
-					if ( end[-1] == '/' )
-						end--;
-				}
-				value = string ( p, end-p );
-				p = end;
-				if ( quote && *p == quote )
-					p++;
-				p += strspn ( p, WS );
-			}
-			attributes.push_back ( XMLAttribute ( attribute, value ) );
-		}
-		return !( *p == '/' ) && !end_tag;
-	}
-};
-
-XMLElement* XMLParse ( XMLFile& f, bool* pend_tag = NULL )
-{
-	string token;
-	if ( !f.get_token(token) )
-		return NULL;
-	XMLElement* e = new XMLElement;
-	bool end_tag;
-	if ( !e->Parse ( token, end_tag ) )
-	{
-		if ( pend_tag )
-			*pend_tag = end_tag;
-		else if ( end_tag )
-		{
-			delete e;
-			printf ( "syntax error: end tag '%s' not expected\n", token.c_str() );
-			return NULL;
-		}
-		return e;
-	}
-	while ( f.more_tokens() )
-	{
-		if ( f.next_is_text() )
-		{
-			if ( !f.get_token ( token ) )
-			{
-				printf ( "internal tool error - get_token() failed when more_tokens() returned true\n" );
-				break;
-			}
-			if ( e->subElements.size() )
-				printf ( "syntax error: mixing of inner text with sub elements\n" );
-			if ( e->value.size() )
-			{
-				printf ( "syntax error: multiple instances of inner text\n" );
-				e->value += " " + token;
-			}
-			else
-				e->value = token;
-		}
-		else
-		{
-			XMLElement* e2 = XMLParse ( f, &end_tag );
-			if ( end_tag )
-			{
-				if ( e->name != e2->name )
-					printf ( "end tag name mismatch\n" );
-				delete e2;
-				break;
-			}
-			e->subElements.push_back ( e2 );
-		}
-	}
-	return e;
-}
-
-int main ( int argc, char** argv )
-{
-	XMLFile f;
-	if ( !f.open ( "rbuild.xml" ) )
-	{
-		printf ( "couldn't open rbuild.xml!\n" );
-		return -1;
-	}
-
-	XMLElement* head = XMLParse ( f );
-
-	// REM TODO FIXME actually do something with the parsed info
-
-	return 0;
-}