move xml.h/cpp and ssprintf.h/cpp up a directory, make both rbuild and buildno use...
authorRoyce Mitchell III <royce3@ev1.net>
Sun, 27 Nov 2005 23:04:51 +0000 (23:04 +0000)
committerRoyce Mitchell III <royce3@ev1.net>
Sun, 27 Nov 2005 23:04:51 +0000 (23:04 +0000)
svn path=/trunk/; revision=19708

15 files changed:
reactos/tools/buildno/buildno.cpp
reactos/tools/buildno/buildno.mak
reactos/tools/buildno/exception.cpp [deleted file]
reactos/tools/buildno/exception.h [deleted file]
reactos/tools/buildno/ssprintf.cpp [deleted file]
reactos/tools/buildno/ssprintf.h [deleted file]
reactos/tools/buildno/xml.cpp [deleted file]
reactos/tools/buildno/xml.h [deleted file]
reactos/tools/rbuild/rbuild.dsp
reactos/tools/rbuild/rbuild.mak
reactos/tools/ssprintf.cpp [moved from reactos/tools/rbuild/ssprintf.cpp with 100% similarity]
reactos/tools/ssprintf.h [moved from reactos/tools/rbuild/ssprintf.h with 100% similarity]
reactos/tools/tools.mak
reactos/tools/xml.cpp [moved from reactos/tools/rbuild/xml.cpp with 100% similarity]
reactos/tools/xml.h [moved from reactos/tools/rbuild/xml.h with 100% similarity]

index b7868d0..c859f2d 100644 (file)
@@ -29,7 +29,6 @@
 #include <string.h>
 #include "version.h"
 #include "xml.h"
-#include "exception.h"
 
 #define FALSE 0
 #define TRUE  1
