Replaced ostream with FILE* in wxExpr.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2913 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -330,7 +330,7 @@
 | 
			
		||||
 * Use standard C++ streams if 1. If 0, use wxWin
 | 
			
		||||
 * streams implementation.
 | 
			
		||||
 */
 | 
			
		||||
#define wxUSE_STD_IOSTREAM  1
 | 
			
		||||
#define wxUSE_STD_IOSTREAM  0
 | 
			
		||||
/*
 | 
			
		||||
 * wxLibrary class
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								configure.in
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								configure.in
									
									
									
									
									
								
							@@ -250,6 +250,7 @@ if test $DEBUG_CONFIGURE = 1; then
 | 
			
		||||
  DEFAULT_wxUSE_LIBJPEG=no
 | 
			
		||||
  DEFAULT_wxUSE_ODBC=no
 | 
			
		||||
 | 
			
		||||
  DEFAULT_wxUSE_STD_IOSTREAM=no
 | 
			
		||||
  DEFAULT_wxUSE_FILE=no
 | 
			
		||||
  DEFAULT_wxUSE_TEXTFILE=no
 | 
			
		||||
  DEFAULT_wxUSE_TIMEDATE=no
 | 
			
		||||
@@ -347,6 +348,7 @@ else
 | 
			
		||||
  DEFAULT_wxUSE_LIBJPEG=yes
 | 
			
		||||
  DEFAULT_wxUSE_ODBC=no
 | 
			
		||||
 | 
			
		||||
  DEFAULT_wxUSE_STD_IOSTREAM=yes
 | 
			
		||||
  DEFAULT_wxUSE_FILE=yes
 | 
			
		||||
  DEFAULT_wxUSE_TEXTFILE=yes
 | 
			
		||||
  DEFAULT_wxUSE_TIMEDATE=yes
 | 
			
		||||
@@ -500,24 +502,25 @@ dnl ---------------------------------------------------------------------------
 | 
			
		||||
dnl (small) optional non GUI classes
 | 
			
		||||
dnl ---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
WX_ARG_ENABLE(intl,        [  --enable-intl           use internationalization system], wxUSE_INTL)
 | 
			
		||||
WX_ARG_ENABLE(config,      [  --enable-config         use wxConfig (and derived) classes], wxUSE_CONFIG)
 | 
			
		||||
WX_ARG_ENABLE(sockets,     [  --enable-sockets        use socket/network classes], wxUSE_SOCKETS)
 | 
			
		||||
WX_ARG_ENABLE(ipc,         [  --enable-ipc            use interprocess communication (wxSocket etc.)], wxUSE_IPC)
 | 
			
		||||
WX_ARG_ENABLE(apple_ieee,  [  --enable-apple_ieee     use the Apple IEEE codec], wxUSE_APPLE_IEEE)
 | 
			
		||||
WX_ARG_ENABLE(timedate,    [  --enable-timedate       use date/time classes], wxUSE_TIMEDATE)
 | 
			
		||||
WX_ARG_ENABLE(wave,        [  --enable-wave           use wxWave class], wxUSE_WAVE)
 | 
			
		||||
WX_ARG_ENABLE(fraction,    [  --enable-fraction       use wxFraction class], wxUSE_FRACTION)
 | 
			
		||||
WX_ARG_ENABLE(dynlib,      [  --enable-dynlib         use wxLibrary class for DLL loading], wxUSE_DYNLIB_CLASS)
 | 
			
		||||
WX_ARG_ENABLE(longlong,    [  --enable-longlong       use wxLongLong class], wxUSE_LONGLONG)
 | 
			
		||||
WX_ARG_ENABLE(log,         [  --enable-log            use logging system], wxUSE_LOG)
 | 
			
		||||
WX_ARG_ENABLE(streams,     [  --enable-streams        use wxStream etc classes], wxUSE_STREAMS)
 | 
			
		||||
WX_ARG_ENABLE(file,        [  --enable-file           use wxFile classes], wxUSE_FILE)
 | 
			
		||||
WX_ARG_ENABLE(textfile,    [  --enable-textfile       use wxTextFile classes], wxUSE_TEXTFILE)
 | 
			
		||||
WX_ARG_ENABLE(unicode,     [  --enable-unicode        compile wxString with Unicode support], wxUSE_UNICODE)
 | 
			
		||||
WX_ARG_ENABLE(wcsrtombs,   [  --enable-wcsrtombs      use wcsrtombs instead of buggy (GNU libc1/Linux libc5) wcstombs], wxUSE_WCSRTOMBS)
 | 
			
		||||
WX_ARG_ENABLE(wxprintfv,   [  --enable-wxprintfv      use wxWindows implementation of vprintf()], wxUSE_EXPERIMENTAL_PRINTF)
 | 
			
		||||
WX_ARG_ENABLE(joystick,    [  --enable-joystick       compile in joystick support (Linux only)], wxUSE_JOYSTICK)
 | 
			
		||||
WX_ARG_ENABLE(intl,          [  --enable-intl           use internationalization system], wxUSE_INTL)
 | 
			
		||||
WX_ARG_ENABLE(config,        [  --enable-config         use wxConfig (and derived) classes], wxUSE_CONFIG)
 | 
			
		||||
WX_ARG_ENABLE(sockets,       [  --enable-sockets        use socket/network classes], wxUSE_SOCKETS)
 | 
			
		||||
WX_ARG_ENABLE(ipc,           [  --enable-ipc            use interprocess communication (wxSocket etc.)], wxUSE_IPC)
 | 
			
		||||
WX_ARG_ENABLE(apple_ieee,    [  --enable-apple_ieee     use the Apple IEEE codec], wxUSE_APPLE_IEEE)
 | 
			
		||||
WX_ARG_ENABLE(timedate,      [  --enable-timedate       use date/time classes], wxUSE_TIMEDATE)
 | 
			
		||||
WX_ARG_ENABLE(wave,          [  --enable-wave           use wxWave class], wxUSE_WAVE)
 | 
			
		||||
WX_ARG_ENABLE(fraction,      [  --enable-fraction       use wxFraction class], wxUSE_FRACTION)
 | 
			
		||||
WX_ARG_ENABLE(dynlib,        [  --enable-dynlib         use wxLibrary class for DLL loading], wxUSE_DYNLIB_CLASS)
 | 
			
		||||
WX_ARG_ENABLE(longlong,      [  --enable-longlong       use wxLongLong class], wxUSE_LONGLONG)
 | 
			
		||||
WX_ARG_ENABLE(log,           [  --enable-log            use logging system], wxUSE_LOG)
 | 
			
		||||
WX_ARG_ENABLE(streams,       [  --enable-streams        use wxStream etc classes], wxUSE_STREAMS)
 | 
			
		||||
WX_ARG_ENABLE(file,          [  --enable-file           use wxFile classes], wxUSE_FILE)
 | 
			
		||||
WX_ARG_ENABLE(textfile,      [  --enable-textfile       use wxTextFile classes], wxUSE_TEXTFILE)
 | 
			
		||||
WX_ARG_ENABLE(unicode,       [  --enable-unicode        compile wxString with Unicode support], wxUSE_UNICODE)
 | 
			
		||||
WX_ARG_ENABLE(wcsrtombs,     [  --enable-wcsrtombs      use wcsrtombs instead of buggy (GNU libc1/Linux libc5) wcstombs], wxUSE_WCSRTOMBS)
 | 
			
		||||
WX_ARG_ENABLE(wxprintfv,     [  --enable-wxprintfv      use wxWindows implementation of vprintf()], wxUSE_EXPERIMENTAL_PRINTF)
 | 
			
		||||
WX_ARG_ENABLE(joystick,      [  --enable-joystick       compile in joystick support (Linux only)], wxUSE_JOYSTICK)
 | 
			
		||||
WX_ARG_ENABLE(std_iostreams, [  --enable-std_iostreams  use standard C++ stream classes], wxUSE_STD_IOSTREAM)
 | 
			
		||||
 | 
			
		||||
dnl ---------------------------------------------------------------------------
 | 
			
		||||
dnl "big" options (i.e. those which change a lot of things throughout the library)
 | 
			
		||||
@@ -1533,6 +1536,10 @@ if test "$wxUSE_FILE" = "yes"; then
 | 
			
		||||
  AC_DEFINE(wxUSE_FILE)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$wxUSE_STD_IOSTREAM" = "yes"; then
 | 
			
		||||
  AC_DEFINE(wxUSE_STD_IOSTREAM)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$wxUSE_TEXTFILE" = "yes"; then
 | 
			
		||||
  if test "$wxUSE_FILE" != "yes"; then
 | 
			
		||||
    AC_MSG_WARN(wxTextFile requires wxFile and it won't be compiled without it)
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,6 @@
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/string.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/ioswrap.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/list.h"
 | 
			
		||||
#include "wx/hash.h"
 | 
			
		||||
 | 
			
		||||
@@ -141,9 +139,9 @@ class WXDLLEXPORT wxExpr
 | 
			
		||||
  wxExpr *AttributeValue(const wxString& word) const;  // Use only for a clause
 | 
			
		||||
  wxString Functor(void) const;                     // Only for a clause
 | 
			
		||||
  bool IsFunctor(const wxString& s) const;                     // Only for a clause
 | 
			
		||||
  void WriteClause(ostream& stream);  // Write this expression as a top-level clause
 | 
			
		||||
  void WriteExpr(ostream& stream);    // Write as any other subexpression
 | 
			
		||||
  void WriteLispExpr(ostream& stream);
 | 
			
		||||
  void WriteClause(FILE* stream);  // Write this expression as a top-level clause
 | 
			
		||||
  void WriteExpr(FILE* stream);    // Write as any other subexpression
 | 
			
		||||
  void WriteLispExpr(FILE* stream);
 | 
			
		||||
 | 
			
		||||
  // Append an expression to a list
 | 
			
		||||
  void Append(wxExpr *expr);
 | 
			
		||||
@@ -244,13 +242,13 @@ public:
 | 
			
		||||
    bool Read(const wxString& filename);
 | 
			
		||||
    bool ReadFromString(const wxString& buffer);
 | 
			
		||||
    bool Write(const wxString& fileName);
 | 
			
		||||
    bool Write(ostream& stream);
 | 
			
		||||
    void WriteLisp(ostream& stream);
 | 
			
		||||
    bool Write(FILE* stream);
 | 
			
		||||
    void WriteLisp(FILE* stream);
 | 
			
		||||
 | 
			
		||||
    // Compatibility
 | 
			
		||||
    inline bool ReadProlog(wxChar *filename) { return Read(wxString(filename)); }
 | 
			
		||||
    inline bool ReadPrologFromString(char *buffer) { return ReadFromString(wxString(buffer)); }
 | 
			
		||||
    inline void WriteProlog(ostream& stream) { Write(stream); }
 | 
			
		||||
    inline void WriteProlog(FILE* stream) { Write(stream); }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxExprDatabase)
 | 
			
		||||
 
 | 
			
		||||
@@ -20,18 +20,11 @@
 | 
			
		||||
#pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if wxUSE_IOSTREAMH
 | 
			
		||||
    #include <fstream.h>
 | 
			
		||||
#else
 | 
			
		||||
    #include <fstream>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "wx/utils.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/expr.h"
 | 
			
		||||
#include "wx/wxexpr.h"
 | 
			
		||||
 | 
			
		||||
@@ -671,7 +664,7 @@ void wxExpr::AssignAttributeValue(wxChar *att, wxChar **var) const
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxExpr::WriteClause(ostream& stream)  // Write this expression as a top-level clause
 | 
			
		||||
void wxExpr::WriteClause(FILE* stream)  // Write this expression as a top-level clause
 | 
			
		||||
{
 | 
			
		||||
  if (type != wxExprList)
 | 
			
		||||
    return;
 | 
			
		||||
@@ -680,23 +673,24 @@ void wxExpr::WriteClause(ostream& stream)  // Write this expression as a top-lev
 | 
			
		||||
  if (node)
 | 
			
		||||
  {
 | 
			
		||||
    node->WriteExpr(stream);
 | 
			
		||||
    stream << "(";
 | 
			
		||||
    fprintf( stream, "(" );
 | 
			
		||||
    node = node->next;
 | 
			
		||||
    bool first = TRUE;
 | 
			
		||||
    while (node)
 | 
			
		||||
    {
 | 
			
		||||
      if (!first)
 | 
			
		||||
        stream << "  ";
 | 
			
		||||
        fprintf( stream, "  " );
 | 
			
		||||
      node->WriteExpr(stream);
 | 
			
		||||
      node = node->next;
 | 
			
		||||
      if (node) stream << ",\n";
 | 
			
		||||
      if (node) 
 | 
			
		||||
        fprintf( stream, ",\n" );
 | 
			
		||||
      first = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
    stream << ").\n\n";
 | 
			
		||||
    fprintf( stream, ").\n\n" );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxExpr::WriteExpr(ostream& stream)    // Write as any other subexpression
 | 
			
		||||
void wxExpr::WriteExpr(FILE* stream)    // Write as any other subexpression
 | 
			
		||||
{
 | 
			
		||||
  // This seems to get round an optimizer bug when
 | 
			
		||||
  // using Watcom C++ 10a in WIN32 compilation mode.
 | 
			
		||||
@@ -713,25 +707,18 @@ void wxExpr::WriteExpr(ostream& stream)    // Write as any other subexpression
 | 
			
		||||
  {
 | 
			
		||||
    case wxExprInteger:
 | 
			
		||||
    {
 | 
			
		||||
      stream << value.integer;
 | 
			
		||||
      fprintf( stream, "%ld", value.integer );
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case wxExprReal:
 | 
			
		||||
    {
 | 
			
		||||
      double f = value.real;
 | 
			
		||||
/* Now the parser can cope with this.
 | 
			
		||||
      // Prevent printing in 'e' notation. Any better way?
 | 
			
		||||
      if (fabs(f) < 0.00001)
 | 
			
		||||
        f = 0.0;
 | 
			
		||||
*/
 | 
			
		||||
      char buf[40];
 | 
			
		||||
      sprintf(buf, "%.6g", f);
 | 
			
		||||
      stream << buf;
 | 
			
		||||
      fprintf( stream, "%.6g", f);
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case wxExprString:
 | 
			
		||||
    {
 | 
			
		||||
      stream << "\"";
 | 
			
		||||
      fprintf( stream, "\"" );
 | 
			
		||||
      int i;
 | 
			
		||||
      const wxWX2MBbuf val = wxConvLibc.cWX2MB(value.string);
 | 
			
		||||
      int len = strlen(val);
 | 
			
		||||
@@ -739,11 +726,13 @@ void wxExpr::WriteExpr(ostream& stream)    // Write as any other subexpression
 | 
			
		||||
      {
 | 
			
		||||
        char ch = val[i];
 | 
			
		||||
        if (ch == '"' || ch == '\\')
 | 
			
		||||
          stream << "\\";
 | 
			
		||||
        stream << ch;
 | 
			
		||||
	  fprintf( stream, "\\" );
 | 
			
		||||
	char tmp[2];
 | 
			
		||||
	tmp[0] = ch;
 | 
			
		||||
	tmp[1] = 0;
 | 
			
		||||
        fprintf( stream, tmp );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      stream << "\"";
 | 
			
		||||
      fprintf( stream, "\"" );
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case wxExprWord:
 | 
			
		||||
@@ -763,19 +752,19 @@ void wxExpr::WriteExpr(ostream& stream)    // Write as any other subexpression
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (quote_it)
 | 
			
		||||
        stream << "'";
 | 
			
		||||
        fprintf( stream ,"'" );
 | 
			
		||||
 | 
			
		||||
      stream << val;
 | 
			
		||||
      fprintf( stream, (const char*) val );
 | 
			
		||||
 | 
			
		||||
      if (quote_it)
 | 
			
		||||
        stream << "'";
 | 
			
		||||
        fprintf( stream, "'" );
 | 
			
		||||
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case wxExprList:
 | 
			
		||||
    {
 | 
			
		||||
      if (!value.first)
 | 
			
		||||
        stream << "[]";
 | 
			
		||||
        fprintf( stream, "[]" );
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        wxExpr *expr = value.first;
 | 
			
		||||
@@ -785,19 +774,20 @@ void wxExpr::WriteExpr(ostream& stream)    // Write as any other subexpression
 | 
			
		||||
          wxExpr *arg1 = expr->next;
 | 
			
		||||
          wxExpr *arg2 = arg1->next;
 | 
			
		||||
          arg1->WriteExpr(stream);
 | 
			
		||||
          stream << " = ";
 | 
			
		||||
          fprintf( stream, " = " );
 | 
			
		||||
          arg2->WriteExpr(stream);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          stream << "[";
 | 
			
		||||
          fprintf( stream, "[" );
 | 
			
		||||
          while (expr)
 | 
			
		||||
          {
 | 
			
		||||
            expr->WriteExpr(stream);
 | 
			
		||||
            expr = expr->next;
 | 
			
		||||
            if (expr) stream << ", ";
 | 
			
		||||
            if (expr) 
 | 
			
		||||
	      fprintf( stream, ", " );
 | 
			
		||||
          }
 | 
			
		||||
          stream << "]";
 | 
			
		||||
          fprintf( stream, "]" );
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
@@ -806,43 +796,48 @@ void wxExpr::WriteExpr(ostream& stream)    // Write as any other subexpression
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxExpr::WriteLispExpr(ostream& stream)
 | 
			
		||||
void wxExpr::WriteLispExpr(FILE* stream)
 | 
			
		||||
{
 | 
			
		||||
  switch (type)
 | 
			
		||||
  {
 | 
			
		||||
    case wxExprInteger:
 | 
			
		||||
    {
 | 
			
		||||
      stream << value.integer;
 | 
			
		||||
      fprintf( stream, "%ld", value.integer );
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case wxExprReal:
 | 
			
		||||
    {
 | 
			
		||||
      stream << value.real;
 | 
			
		||||
      fprintf( stream, "%.6g", value.real );
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case wxExprString:
 | 
			
		||||
    {
 | 
			
		||||
      stream << "\"" << value.string << "\"";
 | 
			
		||||
      fprintf( stream, "\"" );
 | 
			
		||||
      const wxWX2MBbuf val = wxConvLibc.cWX2MB(value.string);
 | 
			
		||||
      fprintf( stream, (const char*) val );
 | 
			
		||||
      fprintf( stream, "\"" );
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case wxExprWord:
 | 
			
		||||
    {
 | 
			
		||||
      stream << value.word;
 | 
			
		||||
      const wxWX2MBbuf val = wxConvLibc.cWX2MB(value.word);
 | 
			
		||||
      fprintf( stream, (const char*) val );
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    case wxExprList:
 | 
			
		||||
    {
 | 
			
		||||
      wxExpr *expr = value.first;
 | 
			
		||||
 | 
			
		||||
      stream << "(";
 | 
			
		||||
      fprintf( stream, "(" );
 | 
			
		||||
      while (expr)
 | 
			
		||||
      {
 | 
			
		||||
        expr->WriteLispExpr(stream);
 | 
			
		||||
        expr = expr->next;
 | 
			
		||||
        if (expr) stream << " ";
 | 
			
		||||
        if (expr) 
 | 
			
		||||
	  fprintf( stream, " " );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      stream << ")";
 | 
			
		||||
      fprintf( stream, ")" );
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
   case wxExprNull: break;
 | 
			
		||||
@@ -1079,13 +1074,15 @@ bool wxExprDatabase::ReadFromString(const wxString& buffer)
 | 
			
		||||
 | 
			
		||||
bool wxExprDatabase::Write(const wxString& fileName)
 | 
			
		||||
{
 | 
			
		||||
  ofstream str(MBSTRINGCAST fileName.mb_str());
 | 
			
		||||
  if (str.bad())
 | 
			
		||||
  FILE *stream = fopen( fileName.fn_str(), "w+" );
 | 
			
		||||
  
 | 
			
		||||
  if (!stream)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
  return Write(str);
 | 
			
		||||
    
 | 
			
		||||
  return Write(stream);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxExprDatabase::Write(ostream& stream)
 | 
			
		||||
bool wxExprDatabase::Write(FILE *stream)
 | 
			
		||||
{
 | 
			
		||||
  noErrors = 0;
 | 
			
		||||
  wxNode *node = First();
 | 
			
		||||
@@ -1098,7 +1095,7 @@ bool wxExprDatabase::Write(ostream& stream)
 | 
			
		||||
  return (noErrors == 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxExprDatabase::WriteLisp(ostream& stream)
 | 
			
		||||
void wxExprDatabase::WriteLisp(FILE* stream)
 | 
			
		||||
{
 | 
			
		||||
  noErrors = 0;
 | 
			
		||||
  wxNode *node = First();
 | 
			
		||||
@@ -1106,7 +1103,7 @@ void wxExprDatabase::WriteLisp(ostream& stream)
 | 
			
		||||
  {
 | 
			
		||||
    wxExpr *expr = (wxExpr *)node->Data();
 | 
			
		||||
    expr->WriteLispExpr(stream);
 | 
			
		||||
    stream << "\n\n";
 | 
			
		||||
    fprintf( stream, "\n\n" );
 | 
			
		||||
    node = node->Next();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user