//-----------------------------------------------------------------------------
// NastConfig.cpp
//-----------------------------------------------------------------------------

#include "NastConfig.h"

//  Microsoft hat mal wieder eigene Vorstellungen von Namensgebung
#ifdef _MSC_VER
#include <strstrea.h>
#else
#include <strstream.h>
#endif 

//----------------------------------------------------------------------------
//  NastVersionString() liefert einen String mit der Version von Nast++.
//  Die beiden Macros NAST_MAJOR_VERSION und NAST_MINOR_VERSION
//  werden in config.h definiert.
//  Um die Versionsnummern zu aendern muss man die Definitionen in
//  configure.in aendern und autoconf starten.
//-----------------------------------------------------------------------------
const char* 
NastVersionString()
{
  return NAST_VERSION;
}

//-----------------------------------------------------------------------------
// liefert einen String der alle eingestellten Optionen angibt
//-----------------------------------------------------------------------------
const char *
NastConfigString()
{
    // dazu wird ein langer String auf dem Stack erzeugt, und mit ein string-stream
    // aufgefuellt. 

    const int length = 10000;	// naja, lang genug halt
    static char szString[length] = "";
    ostrstream strOut( szString, length);

    strOut <<"-------------------------------------------------------------------------------\n";
#ifdef NAST_DEBUG
    strOut << "Nast++ (Debug) ";
#else
    strOut << "Nast++ (Releas) ";
#endif

    strOut << " Version " << NAST_VERSION << "  ";

#ifdef __GNUC__
    strOut << "uebersetzt mit " __VERSION__ << "\n";
#elif _MSC_VER
    strOut << "uebersetzt mit Microsoft C++ " << _MSC_VER << "\n";
#else
    strOut << "uebersetzt mit unbekanntem Compiler " << "\n";
#endif
        
    strOut << "am " __DATE__ ;
    strOut << "um " __TIME__ " Uhr \n\n";

    strOut << "verwendete Macros:\n\t";
#ifdef DEBUG
    strOut << "DEBUG  ";
#endif 

#ifdef NAST_DEBUG
    strOut << "NAST_DEBUG  ";
#endif 

#ifdef NDEBUG
    strOut << "NDEBUG  ";
#endif 

    strOut << "\n\t";

#ifdef NAST_USE_ASSERT 
    strOut << "NAST_USE_ASSERT  "; 
#endif 

#ifdef NAST_USE_ASSERT_VALID 
    strOut << "NAST_USE_ASSERT_VALID  ";
#endif

#ifdef NAST_USE_DUMP_ASSERT_INDEX
    strOut << "NAST_USE_ASSERT_INDEX  ";
#endif

    strOut << "\n\t";

#ifdef NAST_USE_WARNING
    strOut << "NAST_USE_WARNING ";
#endif
#ifdef NAST_USE_DUMP_MESSAGE
    strOut << "NAST_USE_DUMP_MESSAGE  ";
#endif
#ifdef NAST_USE_DUMP_VARIABLE
    strOut << "NAST_USE_DUMP_VARIABLE  ";
#endif
#ifdef NAST_USE_DUMP_POSITION
    strOut << "NAST_USE_DUMP_POSITION  ";
#endif

#ifdef NAST_USE_DUMP_VISUAL
    strOut << "NAST_USE_DUMP_VISUAL  ";
#endif

    strOut << "\n";
    strOut <<"-------------------------------------------------------------------------------";
    
    return strOut.str();
}