@@ -179,20 +178,19 @@ GetRev(void)
 
   try
     {
-      Path path;
       XMLElement *head;
 
       try
         {
-          head = XMLLoadFile(".svn/entries", path);
+          head = XMLLoadFile(".svn/entries");
         }
-      catch(FileNotFoundException)
+      catch(XMLFileNotFoundException)
         {
-          head = XMLLoadFile("_svn/entries", path);
+          head = XMLLoadFile("_svn/entries");
         }
       XMLElement *entries = head->subElements[0];
       for (size_t i = 0; i < entries->subElements.size(); i++)
-       {
+      {
           XMLElement *entry = entries->subElements[i];
           if ("entry" == entry->name)
             {
index bced827..f37d6c2 100644 (file)
@@ -20,38 +20,26 @@ BUILDNO_TARGET = \
 
 BUILDNO_SOURCES = $(addprefix $(BUILDNO_BASE_), \
        buildno.cpp \
-       exception.cpp \
-       ssprintf.cpp \
-       xml.cpp \
        )
 
 BUILDNO_OBJECTS = \
-  $(addprefix $(INTERMEDIATE_), $(BUILDNO_SOURCES:.cpp=.o))
+       $(addprefix $(INTERMEDIATE_), $(BUILDNO_SOURCES:.cpp=.o))
 
-BUILDNO_HOST_CXXFLAGS = -Iinclude/reactos $(TOOLS_CPPFLAGS)
+BUILDNO_HOST_CXXFLAGS = -I$(TOOLS_BASE) -Iinclude/reactos $(TOOLS_CPPFLAGS)
 
 BUILDNO_HOST_LFLAGS = $(TOOLS_LFLAGS)
 
-$(BUILDNO_TARGET): $(BUILDNO_OBJECTS) | $(BUILDNO_OUT)
+.PHONY: buildno
+buildno: $(BUILDNO_TARGET)
+
+$(BUILDNO_TARGET): $(BUILDNO_OBJECTS) $(XML_SSPRINTF_OBJECTS) | $(BUILDNO_OUT)
        $(ECHO_LD)
-       ${host_gpp} $(BUILDNO_OBJECTS) $(BUILDNO_HOST_LFLAGS) -o $@
+       ${host_gpp} $^ $(BUILDNO_HOST_LFLAGS) -o $@
 
 $(BUILDNO_INT_)buildno.o: $(BUILDNO_BASE_)buildno.cpp | $(BUILDNO_INT)
        $(ECHO_CC)
        ${host_gpp} $(BUILDNO_HOST_CXXFLAGS) -c $< -o $@
 
-$(BUILDNO_INT_)exception.o: $(BUILDNO_BASE_)exception.cpp | $(BUILDNO_INT)
-       $(ECHO_CC)
-       ${host_gpp} $(BUILDNO_HOST_CXXFLAGS) -c $< -o $@
-
-$(BUILDNO_INT_)ssprintf.o: $(BUILDNO_BASE_)ssprintf.cpp | $(BUILDNO_INT)
-       $(ECHO_CC)
-       ${host_gpp} $(BUILDNO_HOST_CXXFLAGS) -c $< -o $@
-
-$(BUILDNO_INT_)xml.o: $(BUILDNO_BASE_)xml.cpp | $(BUILDNO_INT)
-       $(ECHO_CC)
-       ${host_gpp} $(BUILDNO_HOST_CXXFLAGS) -c $< -o $@
-
 .PHONY: buildno_clean
 buildno_clean:
        -@$(rm) $(BUILDNO_TARGET) $(BUILDNO_OBJECTS) 2>$(NUL)
diff --git a/reactos/tools/buildno/exception.cpp b/reactos/tools/buildno/exception.cpp
deleted file mode 100644 (file)
index 3aa208a..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-#include "pch.h"
-
-#ifdef RBUILD
-#include "rbuild.h"
-#else
-#include "exception.h"
-#include "ssprintf.h"
-#endif
-
-using std::string;
-
-Exception::Exception ()
-{
-}
-
-Exception::Exception ( const string& message )
-{
-       Message = message;
-}
-
-Exception::Exception ( const char* format,
-                       ...)
-{
-       va_list args;
-       va_start ( args,
-                  format);
-       Message = ssvprintf ( format,
-                             args);
-       va_end ( args );
-}
-
-void Exception::SetMessage ( const char* message,
-                             va_list args)
-{
-       Message = ssvprintf ( message,
-                             args);
-}
-
-
-OutOfMemoryException::OutOfMemoryException ()
-       : Exception ( "Out of memory" )
-{
-}
-
-
-InvalidOperationException::InvalidOperationException ( const char* filename,
-                                                          const int linenumber )
-{
-       Message = ssprintf ( "%s:%d",
-                            filename,
-                            linenumber );
-}
-
-InvalidOperationException::InvalidOperationException ( const char* filename,
-                                                          const int linenumber,
-                                                          const char* message,
-                                                          ... )
-{
-       string errorMessage;
-       va_list args;
-       va_start ( args,
-                  message );
-       errorMessage = ssvprintf ( message,
-                                  args );
-       va_end ( args );
-       Message = ssprintf ( "%s:%d %s",
-                            filename,
-                            linenumber,
-                            errorMessage.c_str () );
-}
-
-
-FileNotFoundException::FileNotFoundException ( const string& filename )
-       : Exception ( "File '%s' not found.",
-                     filename.c_str() )
-{
-       Filename = filename;
-}
-
-
-AccessDeniedException::AccessDeniedException ( const string& filename)
-       : Exception ( "Access denied to file '%s'.",
-                    filename.c_str() )
-{
-       Filename = filename;
-}
-
-
-InvalidBuildFileException::InvalidBuildFileException ( const string& location,
-                                                       const char* message,
-                                                       ...)
-{
-       va_list args;
-       va_start ( args,
-                  message );
-       SetLocationMessage ( location, message, args );
-       va_end ( args );
-}
-
-InvalidBuildFileException::InvalidBuildFileException ()
-{
-}
-
-void
-InvalidBuildFileException::SetLocationMessage ( const std::string& location,
-                                                const char* message,
-                                                va_list args )
-{
-       Message = location + ": " + ssvprintf ( message, args );
-}
-
-XMLSyntaxErrorException::XMLSyntaxErrorException ( const string& location,
-                                                      const char* message,
-                                                      ... )
-{
-       va_list args;
-       va_start ( args,
-                 message );
-       SetLocationMessage ( location, message, args );
-       va_end ( args );
-}
-
-
-RequiredAttributeNotFoundException::RequiredAttributeNotFoundException (
-       const string& location,
-       const string& attributeName,
-       const string& elementName )
-       : InvalidBuildFileException ( location,
-                                     "Required attribute '%s' not found on '%s'.",
-                                     attributeName.c_str (),
-                                     elementName.c_str ())
-{
-}
-
-InvalidAttributeValueException::InvalidAttributeValueException (
-       const string& location,
-       const string& name,
-       const string& value )
-       : InvalidBuildFileException ( location,
-                                     "Attribute '%s' has an invalid value '%s'.",
-                                     name.c_str (),
-                                     value.c_str () )
-{
-       
-}
-
-BackendNameConflictException::BackendNameConflictException ( const string& name )
-       : Exception ( "Backend name conflict: '%s'",
-                    name.c_str() )
-{
-}
-
-
-UnknownBackendException::UnknownBackendException ( const string& name )
-       : Exception ( "Unknown Backend requested: '%s'",
-                     name.c_str() )
-{
-}
-
-
-UnknownModuleTypeException::UnknownModuleTypeException ( const string& location,
-                                                         int moduletype )
-       : InvalidBuildFileException ( location,
-                                     "module type requested: %i",
-                                     moduletype )
-{
-}
-
-
-InvocationFailedException::InvocationFailedException ( const std::string& command,
-                                                       int exitcode )
-       : Exception ( "Failed to execute '%s' (exit code %d)",
-                     command.c_str (),
-                     exitcode )
-{
-       Command = command;
-       ExitCode = exitcode;
-}
diff --git a/reactos/tools/buildno/exception.h b/reactos/tools/buildno/exception.h
deleted file mode 100644 (file)
index 1098064..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-#ifndef __EXCEPTION_H
-#define __EXCEPTION_H
-
-#include "pch.h"
-
-class Exception
-{
-public:
-       Exception ( const std::string& message );
-       Exception ( const char* format,
-                   ...);
-       std::string Message;
-protected:
-       Exception ();
-       void SetMessage ( const char* message,
-                         va_list args);
-};
-
-
-class InvalidOperationException : public Exception
-{
-public:
-       InvalidOperationException ( const char* filename,
-                                   const int linenumber);
-       InvalidOperationException ( const char* filename,
-                                   const int linenumber,
-                                   const char* message,
-                                   ... );
-};
-
-
-class OutOfMemoryException : public Exception
-{
-public:
-       OutOfMemoryException ();
-};
-
-
-class FileNotFoundException : public Exception
-{
-public:
-       FileNotFoundException ( const std::string& filename );
-       std::string Filename;
-};
-
-
-class AccessDeniedException : public Exception
-{
-public:
-       AccessDeniedException ( const std::string& filename );
-       std::string Filename;
-};
-
-class InvalidBuildFileException : public Exception
-{
-public:
-       InvalidBuildFileException ( const std::string& location,
-                                   const char* message,
-                                   ...);
-       void SetLocationMessage ( const std::string& location,
-                                 const char* message,
-                                 va_list args );
-protected:
-       InvalidBuildFileException ();
-};
-
-
-class XMLSyntaxErrorException : public InvalidBuildFileException
-{
-public:
-       XMLSyntaxErrorException ( const std::string& location,
-                                 const char* message,
-                                 ... );
-};
-
-
-class RequiredAttributeNotFoundException : public InvalidBuildFileException
-{
-public:
-       RequiredAttributeNotFoundException ( const std::string& location,
-                                            const std::string& attributeName,
-                                            const std::string& elementName );
-};
-
-
-class InvalidAttributeValueException : public InvalidBuildFileException
-{
-public:
-       InvalidAttributeValueException ( const std::string& location,
-                                        const std::string& name,
-                                        const std::string& value );
-};
-
-
-class BackendNameConflictException : public Exception
-{
-public:
-       BackendNameConflictException ( const std::string& name );
-};
-
-
-class UnknownBackendException : public Exception
-{
-public:
-       UnknownBackendException ( const std::string& name );
-};
-
-class UnknownModuleTypeException : public InvalidBuildFileException
-{
-public:
-       UnknownModuleTypeException ( const std::string& location,
-                                    int moduletype );
-};
-
-
-class InvocationFailedException : public Exception
-{
-public:
-       InvocationFailedException ( const std::string& command,
-                                   int exitcode );
-       std::string Command;
-       int ExitCode;
-};
-
-#endif /* __EXCEPTION_H */
diff --git a/reactos/tools/buildno/ssprintf.cpp b/reactos/tools/buildno/ssprintf.cpp
deleted file mode 100644 (file)
index 3b2bfbf..0000000
+++ /dev/null
@@ -1,1931 +0,0 @@
-// ssprintf.cpp
-
-#include "pch.h"
-
-#ifdef __FreeBSD__
-# include <stdlib.h>
-#else
-# include <malloc.h>
-#endif // __FreeBSD__
-#include <math.h>
-#include <float.h>
-#include <assert.h>
-#include "ssprintf.h"
-
-#ifdef __FreeBSD__
-# define __isnan isnan
-# define __finite finite
-# define powl __builtin_powl
-# define modfl __builtin_modfl
-#endif // _FreeBSD__
-
-#ifdef _MSC_VER
-#define alloca _alloca
-#endif//_MSC_VER
-
-#ifdef _MSC_VER
-typedef __int64 LONGLONG;
-typedef unsigned __int64 ULONGLONG;
-#else
-typedef long long LONGLONG;
-typedef unsigned long long ULONGLONG;
-#endif
-
-typedef struct {
-    unsigned int mantissa:23;
-    unsigned int exponent:8;
-    unsigned int sign:1;
-} ieee_float_t;
-
-typedef struct {
-    unsigned int mantissal:32;
-    unsigned int mantissah:20;
-    unsigned int exponent:11;
-    unsigned int sign:1;
-} ieee_double_t;
-
-typedef struct {
-    unsigned int mantissal:32;
-    unsigned int mantissah:32;
-    unsigned int exponent:15;
-    unsigned int sign:1;
-    unsigned int empty:16;
-} ieee_long_double_t;
-
-std::string
-ssprintf ( const char* fmt, ... )
-{
-       va_list arg;
-       va_start(arg, fmt);
-       std::string f = ssvprintf ( fmt, arg );
-       va_end(arg);
-       return f;
-}
-
-std::wstring
-sswprintf ( const wchar_t* fmt, ... )
-{
-       va_list arg;
-       va_start(arg, fmt);
-       std::wstring f = sswvprintf ( fmt, arg );
-       va_end(arg);
-       return f;
-}
-
-#define ZEROPAD                1       /* pad with zero */
-#define SIGN           2       /* unsigned/signed long */
-#define PLUS           4       /* show plus */
-#define SPACE          8       /* space if plus */
-#define LEFT           16      /* left justified */
-#define SPECIAL                32      /* 0x */
-#define LARGE          64      /* use 'ABCDEF' instead of 'abcdef' */
-#define ZEROTRUNC      128     /* truncate zero 's */
-
-
-static int
-skip_atoi(const char **s)
-{
-       int i=0;
-
-       while (isdigit(**s))
-               i = i*10 + *((*s)++) - '0';
-       return i;
-}
-
-static int
-skip_wtoi(const wchar_t **s)
-{
-       int i=0;
-
-       while (iswdigit(**s))
-               i = i*10 + *((*s)++) - L'0';
-       return i;
-}
-
-
-static int
-do_div(LONGLONG *n,int base)
-{
-       int __res = ((ULONGLONG) *n) % (unsigned) base;
-       *n = ((ULONGLONG) *n) / (unsigned) base;
-       return __res;
-}
-
-
-static bool
-number(std::string& f, LONGLONG num, int base, int size, int precision ,int type)
-{
-       char c,sign,tmp[66];
-       const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
-       int i;
-
-       if (type & LARGE)
-               digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-       if (type & LEFT)
-               type &= ~ZEROPAD;
-       if (base < 2 || base > 36)
-               return 0;
-       c = (type & ZEROPAD) ? '0' : ' ';
-       sign = 0;
-       if (type & SIGN) {
-               if (num < 0) {
-                       sign = '-';
-                       num = -num;
-                       size--;
-               } else if (type & PLUS) {
-                       sign = '+';
-                       size--;
-               } else if (type & SPACE) {
-                       sign = ' ';
-                       size--;
-               }
-       }
-       if (type & SPECIAL) {
-               if (base == 16)
-                       size -= 2;
-               else if (base == 8)
-                       size--;
-       }
-       i = 0;
-       if (num == 0)
-               tmp[i++]='0';
-       else while (num != 0)
-               tmp[i++] = digits[do_div(&num,base)];
-       if (i > precision)
-               precision = i;
-       size -= precision;
-       if (!(type&(ZEROPAD+LEFT)))
-               while(size-->0)
-                       f += ' ';
-       if (sign)
-               f += sign;
-       if (type & SPECIAL)
-       {
-               if (base==8)
-                       f += '0';
-               else if (base==16)
-               {
-                       f += '0';
-                       f += digits[33];
-               }
-       }
-       if (!(type & LEFT))
-       {
-               while (size-- > 0)
-                       f += c;
-       }
-       while (i < precision--)
-       {
-               f += '0';
-       }
-       while (i-- > 0)
-       {
-               f += tmp[i];
-       }
-       while (size-- > 0)
-       {
-               f += ' ';
-       }
-       return true;
-}
-
-static bool
-wnumber(std::wstring& f, LONGLONG num, int base, int size, int precision ,int type)
-{
-       wchar_t c,sign,tmp[66];
-       const wchar_t *digits = L"0123456789abcdefghijklmnopqrstuvwxyz";
-       int i;
-
-       if (type & LARGE)
-               digits = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-       if (type & LEFT)
-               type &= ~ZEROPAD;
-       if (base < 2 || base > 36)
-               return 0;
-       c = (type & ZEROPAD) ? L'0' : L' ';
-       sign = 0;
-       if (type & SIGN) {
-               if (num < 0) {
-                       sign = L'-';
-                       num = -num;
-                       size--;
-               } else if (type & PLUS) {
-                       sign = L'+';
-                       size--;
-               } else if (type & SPACE) {
-                       sign = L' ';
-
-                       size--;
-               }
-       }
-       if (type & SPECIAL) {
-               if (base == 16)
-                       size -= 2;
-               else if (base == 8)
-                       size--;
-       }
-       i = 0;
-       if (num == 0)
-               tmp[i++]=L'0';
-       else while (num != 0)
-               tmp[i++] = digits[do_div(&num,base)];
-       if (i > precision)
-               precision = i;
-       size -= precision;
-       if (!(type&(ZEROPAD+LEFT)))
-               while(size-->0)
-                       f += L' ';
-       if (sign)
-               f += sign;
-       if (type & SPECIAL)
-       {
-               if (base==8)
-                       f += L'0';
-               else if (base==16)
-               {
-                       f += L'0';
-                       f += digits[33];
-               }
-       }
-       if (!(type & LEFT))
-       {
-               while (size-- > 0)
-                       f += c;
-       }
-       while (i < precision--)
-       {
-               f += L'0';
-       }
-       while (i-- > 0)
-       {
-               f += tmp[i];
-       }
-       while (size-- > 0)
-       {
-               f += L' ';
-       }
-       return true;
-}
-
-
-static bool
-numberf(std::string& f, double __n, char exp_sign,  int size, int precision, int type)
-{
-       double exponent = 0.0;
-       double e;
-       long ie;
-
-       //int x;
-       char *buf, *tmp;
-       int i = 0;
-       int j = 0;
-       //int k = 0;
-
-       double frac, intr;
-       double p;
-       char sign;
-       char c;
-       char ro = 0;
-       int result;
-
-       union
-       {
-               double*  __n;
-               ieee_double_t*  n;
-       } n;
-       
-       n.__n = &__n;
-
-       if ( exp_sign == 'g' || exp_sign == 'G' || exp_sign == 'e' || exp_sign == 'E' ) {
-               ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff);
-               exponent = ie/3.321928;
-       }
-
-       if ( exp_sign == 'g' || exp_sign == 'G' ) {
-               type |= ZEROTRUNC;
-               if ( exponent < -4 || fabs(exponent) >= precision )
-                        exp_sign -= 2; // g -> e and G -> E
-       }
-
-       if ( exp_sign == 'e' ||  exp_sign == 'E' ) {
-               frac = modf(exponent,&e);
-               if ( frac > 0.5 )
-                       e++;
-               else if (  frac < -0.5  )
-                       e--;
-
-               result = numberf(f,__n/pow(10.0L,e),'f',size-4, precision, type);
-               if (result < 0)
-                       return false;
-               f += exp_sign;
-               size--;
-               ie = (long)e;
-               type = LEFT | PLUS;
-               if ( ie < 0 )
-                       type |= SIGN;
-
-               result = number(f,ie, 10,2, 2,type );
-               if (result < 0)
-                       return false;
-               return true;
-       }
-
-       if ( exp_sign == 'f' ) {
-               buf = (char*)alloca(4096);
-               if (type & LEFT) {
-                       type &= ~ZEROPAD;
-               }
-
-               c = (type & ZEROPAD) ? '0' : ' ';
-               sign = 0;
-               if (type & SIGN) {
-                       if (__n < 0) {
-                               sign = '-';
-                               __n = fabs(__n);
-                               size--;
-                       } else if (type & PLUS) {
-                               sign = '+';
-                               size--;
-                       } else if (type & SPACE) {
-                               sign = ' ';
-                               size--;
-                       }
-               }
-
-               frac = modf(__n,&intr);
-
-               // # flags forces a . and prevents trucation of trailing zero's
-
-               if ( precision > 0 ) {
-                       //frac = modfl(__n,&intr);
-                       i = precision-1;
-                       while (  i >= 0  ) {
-                               frac*=10.0L;
-                               frac = modf(frac, &p);
-                               buf[i] = (int)p + '0';
-                               i--;
-                       }
-                       i = precision;
-                       size -= precision;
-
-                       ro = 0;
-                       if ( frac > 0.5 ) {
-                               ro = 1;
-                       }
-
-                       if ( precision >= 1 || type & SPECIAL) {
-                               buf[i++] = '.';
-                               size--;
-                       }
-               }
-
-               if ( intr == 0.0 ) {
-                       buf[i++] = '0';
-                       size--;
-               }
-               else {
-                       while ( intr > 0.0 ) {
-                               p = intr;
-                               intr/=10.0L;
-                               modf(intr, &intr);
-
-                               p -= 10.0*intr;
-
-                               buf[i++] = (int)p + '0';
-                               size--;
-                       }
-               }
-
-               j = 0;
-               while ( j < i && ro == 1) {
-                       if ( buf[j] >= '0' && buf[j] <= '8' ) {
-                               buf[j]++;
-                               ro = 0;
-                       }
-                       else if ( buf[j] == '9' ) {
-                               buf[j] = '0';
-                       }
-                       j++;
-               }
-               if ( ro == 1 )
-                       buf[i++] = '1';
-
-               buf[i] = 0;
-
-               size -= precision;
-               if (!(type&(ZEROPAD+LEFT)))
-               {
-                       while(size-->0)
-                               f += ' ';
-               }
-               if (sign)
-               {
-                       f += sign;
-               }
-
-               if (!(type&(ZEROPAD+LEFT)))
-                       while(size-->0)
-                       {
-                               f += ' ';
-                       }
-               if (type & SPECIAL) {
-               }
-
-               if (!(type & LEFT))
-                       while (size-- > 0)
-                       {
-                               f += c;
-                       }
-
-               tmp = buf;
-               if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) )
-               {
-                       j = 0;
-                       while ( j < i && ( *tmp == '0' || *tmp == '.' ))
-                       {
-                               tmp++;
-                               i--;
-                       }
-               }
-//             else
-//                     while (i < precision--)
-//                             putc('0', f);
-               while (i-- > 0)
-               {
-                       f += tmp[i];
-               }
-               while (size-- > 0)
-               {
-                       f += ' ';
-               }
-       }
-       return true;
-}
-
-static bool
-wnumberf(std::wstring& f, double __n, wchar_t exp_sign,  int size, int precision, int type)
-{
-       double exponent = 0.0;
-       double e;
-       long ie;
-
-       int i = 0;
-       int j = 0;
-
-       double frac, intr;
-       double p;
-       wchar_t *buf, *tmp, sign, c, ro = 0;
-       int result;
-
-       union
-       {
-               double*  __n;
-               ieee_double_t*  n;
-       } n;
-       
-       n.__n = &__n;
-
-       if ( exp_sign == L'g' || exp_sign == L'G' || exp_sign == L'e' || exp_sign == L'E' ) {
-               ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff);
-               exponent = ie/3.321928;
-       }
-
-       if ( exp_sign == L'g' || exp_sign == L'G' )
-       {
-               type |= ZEROTRUNC;
-               if ( exponent < -4 || fabs(exponent) >= precision )
-                        exp_sign -= 2; // g -> e and G -> E
-       }
-
-       if ( exp_sign == L'e' ||  exp_sign == L'E' )
-       {
-               frac = modf(exponent,&e);
-               if ( frac > 0.5 )
-                       e++;
-               else if (  frac < -0.5  )
-                       e--;
-
-               result = wnumberf(f,__n/pow(10.0L,e),L'f',size-4, precision, type);
-               if (result < 0)
-                       return false;
-               f += exp_sign;
-               size--;
-               ie = (long)e;
-               type = LEFT | PLUS;
-               if ( ie < 0 )
-                       type |= SIGN;
-
-               result = wnumber(f,ie, 10,2, 2,type );
-               if (result < 0)
-                       return false;
-               return true;
-       }
-
-       if ( exp_sign == L'f' )
-       {
-               buf = (wchar_t*)alloca(4096*sizeof(wchar_t));
-               if (type & LEFT)
-                       type &= ~ZEROPAD;
-
-               c = (type & ZEROPAD) ? L'0' : L' ';
-               sign = 0;
-               if (type & SIGN)
-               {
-                       if (__n < 0)
-                       {
-                               sign = L'-';
-                               __n = fabs(__n);
-                               size--;
-                       }
-                       else if (type & PLUS)
-                       {
-                               sign = L'+';
-                               size--;
-                       }
-                       else if (type & SPACE)
-                       {
-                               sign = L' ';
-                               size--;
-                       }
-               }
-
-               frac = modf(__n,&intr);
-
-               // # flags forces a . and prevents trucation of trailing zero's
-
-               if ( precision > 0 ) {
-                       //frac = modfl(__n,&intr);
-                       i = precision-1;
-                       while (  i >= 0  ) {
-                               frac*=10.0L;
-                               frac = modf(frac, &p);
-                               buf[i] = (int)p + L'0';
-                               i--;
-                       }
-                       i = precision;
-                       size -= precision;
-
-                       ro = 0;
-                       if ( frac > 0.5 ) {
-                               ro = 1;
-                       }
-
-                       if ( precision >= 1 || type & SPECIAL) {
-                               buf[i++] = L'.';
-                               size--;
-                       }
-               }
-
-               if ( intr == 0.0 ) {
-                       buf[i++] = L'0';
-                       size--;
-               }
-               else {
-                       while ( intr > 0.0 ) {
-                               p = intr;
-                               intr/=10.0L;
-                               modf(intr, &intr);
-
-                               p -= 10.0*intr;
-
-                               buf[i++] = (int)p + L'0';
-                               size--;
-                       }
-               }
-
-               j = 0;
-               while ( j < i && ro == 1) {
-                       if ( buf[j] >= L'0' && buf[j] <= L'8' ) {
-                               buf[j]++;
-                               ro = 0;
-                       }
-                       else if ( buf[j] == L'9' ) {
-                               buf[j] = L'0';
-                       }
-                       j++;
-               }
-               if ( ro == 1 )
-                       buf[i++] = L'1';
-
-               buf[i] = 0;
-
-               size -= precision;
-               if (!(type&(ZEROPAD+LEFT)))
-               {
-                       while(size-->0)
-                               f += L' ';
-               }
-               if (sign)
-               {
-                       f += sign;
-               }
-
-               if (!(type&(ZEROPAD+LEFT)))
-                       while(size-->0)
-                       {
-                               f += L' ';
-                       }
-               if (type & SPECIAL) {
-               }
-
-               if (!(type & LEFT))
-                       while (size-- > 0)
-                       {
-                               f += c;
-                       }
-
-               tmp = buf;
-               if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) )
-               {
-                       j = 0;
-                       while ( j < i && ( *tmp == L'0' || *tmp == L'.' ))
-                       {
-                               tmp++;
-                               i--;
-                       }
-               }
-               while (i-- > 0)
-               {
-                       f += tmp[i];
-               }
-               while (size-- > 0)
-               {
-                       f += L' ';
-               }
-       }
-       return true;
-}
-
-static bool
-numberfl(std::string& f, long double __n, char exp_sign,  int size, int precision, int type)
-{
-       long double exponent = 0.0;
-       long double e;
-       long ie;
-
-       //int x;
-       char *buf, *tmp;
-       int i = 0;
-       int j = 0;
-       //int k = 0;
-
-       long double frac, intr;
-       long double p;
-       char sign;
-       char c;
-       char ro = 0;
-
-       int result;
-
-       union
-       {
-           long double*   __n;
-           ieee_long_double_t*   n;
-       } n;
-
-       n.__n = &__n;
-
-       if ( exp_sign == 'g' || exp_sign == 'G' || exp_sign == 'e' || exp_sign == 'E' ) {
-               ie = ((unsigned int)n.n->exponent - (unsigned int)0x3fff);
-               exponent = ie/3.321928;
-       }
-
-       if ( exp_sign == 'g' || exp_sign == 'G' ) {
-               type |= ZEROTRUNC;
-               if ( exponent < -4 || fabs(exponent) >= precision ) 
-                        exp_sign -= 2; // g -> e and G -> E
-       }
-
-       if ( exp_sign == 'e' || exp_sign == 'E' ) {
-               frac = modfl(exponent,&e);
-               if ( frac > 0.5 )
-                       e++;
-               else if ( frac < -0.5 )
-                       e--;
-
-               result = numberf(f,__n/powl(10.0L,e),'f',size-4, precision, type);
-               if (result < 0)
-                       return false;
-               f += exp_sign;
-               size--;
-               ie = (long)e;
-               type = LEFT | PLUS;
-               if ( ie < 0 )
-                       type |= SIGN;
-
-               result = number(f,ie, 10,2, 2,type );
-               if (result < 0)
-                       return false;
-               return true;
-
-       }
-
-       if ( exp_sign == 'f' )
-       {
-               
-               buf = (char*)alloca(4096);
-               if (type & LEFT)
-               {
-                       type &= ~ZEROPAD;
-               }
-
-               c = (type & ZEROPAD) ? '0' : ' ';
-               sign = 0;
-               if (type & SIGN)
-               {
-                       if (__n < 0)
-                       {
-                               sign = '-';
-                               __n = fabs(__n);
-                               size--;
-                       } else if (type & PLUS)
-                       {
-                               sign = '+';
-                               size--;
-                       } else if (type & SPACE)
-                       {
-                               sign = ' ';
-                               size--;
-                       }
-               }
-
-               frac = modfl(__n,&intr);
-
-               // # flags forces a . and prevents trucation of trailing zero's
-               if ( precision > 0 )
-               {
-                       //frac = modfl(__n,&intr);
-
-                       i = precision-1;
-                       while ( i >= 0  )
-                       {
-                               frac*=10.0L;
-                               frac = modfl((long double)frac, &p);
-                               buf[i] = (int)p + '0';
-                               i--;
-                       }
-                       i = precision;
-                       size -= precision;
-
-                       ro = 0;
-                       if ( frac > 0.5 )
-                       {
-                               ro = 1;
-                       }
-
-                       if ( precision >= 1 || type & SPECIAL)
-                       {
-                               buf[i++] = '.';
-                               size--;
-                       }
-               }
-
-               if ( intr == 0.0 )
-               {
-                       buf[i++] = '0';
-                       size--;
-               }
-               else
-               {
-                       while ( intr > 0.0 )
-                       {
-                               p=intr;
-                               intr/=10.0L;
-                               modfl(intr, &intr);
-
-                               p -= 10.0L*intr;
-
-                               buf[i++] = (int)p + '0';
-                               size--;
-                       }
-               }
-
-               j = 0;
-               while ( j < i && ro == 1) {
-                       if ( buf[j] >= '0' && buf[j] <= '8' )
-                       {
-                               buf[j]++;
-                               ro = 0;
-                       }
-                       else if ( buf[j] == '9' )
-                       {
-                               buf[j] = '0';
-                       }
-                       j++;
-               }
-               if ( ro == 1 )
-                       buf[i++] = '1';
-
-               buf[i] = 0;
-
-               size -= precision;
-               if (!(type&(ZEROPAD+LEFT)))
-               {
-                       while(size-->0)
-                               f += ' ';
-               }
-               if (sign)
-               {
-                       f += sign;
-               }
-
-               if (!(type&(ZEROPAD+LEFT)))
-               {
-                       while(size-->0)
-                               f += ' ';
-               }
-               if (type & SPECIAL) {
-               }
-
-               if (!(type & LEFT))
-                       while (size-- > 0)
-                       {
-                               f += c;
-                       }
-               tmp = buf;
-               if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) )
-               {
-                       j = 0;
-                       while ( j < i && ( *tmp == '0' || *tmp == '.' ))
-                       {
-                               tmp++;
-                               i--;
-                       }
-               }
-               while (i-- > 0)
-               {
-                       f += tmp[i];
-               }
-               while (size-- > 0)
-               {
-                       f += ' ';
-               }
-       }
-       return true;
-}
-
-static bool
-wnumberfl(std::wstring& f, long double __n, wchar_t exp_sign,  int size, int precision, int type)
-{
-       long double exponent = 0.0;
-       long double e;
-       long ie;
-
-       wchar_t *buf, *tmp, sign, c, ro = 0;
-       int i = 0;
-       int j = 0;
-
-       long double frac, intr;
-       long double p;
-
-       int result;
-
-       union
-       {
-           long double*   __n;
-           ieee_long_double_t*   n;
-       } n;
-
-       n.__n = &__n;
-
-       if ( exp_sign == L'g' || exp_sign == L'G' || exp_sign == L'e' || exp_sign == L'E' ) {
-               ie = ((unsigned int)n.n->exponent - (unsigned int)0x3fff);
-               exponent = ie/3.321928;
-       }
-
-       if ( exp_sign == L'g' || exp_sign == L'G' ) {
-               type |= ZEROTRUNC;
-               if ( exponent < -4 || fabs(exponent) >= precision ) 
-                        exp_sign -= 2; // g -> e and G -> E
-       }
-
-
-       if ( exp_sign == L'e' || exp_sign == L'E' ) {
-               frac = modfl(exponent,&e);
-               if ( frac > 0.5 )
-                       e++;
-               else if ( frac < -0.5 )
-                       e--;
-
-               result = wnumberf(f,__n/powl(10.0L,e),L'f',size-4, precision, type);
-               if (result < 0)
-                       return false;
-               f += exp_sign;
-               size--;
-               ie = (long)e;
-               type = LEFT | PLUS;
-               if ( ie < 0 )
-                       type |= SIGN;
-
-               result = wnumber(f,ie, 10,2, 2,type );
-               if (result < 0)
-                       return false;
-               return true;
-       }
-
-       if ( exp_sign == L'f' )
-       {
-               
-               buf = (wchar_t*)alloca(4096*sizeof(wchar_t));
-               if (type & LEFT)
-               {
-                       type &= ~ZEROPAD;
-               }
-
-               c = (type & ZEROPAD) ? L'0' : L' ';
-               sign = 0;
-               if (type & SIGN)
-               {
-                       if (__n < 0)
-                       {
-                               sign = L'-';
-                               __n = fabs(__n);
-                               size--;
-                       } else if (type & PLUS)
-                       {
-                               sign = L'+';
-                               size--;
-                       } else if (type & SPACE)
-                       {
-                               sign = L' ';
-                               size--;
-                       }
-               }
-
-               frac = modfl(__n,&intr);
-
-               // # flags forces a . and prevents trucation of trailing zero's
-               if ( precision > 0 )
-               {
-                       //frac = modfl(__n,&intr);
-
-                       i = precision-1;
-                       while ( i >= 0  )
-                       {
-                               frac*=10.0L;
-                               frac = modfl((long double)frac, &p);
-                               buf[i] = (int)p + L'0';
-                               i--;
-                       }
-                       i = precision;
-                       size -= precision;
-
-                       ro = 0;
-                       if ( frac > 0.5 )
-                       {
-                               ro = 1;
-                       }
-
-                       if ( precision >= 1 || type & SPECIAL)
-                       {
-                               buf[i++] = L'.';
-                               size--;
-                       }
-               }
-
-               if ( intr == 0.0 )
-               {
-                       buf[i++] = L'0';
-                       size--;
-               }
-               else
-               {
-                       while ( intr > 0.0 )
-                       {
-                               p=intr;
-                               intr/=10.0L;
-                               modfl(intr, &intr);
-
-                               p -= 10.0L*intr;
-
-                               buf[i++] = (int)p + L'0';
-                               size--;
-                       }
-               }
-
-               j = 0;
-               while ( j < i && ro == 1) {
-                       if ( buf[j] >= L'0' && buf[j] <= L'8' )
-                       {
-                               buf[j]++;
-                               ro = 0;
-                       }
-                       else if ( buf[j] == L'9' )
-                       {
-                               buf[j] = L'0';
-                       }
-                       j++;
-               }
-               if ( ro == 1 )
-                       buf[i++] = L'1';
-
-               buf[i] = 0;
-
-               size -= precision;
-               if (!(type&(ZEROPAD+LEFT)))
-               {
-                       while(size-->0)
-                               f += L' ';
-               }
-               if (sign)
-               {
-                       f += sign;
-               }
-
-               if (!(type&(ZEROPAD+LEFT)))
-               {
-                       while(size-->0)
-                               f += L' ';
-               }
-               if (type & SPECIAL) {
-               }
-
-               if (!(type & LEFT))
-                       while (size-- > 0)
-                       {
-                               f += c;
-                       }
-               tmp = buf;
-               if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) )
-               {
-                       j = 0;
-                       while ( j < i && ( *tmp == L'0' || *tmp == L'.' ))
-                       {
-                               tmp++;
-                               i--;
-                       }
-               }
-               while (i-- > 0)
-               {
-                       f += tmp[i];
-               }
-               while (size-- > 0)
-               {
-                       f += L' ';
-               }
-       }
-       return true;
-}
-
-static int
-do_string(std::string& f, const char* s, int len, int field_width, int precision, int flags)
-{
-       int i, done = 0;
-       if (s == NULL)
-       {
-               s = "<NULL>";
-               len = 6;
-       }
-       else
-       {
-               if (len == -1)
-               {
-                       len = 0;
-                       while ((unsigned int)len < (unsigned int)precision && s[len])
-                               len++;
-               }
-               else
-               {
-                       if ((unsigned int)len > (unsigned int)precision)
-                               len = precision;
-               }
-       }
-       if (!(flags & LEFT))
-               while (len < field_width--)
-               {
-                       f += ' ';
-                       done++;
-               }
-       for (i = 0; i < len; ++i)
-       {
-               f += *s++;
-               done++;
-       }
-       while (len < field_width--)
-       {
-               f += ' ';
-               done++;
-       }
-       return done;
-}
-
-static int
-do_wstring(std::wstring& f, const wchar_t* s, int len, int field_width, int precision, int flags)
-{
-       int i, done = 0;
-       if (s == NULL)
-       {
-               s = L"<NULL>";
-               len = 6;
-       }
-       else
-       {
-               if (len == -1)
-               {
-                       len = 0;
-                       while ((unsigned int)len < (unsigned int)precision && s[len])
-                               len++;
-               }
-               else
-               {
-                       if ((unsigned int)len > (unsigned int)precision)
-                               len = precision;
-               }
-       }
-       if (!(flags & LEFT))
-               while (len < field_width--)
-               {
-                       f += L' ';
-                       done++;
-               }
-       for (i = 0; i < len; ++i)
-       {
-               f += *s++;
-               done++;
-       }
-       while (len < field_width--)
-       {
-               f += L' ';
-               done++;
-       }
-       return done;
-}
-
-static int
-stringw(std::string& f, const wchar_t* sw, int len, int field_width, int precision, int flags)
-{
-       int i, done = 0;
-       if (sw == NULL)
-       {
-               sw = L"<NULL>";
-               len = 6;
-       }
-       else
-       {
-               if (len == -1)
-               {
-                       len = 0;
-                       while ((unsigned int)len < (unsigned int)precision && sw[len])
-                               len++;
-               }
-               else
-               {
-                       if ((unsigned int)len > (unsigned int)precision)
-                               len = precision;
-               }
-       }
-       if (!(flags & LEFT))
-               while (len < field_width--)
-               {
-                       f += ' ';
-                       done++;
-               }
-       for (i = 0; i < len; ++i)
-       {
-#define MY_MB_CUR_MAX 1
-               char mb[MY_MB_CUR_MAX];
-               int mbcount, j;
-               mbcount = wctomb(mb, *sw++);
-               if (mbcount <= 0)
-               {
-                       break;
-               }
-               for (j = 0; j < mbcount; j++)
-               {
-                       f += mb[j];
-                       done++;
-               }
-       }
-       while (len < field_width--)
-       {
-               f += ' ';
-               done++;
-       }
-       return done;
-}
-
-static int
-wstringa(std::wstring& f, const char* sa, int len, int field_width, int precision, int flags)
-{
-       int i, done = 0;
-       if (sa == NULL)
-       {
-               sa = "<NULL>";
-               len = 6;
-       }
-       else
-       {
-               if (len == -1)
-               {
-                       len = 0;
-                       while ((unsigned int)len < (unsigned int)precision && sa[len])
-                               len++;
-               }
-               else
-               {
-                       if ((unsigned int)len > (unsigned int)precision)
-                               len = precision;
-               }
-       }
-       if (!(flags & LEFT))
-               while (len < field_width--)
-               {
-                       f += L' ';
-                       done++;
-               }
-       for (i = 0; i < len;)
-       {
-               wchar_t w;
-               int mbcount;
-               mbcount = mbtowc(&w, sa, len-i);
-               if (mbcount <= 0)
-                       break;
-               f += w;
-               done++;
-               i += mbcount;
-       }
-       while (len < field_width--)
-       {
-               f += L' ';
-               done++;
-       }
-       return done;
-}
-
-#define _isnanl _isnan
-#define _finitel _finite
-
-std::string
-ssvprintf ( const char *fmt, va_list args )
-{
-       ULONGLONG num;
-       int base;
-       long double _ldouble;
-       double _double;
-       const char *s;
-       const wchar_t* sw;
-       int result;
-       std::string f;
-
-       int flags;              /* flags to number() */
-
-       int field_width;        /* width of output field */
-       int precision;          /* min. # of digits for integers; max
-                                  number of chars for from string */
-       int qualifier = 0;      /* 'h', 'l', 'L' or 'I64' for integer fields */
-
-       for (; *fmt ; ++fmt)
-       {
-               if (*fmt != '%')
-               {
-                       f += *fmt;
-                       continue;
-               }
-
-               /* process flags */
-               flags = 0;
-               repeat:
-                       ++fmt;          /* this also skips first '%' */
-                       switch (*fmt) {
-                               case '-': flags |= LEFT; goto repeat;
-                               case '+': flags |= PLUS; goto repeat;
-                               case ' ': flags |= SPACE; goto repeat;
-                               case '#': flags |= SPECIAL; goto repeat;
-                               case '0': flags |= ZEROPAD; goto repeat;
-                               }
-
-               /* get field width */
-               field_width = -1;
-               if (isdigit(*fmt))
-                       field_width = skip_atoi(&fmt);
-               else if (*fmt == '*') {
-                       ++fmt;
-                       /* it's the next argument */
-                       field_width = va_arg(args, int);
-                       if (field_width < 0) {
-                               field_width = -field_width;
-                               flags |= LEFT;
-                       }
-               }
-
-               /* get the precision */
-               precision = -1;
-               if (*fmt == '.') {
-                       ++fmt;
-                       if (isdigit(*fmt))
-                               precision = skip_atoi(&fmt);
-                       else if (*fmt == '*') {
-                               ++fmt;
-                               /* it's the next argument */
-                               precision = va_arg(args, int);
-                       }
-                       if (precision < 0)
-                               precision = 0;
-               }
-
-               /* get the conversion qualifier */
-               qualifier = 0;
-               // %Z can be just stand alone or as size_t qualifier
-               if ( *fmt == 'Z' ) {
-                       qualifier = *fmt;
-                       switch ( *(fmt+1)) {
-                               case 'o':
-                               case 'b':
-                               case 'X':
-                               case 'x':
-                               case 'd':
-                               case 'i':
-                               case 'u':
-                                       ++fmt;
-                                       break;
-                               default:
-                                       break;
-                       }
-               } else if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'w') {
-                       qualifier = *fmt;
-                       ++fmt;
-               } else if (*fmt == 'I' && *(fmt+1) == '6' && *(fmt+2) == '4') {
-                       qualifier = *fmt;
-                       fmt += 3;
-               }
-
-               // go fine with ll instead of L
-               if ( *fmt == 'l' ) {
-                       ++fmt;
-                       qualifier = 'L';
-               }
-
-               /* default base */
-               base = 10;
-
-               switch (*fmt) {
-               case 'c':
-                       if (!(flags & LEFT))
-                               while (--field_width > 0)
-                               {
-                                       f += ' ';
-                               }
-                       if (qualifier == 'l' || qualifier == 'w')
-                       {
-                               f += (char)(unsigned char)(wchar_t) va_arg(args,int);
-                       }
-                       else
-                       {
-                               f += (char)(unsigned char) va_arg(args,int);
-                       }
-                       while (--field_width > 0)
-                       {
-                               f += ' ';
-                       }
-                       continue;
-
-               case 'C':
-                       if (!(flags & LEFT))
-                               while (--field_width > 0)
-                               {
-                                       f += ' ';
-                               }
-                       if (qualifier == 'h')
-                       {
-                               f += (char)(unsigned char) va_arg(args,int);
-                       }
-                       else
-                       {
-                               f += (char)(unsigned char)(wchar_t) va_arg(args,int);
-                       }
-                       while (--field_width > 0)
-                       {
-                               f += ' ';
-                       }
-                       continue;
-
-               case 's':
-                       if (qualifier == 'l' || qualifier == 'w') {
-                               /* print unicode string */
-                               sw = va_arg(args, wchar_t *);
-                               result = stringw(f, sw, -1, field_width, precision, flags);
-                       } else {
-                               /* print ascii string */
-                               s = va_arg(args, char *);
-                               result = do_string(f, s, -1, field_width, precision, flags);
-                       }
-                       if (result < 0)
-                       {
-                               assert(!"TODO FIXME handle error better");
-                               return f;
-                       }
-                       continue;
-
-               case 'S':
-                       if (qualifier == 'h') {
-                               /* print ascii string */
-                               s = va_arg(args, char *);
-                               result = do_string(f, s, -1, field_width, precision, flags);
-                       } else {
-                               /* print unicode string */
-                               sw = va_arg(args, wchar_t *);
-                               result = stringw(f, sw, -1, field_width, precision, flags);
-                       }
-                       if (result < 0)
-                       {
-                               assert(!"TODO FIXME handle error better");
-                               return f;
-                       }
-                       continue;
-
-               /*case 'Z':
-                       if (qualifier == 'w') {
-                               // print counted unicode string
-                               PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING);
-                               if ((pus == NULL) || (pus->Buffer == NULL)) {
-                                       sw = NULL;
-                                       len = -1;
-                               } else {
-                                       sw = pus->Buffer;
-                                       len = pus->Length / sizeof(WCHAR);
-                               }
-                               result = stringw(f, sw, len, field_width, precision, flags);
-                       } else {
-                               // print counted ascii string
-                               PANSI_STRING pas = va_arg(args, PANSI_STRING);
-                               if ((pas == NULL) || (pas->Buffer == NULL)) {
-                                       s = NULL;
-                                       len = -1;
-                               } else {
-                                       s = pas->Buffer;
-                                       len = pas->Length;
-                               }
-                               result = string(f, s, -1, field_width, precision, flags);
-                       }
-                       if (result < 0)
-                               return -1;
-                       continue;*/
-
-               case 'e':
-               case 'E':
-               case 'f':
-               case 'g':
-               case 'G':
-                       if (qualifier == 'l' || qualifier == 'L' ) {
-                               _ldouble = va_arg(args, long double);
-                       
-                               if ( _isnanl(_ldouble) )
-                               {
-                                       f += "Nan";
-                               }
-                               else if ( !_finitel(_ldouble) )
-                               {
-                                       if ( _ldouble < 0 )
-                                               f += "-Inf";
-                                       else
-                                               f += "+Inf";
-                               } else {
-                                       if ( precision == -1 )
-                                               precision = 6;
-                                       result = numberfl(f,_ldouble,*fmt,field_width,precision,flags);
-                                       if (result < 0)
-                                       {
-                                               assert(!"TODO FIXME handle error better");
-                                               return f;
-                                       }
-                               }
-                       } else {
-                               _double = (double)va_arg(args, double);
-
-                               if ( _isnan(_double) )
-                               {
-                                       f += "Nan";
-                               }
-                               else if ( !_finite(_double) )
-                               {
-                                       if ( _double < 0 )
-                                               f += "-Inf";
-                                       else
-                                               f += "+Inf";
-                               }
-                               else
-                               {
-                                       if ( precision == -1 )
-                                               precision = 6;
-                                       result = numberf(f,_double,*fmt,field_width,precision,flags);
-                                       if (result < 0)
-                                       {
-                                               assert(!"TODO FIXME handle error better");
-                                               return f;
-                                       }
-                               }
-                       }
-                       continue;
-
-               case 'p':
-                       if (field_width == -1) {
-                               field_width = 2*sizeof(void *);
-                               flags |= ZEROPAD;
-                       }
-                       result = number(f,
-                                       (unsigned long) va_arg(args, void *), 16,
-                                       field_width, precision, flags);
-                       if (result < 0)
-                       {
-                               assert(!"TODO FIXME handle error better");
-                               return f;
-                       }
-                       continue;
-
-               case 'n':
-                       if (qualifier == 'l') {
-                               long * ip = va_arg(args, long *);
-                               *ip = 0;
-                       } else {
-                               int * ip = va_arg(args, int *);
-                               *ip = 0;
-                       }
-                       continue;
-
-               /* integer number formats - set up the flags and "break" */
-               case 'o':
-                       base = 8;
-                       break;
-
-               case 'b':
-                       base = 2;
-                       break;
-
-               case 'X':
-                       flags |= LARGE;
-               case 'x':
-                       base = 16;
-                       break;
-
-               case 'd':
-               case 'i':
-                       flags |= SIGN;
-               case 'u':
-                       break;
-
-               default:
-                       if (*fmt != '%')
-                       {
-                               f += '%';
-                       }
-                       if (*fmt)
-                       {
-                               f += *fmt;
-                       }
-                       else
-                               --fmt;
-                       continue;
-               }
-
-               if (qualifier == 'I')
-                       num = va_arg(args, ULONGLONG);
-               else if (qualifier == 'l') {
-                       if (flags & SIGN)
-                               num = va_arg(args, long);
-                       else
-                               num = va_arg(args, unsigned long);
-               }
-               else if (qualifier == 'h') {
-                       if (flags & SIGN)
-                               num = va_arg(args, int);
-                       else
-                               num = va_arg(args, unsigned int);
-               }
-               else if (flags & SIGN)
-                       num = va_arg(args, int);
-               else
-                       num = va_arg(args, unsigned int);
-               result = number(f, num, base, field_width, precision, flags);
-               if (result < 0)
-               {
-                       assert(!"TODO FIXME handle error better");
-                       return f;
-               }
-       }
-       //putc('\0',f);
-       return f;
-}
-
-std::wstring
-sswvprintf ( const wchar_t* fmt, va_list args )
-{
-       ULONGLONG num;
-       int base;
-       long double _ldouble;
-       double _double;
-       const wchar_t* s;
-       const char* sa;
-       int result;
-       std::wstring f;
-
-       int flags;              /* flags to number() */
-
-       int field_width;        /* width of output field */
-       int precision;          /* min. # of digits for integers; max
-                                  number of chars for from string */
-       int qualifier = 0;      /* 'h', 'l', 'L' or 'I64' for integer fields */
-
-       for (; *fmt ; ++fmt)
-       {
-               if (*fmt != L'%')
-               {
-                       f += *fmt;
-                       continue;
-               }
-
-               /* process flags */
-               flags = 0;
-               repeat:
-                       ++fmt;          /* this also skips first '%' */
-                       switch (*fmt) {
-                               case L'-': flags |= LEFT; goto repeat;
-                               case L'+': flags |= PLUS; goto repeat;
-                               case L' ': flags |= SPACE; goto repeat;
-                               case L'#': flags |= SPECIAL; goto repeat;
-                               case L'0': flags |= ZEROPAD; goto repeat;
-                               }
-
-               /* get field width */
-               field_width = -1;
-               if (isdigit(*fmt))
-                       field_width = skip_wtoi(&fmt);
-               else if (*fmt == L'*') {
-                       ++fmt;
-                       /* it's the next argument */
-                       field_width = va_arg(args, int);
-                       if (field_width < 0) {
-                               field_width = -field_width;
-                               flags |= LEFT;
-                       }
-               }
-
-               /* get the precision */
-               precision = -1;
-               if (*fmt == L'.') {
-                       ++fmt;
-                       if (iswdigit(*fmt))
-                               precision = skip_wtoi(&fmt);
-                       else if (*fmt == L'*') {
-                               ++fmt;
-                               /* it's the next argument */
-                               precision = va_arg(args, int);
-                       }
-                       if (precision < 0)
-                               precision = 0;
-               }
-
-               /* get the conversion qualifier */
-               qualifier = 0;
-               // %Z can be just stand alone or as size_t qualifier
-               if ( *fmt == L'Z' ) {
-                       qualifier = *fmt;
-                       switch ( *(fmt+1)) {
-                               case L'o':
-                               case L'b':
-                               case L'X':
-                               case L'x':
-                               case L'd':
-                               case L'i':
-                               case L'u':
-                                       ++fmt;
-                                       break;
-                               default:
-                                       break;
-                       }
-               } else if (*fmt == L'h' || *fmt == L'l' || *fmt == L'L' || *fmt == L'w') {
-                       qualifier = *fmt;
-                       ++fmt;
-               } else if (*fmt == L'I' && *(fmt+1) == L'6' && *(fmt+2) == L'4') {
-                       qualifier = *fmt;
-                       fmt += 3;
-               }
-
-               // go fine with ll instead of L
-               if ( *fmt == L'l' ) {
-                       ++fmt;
-                       qualifier = L'L';
-               }
-
-               /* default base */
-               base = 10;
-
-               switch (*fmt) {
-               case L'c':
-                       if (!(flags & LEFT))
-                               while (--field_width > 0)
-                               {
-                                       f += L' ';
-                               }
-                       if ( qualifier == L'h' )
-                       {
-                               f += (wchar_t)(char)(unsigned char) va_arg(args,int);
-                       }
-                       else
-                       {
-                               f += (wchar_t) va_arg(args,int);
-                       }
-                       while (--field_width > 0)
-                       {
-                               f += ' ';
-                       }
-                       continue;
-
-               case 'C':
-                       if (!(flags & LEFT))
-                               while (--field_width > 0)
-                               {
-                                       f += L' ';
-                               }
-                       if (qualifier == L'l' || qualifier == L'w')
-                       {
-                               f += (wchar_t) va_arg(args,int);
-                       }
-                       else
-                       {
-                               f += (wchar_t)(char)(unsigned char) va_arg(args,int);
-                       }
-                       while (--field_width > 0)
-                       {
-                               f += L' ';
-                       }
-                       continue;
-
-               case 's':
-                       if (qualifier == L'h') {
-                               /* print ascii string */
-                               sa = va_arg(args, char *);
-                               result = wstringa(f, sa, -1, field_width, precision, flags);
-                       } else {
-                               /* print unicode string */
-                               s = va_arg(args, wchar_t *);
-                               result = do_wstring(f, s, -1, field_width, precision, flags);
-                       }
-                       if (result < 0)
-                       {
-                               assert(!"TODO FIXME handle error better");
-                               return f;
-                       }
-                       continue;
-
-               case 'S':
-                       if (qualifier == L'l' || qualifier == L'w') {
-                               /* print unicode string */
-                               s = va_arg(args, wchar_t *);
-                               result = do_wstring(f, s, -1, field_width, precision, flags);
-                       } else {
-                               /* print ascii string */
-                               sa = va_arg(args, char *);
-                               result = wstringa(f, sa, -1, field_width, precision, flags);
-                       }
-                       if (result < 0)
-                       {
-                               assert(!"TODO FIXME handle error better");
-                               return f;
-                       }
-                       continue;
-
-               case L'e':
-               case L'E':
-               case L'f':
-               case L'g':
-               case L'G':
-                       if (qualifier == L'l' || qualifier == L'L' )
-                       {
-                               _ldouble = va_arg(args, long double);
-                       
-                               if ( _isnanl(_ldouble) )
-                               {
-                                       f += L"Nan";
-                               }
-                               else if ( !_finitel(_ldouble) )
-                               {
-                                       if ( _ldouble < 0 )
-                                               f += L"-Inf";
-                                       else
-                                               f += L"+Inf";
-                               } else {
-                                       if ( precision == -1 )
-                                               precision = 6;
-                                       result = wnumberfl(f,_ldouble,*fmt,field_width,precision,flags);
-                                       if (result < 0)
-                                       {
-                                               assert(!"TODO FIXME handle error better");
-                                               return f;
-                                       }
-                               }
-                       } else {
-                               _double = (double)va_arg(args, double);
-
-                               if ( _isnan(_double) )
-                               {
-                                       f += L"Nan";
-                               }
-                               else if ( !_finite(_double) )
-                               {
-                                       if ( _double < 0 )
-                                               f += L"-Inf";
-                                       else
-                                               f += L"+Inf";
-                               }
-                               else
-                               {
-                                       if ( precision == -1 )
-                                               precision = 6;
-                                       result = wnumberf(f,_double,*fmt,field_width,precision,flags);
-                                       if (result < 0)
-                                       {
-                                               assert(!"TODO FIXME handle error better");
-                                               return f;
-                                       }
-                               }
-                       }
-                       continue;
-
-               case L'p':
-                       if (field_width == -1) {
-                               field_width = 2*sizeof(void *);
-                               flags |= ZEROPAD;
-                       }
-                       result = wnumber(f,
-                                       (unsigned long) va_arg(args, void *), 16,
-                                       field_width, precision, flags);
-                       if (result < 0)
-                       {
-                               assert(!"TODO FIXME handle error better");
-                               return f;
-                       }
-                       continue;
-
-               case L'n':
-                       if (qualifier == L'l') {
-                               long * ip = va_arg(args, long *);
-                               *ip = 0;
-                       } else {
-                               int * ip = va_arg(args, int *);
-                               *ip = 0;
-                       }
-                       continue;
-
-               /* integer number formats - set up the flags and "break" */
-               case L'o':
-                       base = 8;
-                       break;
-
-               case L'b':
-                       base = 2;
-                       break;
-
-               case L'X':
-                       flags |= LARGE;
-               case L'x':
-                       base = 16;
-                       break;
-
-               case L'd':
-               case L'i':
-                       flags |= SIGN;
-               case L'u':
-                       break;
-
-               default:
-                       if (*fmt != L'%')
-                       {
-                               f += L'%';
-                       }
-                       if (*fmt)
-                       {
-                               f += *fmt;
-                       }
-                       else
-                               --fmt;
-                       continue;
-               }
-
-               if (qualifier == L'I')
-                       num = va_arg(args, ULONGLONG);
-               else if (qualifier == L'l') {
-                       if (flags & SIGN)
-                               num = va_arg(args, long);
-                       else
-                               num = va_arg(args, unsigned long);
-               }
-               else if (qualifier == L'h') {
-                       if (flags & SIGN)
-                               num = va_arg(args, int);
-                       else
-                               num = va_arg(args, unsigned int);
-               }
-               else if (flags & SIGN)
-                       num = va_arg(args, int);
-               else
-                       num = va_arg(args, unsigned int);
-               result = wnumber(f, num, base, field_width, precision, flags);
-               if (result < 0)
-               {
-                       assert(!"TODO FIXME handle error better");
-                       return f;
-               }
-       }
-       //putc('\0',f);
-       return f;
-}
diff --git a/reactos/tools/buildno/ssprintf.h b/reactos/tools/buildno/ssprintf.h
deleted file mode 100644 (file)
index c7a6d2d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-// ssprintf.h
-
-#ifndef SSPRINTF_H
-#define SSPRINTF_H
-
-#include <string>
-#include <stdarg.h>
-
-std::string ssprintf ( const char* fmt, ... );
-std::string ssvprintf ( const char* fmt, va_list args );
-
-std::wstring sswprintf ( const wchar_t* fmt, ... );
-std::wstring sswvprintf ( const wchar_t* fmt, va_list args );
-
-#ifdef _UNICODE
-#define sstprintf sswprintf
-#define sstvprintf sswvprintf
-#else
-#define sstprintf ssprintf
-#define sstvprintf ssvprintf
-#endif
-
-#endif//SSPRINTF_H
diff --git a/reactos/tools/buildno/xml.cpp b/reactos/tools/buildno/xml.cpp
deleted file mode 100644 (file)
index 1260720..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-// xml.cpp
-
-#include "pch.h"
-
-#ifdef _MSC_VER
-#define MAX_PATH _MAX_PATH
-#endif
-
-#ifdef WIN32
-#      include <direct.h>
-#      include <io.h>
-#else
-#      include <sys/stat.h>
-#      define MAX_PATH PATH_MAX
-#endif
-#include <assert.h>
-
-#include "xml.h"
-#include "exception.h"
-#include "ssprintf.h"
-
-using std::string;
-using std::vector;
-
-#ifdef WIN32
-#define getcwd _getcwd
-#endif//WIN32
-
-static const char* WS = " \t\r\n";
-static const char* WSEQ = " =\t\r\n";
-
-string working_directory;
-
-class XMLInclude
-{
-public:
-       XMLElement *e;
-       Path path;
-
-       XMLInclude ( XMLElement* e_, const Path& path_ )
-               : e(e_), path(path_)
-       {
-       }
-};
-
-class XMLIncludes : public vector<XMLInclude*>
-{
-public:
-       ~XMLIncludes()
-       {
-               for ( size_t i = 0; i < this->size(); i++ )
-                       delete (*this)[i];
-       }
-};
-
-void
-InitWorkingDirectory()
-{
-       // store the current directory for path calculations
-       working_directory.resize ( _MAX_PATH );
-       working_directory[0] = 0;
-       getcwd ( &working_directory[0], working_directory.size() );
-       working_directory.resize ( strlen ( working_directory.c_str() ) );
-}
-
-#ifdef _MSC_VER
-unsigned __int64
-#else
-unsigned long long
-#endif
-filelen ( FILE* f )
-{
-#ifdef WIN32
-        return _filelengthi64 ( _fileno(f) );
-#else
-# ifdef __FreeBSD__
-        struct stat file_stat;
-        if ( fstat(fileno(f), &file_stat) != 0 )
-# else
-        struct stat64 file_stat;
-        if ( fstat64(fileno(f), &file_stat) != 0 )
-# endif // __FreeBSD__
-                return 0;
-        return file_stat.st_size;
-
-#endif // WIN32
-}
-
-Path::Path()
-{
-       if ( !working_directory.size() )
-               InitWorkingDirectory();
-       string s ( working_directory );
-       const char* p = strtok ( &s[0], "/\\" );
-       while ( p )
-       {
-               if ( *p )
-                       path.push_back ( p );
-               p = strtok ( NULL, "/\\" );
-       }
-}
-
-Path::Path ( const Path& cwd, const string& file )
-{
-       string s ( cwd.Fixup ( file, false ) );
-       const char* p = strtok ( &s[0], "/\\" );
-       while ( p )
-       {
-               if ( *p )
-                       path.push_back ( p );
-               p = strtok ( NULL, "/\\" );
-       }
-}
-
-string
-Path::Fixup ( const string& file, bool include_filename ) const
-{
-       if ( strchr ( "/\\", file[0] )
-#ifdef WIN32
-               // this squirreliness is b/c win32 has drive letters and *nix doesn't...
-               || file[1] == ':'
-#endif//WIN32
-               )
-       {
-               return file;
-       }
-       vector<string> pathtmp ( path );
-       string tmp ( file );
-       const char* prev = strtok ( &tmp[0], "/\\" );
-       const char* p = strtok ( NULL, "/\\" );
-       while ( p )
-       {
-               if ( !strcmp ( prev, "." ) )
-                       ; // do nothing
-               else if ( !strcmp ( prev, ".." ) )
-               {
-                       // this squirreliness is b/c win32 has drive letters and *nix doesn't...
-#ifdef WIN32
-                       if ( pathtmp.size() > 1 )
-#else
-                       if ( pathtmp.size() )
-#endif
-                               pathtmp.resize ( pathtmp.size() - 1 );
-               }
-               else
-                       pathtmp.push_back ( prev );
-               prev = p;
-               p = strtok ( NULL, "/\\" );
-       }
-       if ( include_filename )
-               pathtmp.push_back ( prev );
-
-       // reuse tmp variable to return recombined path
-       tmp.resize(0);
-       for ( size_t i = 0; i < pathtmp.size(); i++ )
-       {
-               // this squirreliness is b/c win32 has drive letters and *nix doesn't...
-#ifdef WIN32
-               if ( i ) tmp += "/";
-#else
-               tmp += "/";
-#endif
-               tmp += pathtmp[i];
-       }
-       return tmp;
-}
-
-/*static*/ string
-Path::RelativeFromWorkingDirectory ( const string& path )
-{
-       vector<string> vwork, vpath, vout;
-       Path::Split ( vwork, working_directory, true );
-       Path::Split ( vpath, path, true );
-#ifdef WIN32
-       // this squirreliness is b/c win32 has drive letters and *nix doesn't...
-       // not possible to do relative across different drive letters
-       if ( vwork[0] != vpath[0] )
-               return path;
-#endif
-       size_t i = 0;
-       while ( i < vwork.size() && i < vpath.size() && vwork[i] == vpath[i] )
-               ++i;
-       if ( i < vwork.size() )
-       {
-               // path goes above our working directory, we will need some ..'s
-               for ( size_t j = 0; j < i; j++ )
-                       vout.push_back ( ".." );
-       }
-       while ( i < vpath.size() )
-               vout.push_back ( vpath[i++] );
-
-       // now merge vout into a string again
-       string out = ".";
-       for ( i = 0; i < vout.size(); i++ )
-       {
-               out += "/" + vout[i];
-       }
-       return out;
-}
-
-/*static*/ void
-Path::Split ( vector<string>& out,
-              const string& path,
-              bool include_last )
-{
-       string s ( path );
-       const char* prev = strtok ( &s[0], "/\\" );
-       const char* p = strtok ( NULL, "/\\" );
-       out.resize ( 0 );
-       while ( p )
-       {
-               out.push_back ( prev );
-               prev = p;
-               p = strtok ( NULL, "/\\" );
-       }
-       if ( include_last )
-               out.push_back ( prev );
-}
-
-XMLFile::XMLFile()
-{
-}
-
-void
-XMLFile::close()
-{
-       _buf.resize(0);
-       _p = _end = NULL;
-}
-
-bool
-XMLFile::open(const string& filename_)
-{
-       close();
-       FILE* f = fopen ( filename_.c_str(), "rb" );
-       if ( !f )
-               return false;
-       unsigned long len = (unsigned long)filelen(f);
-       _buf.resize ( len );
-       fread ( &_buf[0], 1, len, f );
-       fclose ( f );
-       _p = _buf.c_str();
-       _end = _p + len;
-       _filename = filename_;
-       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
-XMLFile::next_token()
-{
-       _p += strspn ( _p, WS );
-}
-
-bool
-XMLFile::next_is_text()
-{
-       return *_p != '<';
-}
-
-bool
-XMLFile::more_tokens()
-{
-       return _p != _end;
-}
-
-// get_token() is used to return a token, and move the pointer
-// past the token
-bool
-XMLFile::get_token(string& token)
-{
-       const char* tokend;
-       if ( !strncmp ( _p, "<!--", 4 ) )
-       {
-               tokend = strstr ( _p, "-->" );
-               if ( !tokend )
-                       tokend = _end;
-               else
-                       tokend += 3;
-       }
-       else if ( !strncmp ( _p, "<?", 2 ) )
-       {
-               tokend = strstr ( _p, "?>" );
-               if ( !tokend )
-                       tokend = _end;
-               else
-                       tokend += 2;
-       }
-       else 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;
-}
-
-string
-XMLFile::Location() const
-{
-       int line = 1;
-       const char* p = strchr ( _buf.c_str(), '\n' );
-       while ( p && p < _p )
-       {
-               ++line;
-               p = strchr ( p+1, '\n' );
-       }
-       return ssprintf ( "%s(%i)",_filename.c_str(), line );
-}
-
-XMLAttribute::XMLAttribute()
-{
-}
-
-XMLAttribute::XMLAttribute(const string& name_,
-                           const string& value_)
-       : name(name_), value(value_)
-{
-}
-
-XMLAttribute::XMLAttribute ( const XMLAttribute& src )
-       : name(src.name), value(src.value)
-{
-
-}
-
-XMLAttribute& XMLAttribute::operator = ( const XMLAttribute& src )
-{
-       name = src.name;
-       value = src.value;
-       return *this;
-}
-
-XMLElement::XMLElement ( const string& location_ )
-       : location(location_),
-         parentElement(NULL)
-{
-}
-
-XMLElement::~XMLElement()
-{
-       size_t i;
-       for ( i = 0; i < attributes.size(); i++ )
-               delete attributes[i];
-       for ( i = 0; i < subElements.size(); i++ )
-               delete subElements[i];
-}
-
-void
-XMLElement::AddSubElement ( XMLElement* e )
-{
-       subElements.push_back ( e );
-       e->parentElement = this;
-}
-
-// Parse()
-// This function takes a single xml tag ( i.e. beginning with '<' and
-// ending with '>', and parses out it's tag name and constituent
-// attributes.
-// Return Value: returns true if you need to look for a </tag> for
-// the one it just parsed...
-bool
-XMLElement::Parse(const string& token,
-                  bool& end_tag)
-{
-       const char* p = token.c_str();
-       assert ( *p == '<' );
-       ++p;
-       p += strspn ( p, WS );
-
-       // check if this is a comment
-       if ( !strncmp ( p, "!--", 3 ) )
-       {
-               name = "!--";
-               end_tag = false;
-               return false; // never look for end tag to a comment
-       }
-
-       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 );
-               }
-               else if ( name[0] != '!' )
-               {
-                       throw XMLSyntaxErrorException ( location,
-                                                       "attributes must have values" );
-               }
-               attributes.push_back ( new XMLAttribute ( attribute, value ) );
-       }
-       return !( *p == '/' ) && !end_tag;
-}
-
-XMLAttribute*
-XMLElement::GetAttribute ( const string& attribute,
-                           bool required )
-{
-       // this would be faster with a tree-based container, but our attribute
-       // lists are likely to stay so short as to not be an issue.
-       for ( size_t i = 0; i < attributes.size(); i++ )
-       {
-               if ( attribute == attributes[i]->name )
-                       return attributes[i];
-       }
-       if ( required )
-       {
-               throw RequiredAttributeNotFoundException ( location,
-                                                          attribute,
-                                                          name );
-       }
-       return NULL;
-}
-
-const XMLAttribute*
-XMLElement::GetAttribute ( const string& attribute,
-                           bool required ) const
-{
-       // this would be faster with a tree-based container, but our attribute
-       // lists are likely to stay so short as to not be an issue.
-       for ( size_t i = 0; i < attributes.size(); i++ )
-       {
-               if ( attribute == attributes[i]->name )
-                       return attributes[i];
-       }
-       if ( required )
-       {
-               throw RequiredAttributeNotFoundException ( location,
-                                                          attribute,
-                                                          name );
-       }
-       return NULL;
-}
-
-// XMLParse()
-// This function reads a "token" from the file loaded in XMLFile
-// if it finds a tag that is non-singular, it parses sub-elements and/or
-// inner text into the XMLElement that it is building to return.
-// Return Value: an XMLElement allocated via the new operator that contains
-// it's parsed data. Keep calling this function until it returns NULL
-// (no more data)
-XMLElement*
-XMLParse(XMLFile& f,
-         XMLIncludes* includes,
-         const Path& path,
-         bool* pend_tag = NULL )
-{
-       string token;
-       if ( !f.get_token(token) )
-               return NULL;
-       bool end_tag, is_include = false;
-
-       while ( token[0] != '<'
-               || !strncmp ( token.c_str(), "<!--", 4 )
-               || !strncmp ( token.c_str(), "<?", 2 ) )
-       {
-               if ( token[0] != '<' )
-                       throw XMLSyntaxErrorException ( f.Location(),
-                                                       "expecting xml tag, not '%s'",
-                                                       token.c_str() );
-               if ( !f.get_token(token) )
-                       return NULL;
-       }
-
-       XMLElement* e = new XMLElement ( f.Location() );
-       bool bNeedEnd = e->Parse ( token, end_tag );
-
-       if ( e->name == "xi:include" && includes )
-       {
-               includes->push_back ( new XMLInclude ( e, path ) );
-               is_include = true;
-       }
-
-       if ( !bNeedEnd )
-       {
-               if ( pend_tag )
-                       *pend_tag = end_tag;
-               else if ( end_tag )
-               {
-                       delete e;
-                       throw XMLSyntaxErrorException ( f.Location(),
-                                                       "end tag '%s' not expected",
-                                                       token.c_str() );
-                       return NULL;
-               }
-               return e;
-       }
-       bool bThisMixingErrorReported = false;
-       while ( f.more_tokens() )
-       {
-               if ( f.next_is_text() )
-               {
-                       if ( !f.get_token ( token ) || !token.size() )
-                       {
-                               throw InvalidBuildFileException (
-                                       f.Location(),
-                                       "internal tool error - get_token() failed when more_tokens() returned true" );
-                               break;
-                       }
-                       if ( e->subElements.size() && !bThisMixingErrorReported )
-                       {
-                               throw XMLSyntaxErrorException ( f.Location(),
-                                                               "mixing of inner text with sub elements" );
-                               bThisMixingErrorReported = true;
-                       }
-                       if ( strchr ( token.c_str(), '>' ) )
-                       {
-                               throw XMLSyntaxErrorException ( f.Location(),
-                                                               "invalid symbol '>'" );
-                       }
-                       if ( e->value.size() )
-                       {
-                               throw XMLSyntaxErrorException ( f.Location(),
-                                                               "multiple instances of inner text" );
-                               e->value += " " + token;
-                       }
-                       else
-                               e->value = token;
-               }
-               else
-               {
-                       XMLElement* e2 = XMLParse ( f, is_include ? NULL : includes, path, &end_tag );
-                       if ( !e2 )
-                       {
-                               throw InvalidBuildFileException (
-                                       e->location,
-                                       "end of file found looking for end tag" );
-                               break;
-                       }
-                       if ( end_tag )
-                       {
-                               if ( e->name != e2->name )
-                               {
-                                       delete e2;
-                                       throw XMLSyntaxErrorException ( f.Location(),
-                                                                       "end tag name mismatch" );
-                                       break;
-                               }
-                               delete e2;
-                               break;
-                       }
-                       if ( e->value.size() && !bThisMixingErrorReported )
-                       {
-                               throw XMLSyntaxErrorException ( f.Location(),
-                                                               "mixing of inner text with sub elements" );
-                               bThisMixingErrorReported = true;
-                       }
-                       e->AddSubElement ( e2 );
-               }
-       }
-       return e;
-}
-
-void
-XMLReadFile ( XMLFile& f, XMLElement& head, XMLIncludes& includes, const Path& path )
-{
-       for ( ;; )
-       {
-               XMLElement* e = XMLParse ( f, &includes, path );
-               if ( !e )
-                       return;
-               head.AddSubElement ( e );
-       }
-}
-
-XMLElement*
-XMLLoadInclude ( XMLElement* e, const Path& path, XMLIncludes& includes )
-{
-       XMLAttribute* att;
-       att = e->GetAttribute("href",true);
-       assert(att);
-
-       string file ( path.Fixup(att->value,true) );
-       string top_file ( Path::RelativeFromWorkingDirectory ( file ) );
-       e->attributes.push_back ( new XMLAttribute ( "top_href", top_file ) );
-       XMLFile fInc;
-       if ( !fInc.open ( file ) )
-       {
-               // look for xi:fallback element
-               for ( size_t i = 0; i < e->subElements.size(); i++ )
-               {
-                       XMLElement* e2 = e->subElements[i];
-                       if ( e2->name == "xi:fallback" )
-                       {
-                               // now look for xi:include below...
-                               for ( i = 0; i < e2->subElements.size(); i++ )
-                               {
-                                       XMLElement* e3 = e2->subElements[i];
-                                       if ( e3->name == "xi:include" )
-                                       {
-                                               return XMLLoadInclude ( e3, path, includes );
-                                       }
-                               }
-                               throw InvalidBuildFileException (
-                                       e2->location,
-                                       "<xi:fallback> must have a <xi:include> sub-element" );
-                               return NULL;
-                       }
-               }
-               return NULL;
-       }
-       else
-       {
-               XMLElement* new_e = new XMLElement ( e->location );
-               new_e->name = "xi:included";
-               Path path2 ( path, att->value );
-               XMLReadFile ( fInc, *new_e, includes, path2 );
-               return new_e;
-       }
-}
-
-XMLElement*
-XMLLoadFile ( const string& filename, const Path& path )
-{
-       XMLIncludes includes;
-       XMLFile f;
-
-       if ( !f.open ( filename ) )
-               throw FileNotFoundException ( filename );
-
-       XMLElement* head = new XMLElement("(virtual)");
-
-       XMLReadFile ( f, *head, includes, path );
-
-       for ( size_t i = 0; i < includes.size(); i++ )
-       {
-               XMLElement* e = includes[i]->e;
-               XMLElement* e2 = XMLLoadInclude ( includes[i]->e, includes[i]->path, includes );
-               if ( !e2 )
-               {
-                       throw FileNotFoundException (
-                               ssprintf("%s (referenced from %s)",
-                                       e->GetAttribute("top_href",true)->value.c_str(),
-                                       f.Location().c_str() ) );
-               }
-               XMLElement* parent = e->parentElement;
-               XMLElement** parent_container = NULL;
-               if ( !parent )
-               {
-                       delete e;
-                       throw Exception ( "internal tool error: xi:include doesn't have a parent" );
-                       return NULL;
-               }
-               for ( size_t j = 0; j < parent->subElements.size(); j++ )
-               {
-                       if ( parent->subElements[j] == e )
-                       {
-                               parent_container = &parent->subElements[j];
-                               break;
-                       }
-               }
-               if ( !parent_container )
-               {
-                       delete e;
-                       throw Exception ( "internal tool error: couldn't find xi:include in parent's sub-elements" );
-                       return NULL;
-               }
-               // replace inclusion tree with the imported tree
-               e2->parentElement = e->parentElement;
-               e2->name = e->name;
-               e2->attributes = e->attributes;
-               *parent_container = e2;
-               e->attributes.resize(0);
-               delete e;
-       }
-       return head;
-}
diff --git a/reactos/tools/buildno/xml.h b/reactos/tools/buildno/xml.h
deleted file mode 100644 (file)
index 73a13c5..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-// XML.h
-
-#ifndef XML_H
-#define XML_H
-
-#include "pch.h"
-
-void
-InitWorkingDirectory();
-
-#ifdef _MSC_VER
-unsigned __int64
-#else
-unsigned long long
-#endif
-filelen ( FILE* f );
-
-class Path
-{
-       std::vector<std::string> path;
-public:
-       Path(); // initializes path to getcwd();
-       Path ( const Path& cwd, const std::string& filename );
-       std::string Fixup ( const std::string& filename, bool include_filename ) const;
-
-       static std::string RelativeFromWorkingDirectory ( const std::string& path );
-
-       static void Split ( std::vector<std::string>& out,
-                           const std::string& path,
-                           bool include_last );
-};
-
-class XMLFile
-{
-       friend class XMLElement;
-public:
-       XMLFile();
-       void close();
-       bool open(const std::string& filename);
-       void next_token();
-       bool next_is_text();
-       bool more_tokens();
-       bool get_token(std::string& token);
-       const std::string& filename() { return _filename; }
-       std::string Location() const;
-
-private:
-       std::string _buf, _filename;
-
-       const char *_p, *_end;
-};
-
-
-class XMLAttribute
-{
-public:
-       std::string name;
-       std::string value;
-
-       XMLAttribute();
-       XMLAttribute ( const std::string& name_, const std::string& value_ );
-       XMLAttribute ( const XMLAttribute& );
-       XMLAttribute& operator = ( const XMLAttribute& );
-};
-
-
-class XMLElement
-{
-public:
-       std::string location;
-       std::string name;
-       std::vector<XMLAttribute*> attributes;
-       XMLElement* parentElement;
-       std::vector<XMLElement*> subElements;
-       std::string value;
-
-       XMLElement ( const std::string& location_ );
-       ~XMLElement();
-       bool Parse(const std::string& token,
-                  bool& end_tag);
-       void AddSubElement ( XMLElement* e );
-       XMLAttribute* GetAttribute ( const std::string& attribute,
-                                    bool required);
-       const XMLAttribute* GetAttribute ( const std::string& attribute,
-                                          bool required) const;
-};
-
-XMLElement*
-XMLLoadFile ( const std::string& filename, const Path& path );
-
-/*XMLElement*
-XMLParse(XMLFile& f,
-         const Path& path,
-         bool* pend_tag = NULL);*/
-
-#endif//XML_H
index 22014ee..95faedf 100644 (file)
@@ -64,7 +64,7 @@ LINK32=link.exe
 # PROP Intermediate_Dir "Debug"\r
 # PROP Target_Dir ""\r
 # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../lib/inflib" /I "../../include/reactos" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "INFLIB_HOST" /YX /FD /GZ /c\r
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I ".." /I "../../lib/inflib" /I "../../include/reactos" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "INFLIB_HOST" /YX /FD /GZ /c\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
 # ADD RSC /l 0x409 /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -245,10 +245,6 @@ SOURCE=.\rbuild.cpp
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\ssprintf.cpp\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=.\stubbedcomponent.cpp\r
 # End Source File\r
 # Begin Source File\r
@@ -263,10 +259,6 @@ SOURCE=.\testsupportcode.cpp
 \r
 SOURCE=.\wineresource.cpp\r
 # End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\XML.cpp\r
-# End Source File\r
 # End Group\r
 # Begin Group "rbuild_headers"\r
 \r
@@ -285,16 +277,8 @@ SOURCE=.\rbuild.h
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\ssprintf.h\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=.\test.h\r
 # End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\XML.h\r
-# End Source File\r
 # End Group\r
 # Begin Group "inflib"\r
 \r
@@ -348,5 +332,25 @@ SOURCE=..\..\lib\inflib\infpriv.h
 SOURCE=..\..\lib\inflib\infput.c\r
 # End Source File\r
 # End Group\r
+# Begin Group "tools"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\ssprintf.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\ssprintf.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\xml.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\xml.h\r
+# End Source File\r
+# End Group\r
 # End Target\r
 # End Project\r
index 21b4b1e..458fa62 100644 (file)
@@ -170,12 +170,10 @@ RBUILD_COMMON_SOURCES = \
                linkerscript.cpp \
                module.cpp \
                project.cpp \
-               ssprintf.cpp \
                stubbedcomponent.cpp \
                syssetupgenerator.cpp \
                testsupportcode.cpp \
                wineresource.cpp \
-               xml.cpp \
                )
 
 RBUILD_SPECIAL_SOURCES = \
@@ -216,11 +214,10 @@ RBUILD_HEADERS = \
                exception.h \
                pch.h \
                rbuild.h \
-               ssprintf.h \
                test.h \
-               xml.h \
                $(addprefix backend$(SEP), $(RBUILD_BACKEND_HEADERS)) \
-       )
+       ) \
+       $(XML_SSPRINTF_HEADERS)
 
 RBUILD_TESTS = \
        tests$(SEP)cdfiletest.cpp \
@@ -251,16 +248,16 @@ RBUILD_TEST_OBJECTS = \
        $(RBUILD_COMMON_OBJECTS) \
        $(RBUILD_TEST_SPECIAL_OBJECTS)
 
-RBUILD_HOST_CXXFLAGS = -I$(RBUILD_BASE) -I$(INFLIB_BASE) $(TOOLS_CPPFLAGS)
+RBUILD_HOST_CXXFLAGS = -I$(RBUILD_BASE) -I$(TOOLS_BASE) -I$(INFLIB_BASE) $(TOOLS_CPPFLAGS)
 
 RBUILD_HOST_LFLAGS = $(TOOLS_LFLAGS)
 
 .PHONY: rbuild
 rbuild: $(RBUILD_TARGET)
 
-$(RBUILD_TARGET): $(RBUILD_OBJECTS) $(INFLIB_HOST_OBJECTS) | $(RBUILD_OUT)
+$(RBUILD_TARGET): $(RBUILD_OBJECTS) $(XML_SSPRINTF_OBJECTS) $(INFLIB_HOST_OBJECTS) | $(RBUILD_OUT)
        $(ECHO_LD)
-       ${host_gpp} $(RBUILD_OBJECTS) $(INFLIB_HOST_OBJECTS) $(RBUILD_HOST_LFLAGS) -o $@
+       ${host_gpp} $^ $(RBUILD_HOST_LFLAGS) -o $@
 
 $(RBUILD_INT_)global.o: $(RBUILD_BASE_)global.cpp $(RBUILD_HEADERS) | $(RBUILD_INT)
        $(ECHO_CC)
@@ -338,10 +335,6 @@ $(RBUILD_INT_)rbuild.o: $(RBUILD_BASE_)rbuild.cpp $(RBUILD_HEADERS) | $(RBUILD_I
        $(ECHO_CC)
        ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
 
-$(RBUILD_INT_)ssprintf.o: $(RBUILD_BASE_)ssprintf.cpp $(RBUILD_HEADERS) | $(RBUILD_INT)
-       $(ECHO_CC)
-       ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
-
 $(RBUILD_INT_)stubbedcomponent.o: $(RBUILD_BASE_)stubbedcomponent.cpp $(RBUILD_HEADERS) | $(RBUILD_INT)
        $(ECHO_CC)
        ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
@@ -358,10 +351,6 @@ $(RBUILD_INT_)testsupportcode.o: $(RBUILD_BASE_)testsupportcode.cpp $(RBUILD_HEA
        $(ECHO_CC)
        ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
 
-$(RBUILD_INT_)xml.o: $(RBUILD_BASE_)xml.cpp $(RBUILD_HEADERS) | $(RBUILD_INT)
-       $(ECHO_CC)
-       ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
-
 $(RBUILD_BACKEND_INT_)backend.o: $(RBUILD_BACKEND_BASE_)backend.cpp $(RBUILD_HEADERS) | $(RBUILD_BACKEND_INT)
        $(ECHO_CC)
        ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
index 2ee1803..e991f06 100644 (file)
@@ -19,6 +19,26 @@ $(TOOLS_OUT): | $(OUTPUT)
        ${mkdir} $@
 endif
 
+XML_SSPRINTF_SOURCES = $(addprefix $(TOOLS_BASE_), \
+       ssprintf.cpp \
+       xml.cpp \
+       )
+
+XML_SSPRINTF_HEADERS = $(addprefix $(TOOLS_BASE_), \
+       ssprintf.h \
+       xml.h \
+       )
+
+XML_SSPRINTF_OBJECTS = \
+       $(addprefix $(INTERMEDIATE_), $(XML_SSPRINTF_SOURCES:.cpp=.o))
+
+$(TOOLS_INT_)ssprintf.o: $(TOOLS_BASE_)ssprintf.cpp $(XML_SSPRINTF_HEADERS) | $(TOOLS_INT)
+       $(ECHO_CC)
+       ${host_gcc} $(TOOLS_CPPFLAGS) -c $< -o $@
+
+$(TOOLS_INT_)xml.o: $(TOOLS_BASE_)xml.cpp $(XML_SSPRINTF_HEADERS) | $(TOOLS_INT)
+       $(ECHO_CC)
+       ${host_gcc} $(TOOLS_CPPFLAGS) -c $< -o $@
 
 include tools/bin2c.mak
 include tools/rsym.mak