// -*- C++ -*-
/***************************************************************************
 *
 * cstdio - C++ Standard library interface to the ANSI C header stdio.h
 *
 * $Id$
 *
 ***************************************************************************
 *
 * Copyright (c) 1994-2005 Quovadx,  Inc., acting through its  Rogue Wave
 * Software division. Licensed under the Apache License, Version 2.0 (the
 * "License");  you may  not use this file except  in compliance with the
 * License.    You    may   obtain   a   copy   of    the   License    at
 * http://www.apache.org/licenses/LICENSE-2.0.    Unless   required    by
 * applicable law  or agreed to  in writing,  software  distributed under
 * the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR
 * CONDITIONS OF  ANY KIND, either  express or implied.  See  the License
 * for the specific language governing permissions  and limitations under
 * the License.
 * 
 **************************************************************************/

#include <rw/_defs.h>

#ifndef _RWSTD_NO_PURE_C_HEADERS
#  include <ansi/_cstdio.h>
#else

#ifndef _RWSTD_NO_DEPRECATED_C_HEADERS

#ifndef _RWSTD_NAMESPACE_STD_OPEN
#define _RWSTD_NAMESPACE_STD_OPEN 14

_RWSTD_NAMESPACE (std) { 

#endif   // _RWSTD_NAMESPACE_STD_OPEN


#include _RWSTD_ANSI_C_STDIO_H


#if _RWSTD_NAMESPACE_STD_OPEN == 14
#  undef _RWSTD_NAMESPACE_STD_OPEN

}   // namespace std

#endif   // _RWSTD_NAMESPACE_STD_OPEN == 14

#else   // if defined (_RWSTD_NO_DEPRECATED_C_HEADERS)

#ifndef _RWSTD_CSTDIO_INCLUDED
#define _RWSTD_CSTDIO_INCLUDED

#include _RWSTD_ANSI_C_STDIO_H


// 27.8.2, p1, Table 94
#ifndef stdin
#  define stdin stdin
#endif

#ifndef stdout
#  define stdout stdout
#endif

#ifndef stderr
#  define stderr stderr
#endif

#if !defined (_RWSTD_NO_NAMESPACE) && !defined (_RWSTD_NO_HONOR_STD) && \
    !defined (_RWSTD_NO_USING_LIBC_IN_STD)

namespace std {

    using ::size_t;
    using ::FILE;

#ifndef _RWSTD_NO_FPOS_T
    using ::fpos_t;
#endif   // _RWSTD_NO_FPOS_T

#ifndef _RWSTD_NO_CLEARERR
    using ::clearerr;
#endif   // _RWSTD_NO_CLEARERR

#ifndef _RWSTD_NO_FCLOSE
    using ::fclose;
#endif   // _RWSTD_NO_FCLOSE

#ifndef _RWSTD_NO_FEOF
    using ::feof;
#endif   // _RWSTD_NO_FEOF

#ifndef _RWSTD_NO_FERROR
    using ::ferror;
#endif   // _RWSTD_NO_FERROR

#ifndef _RWSTD_NO_FFLUSH
    using ::fflush;
#endif   // _RWSTD_NO_FFLUSH

#ifndef _RWSTD_NO_FGETC
    using ::fgetc;
#endif   // _RWSTD_NO_FGETC

#ifndef _RWSTD_NO_FGETPOS
    using ::fgetpos;
#endif   // _RWSTD_NO_FGETPOS

#ifndef _RWSTD_NO_FGETS
    using ::fgets;
#endif   // _RWSTD_NO_FGETS

#ifndef _RWSTD_NO_FOPEN
    using ::fopen;
#endif   // _RWSTD_NO_FOPEN

#ifndef _RWSTD_NO_FPRINTF
    using ::fprintf;
#endif   // _RWSTD_NO_FPRINTF

#ifndef _RWSTD_NO_FPUTC
    using ::fputc;
#endif   // _RWSTD_NO_FPUTC

#ifndef _RWSTD_NO_FPUTS
    using ::fputs;
#endif   // _RWSTD_NO_FPUTS

#ifndef _RWSTD_NO_FREAD
    using ::fread;
#endif   // _RWSTD_NO_FREAD

#ifndef _RWSTD_NO_FREOPEN
    using ::freopen;
#endif   // _RWSTD_NO_FREOPEN

#ifndef _RWSTD_NO_FSCANF
    using ::fscanf;
#endif   // _RWSTD_NO_FSCANF

#ifndef _RWSTD_NO_FSEEK
    using ::fseek;
#endif   // _RWSTD_NO_FSEEK

#ifndef _RWSTD_NO_FSETPOS
    using ::fsetpos;
#endif   // _RWSTD_NO_FSETPOS

#ifndef _RWSTD_NO_FTELL
    using ::ftell;
#endif   // _RWSTD_NO_FTELL

#ifndef _RWSTD_NO_FWRITE
    using ::fwrite;
#endif   // _RWSTD_NO_FWRITE

#ifndef _RWSTD_NO_GETC
    using ::getc;
#endif   // _RWSTD_NO_GETC

#ifndef _RWSTD_NO_GETCHAR
    using ::getchar;
#endif   // _RWSTD_NO_GETCHAR

#ifndef _RWSTD_NO_GETS
    using ::gets;
#endif   // _RWSTD_NO_GETS

#ifndef _RWSTD_NO_PERROR
    using ::perror;
#endif   // _RWSTD_NO_PERROR

#ifndef _RWSTD_NO_PRINTF
    using ::printf;
#endif   // _RWSTD_NO_PRINTF

#ifndef _RWSTD_NO_PUTC
    using ::putc;
#endif   // _RWSTD_NO_PUTC

#ifndef _RWSTD_NO_PUTCHAR
    using ::putchar;
#endif   // _RWSTD_NO_PUTCHAR

#ifndef _RWSTD_NO_PUTS
    using ::puts;
#endif   // _RWSTD_NO_PUTS

#ifndef _RWSTD_NO_REMOVE
    using ::remove;
#endif   // _RWSTD_NO_REMOVE

#ifndef _RWSTD_NO_RENAME
    using ::rename;
#endif   // _RWSTD_NO_RENAME

#ifndef _RWSTD_NO_REWIND
    using ::rewind;
#endif   // _RWSTD_NO_REWIND

#ifndef _RWSTD_NO_SCANF
    using ::scanf;
#endif   // _RWSTD_NO_SCANF

#ifndef _RWSTD_NO_SETBUF
    using ::setbuf;
#endif   // _RWSTD_NO_SETBUF

#ifndef _RWSTD_NO_SETVBUF
    using ::setvbuf;
#endif   // _RWSTD_NO_SETVBUF

#ifndef _RWSTD_NO_SPRINTF
    using ::sprintf;
#endif   // _RWSTD_NO_SPRINTF

#ifndef _RWSTD_NO_SSCANF
    using ::sscanf;
#endif   // _RWSTD_NO_SSCANF

#ifndef _RWSTD_NO_TMPFILE
    using ::tmpfile;
#endif   // _RWSTD_NO_TMPFILE

#ifndef _RWSTD_NO_TMPNAM
    using ::tmpnam;
#else
#  ifndef _RWSTD_NO_TMPNAM_IN_LIBC
    extern "C" char *tmpnam (char *);
#  endif // _RWSTD_NO_TMPNAM_IN_LIBC
#endif   // _RWSTD_NO_TMPNAM

#ifndef _RWSTD_NO_UNGETC
    using ::ungetc;
#endif   // _RWSTD_NO_UNGETC

#ifndef _RWSTD_NO_VFPRINTF
    using ::vfprintf;
#endif   // _RWSTD_NO_VFPRINTF

#ifndef _RWSTD_NO_VPRINTF
    using ::vprintf;
#endif   // _RWSTD_NO_VPRINTF

#ifndef _RWSTD_NO_VSPRINTF
    using ::vsprintf;
#endif   // _RWSTD_NO_VSPRINTF

}   // std

#endif   // !_RWSTD_NO_NAMESPACE && !_RWSTD_NO_HONOR_STD && !_RWSTD_NO_USING_LIBC_IN_STD

#endif   // _RWSTD_CSTDIO_INCLUDED

#endif   // _RWSTD_NO_DEPRECATED_C_HEADERS

#endif   // _RWSTD_NO_PURE_C_HEADERS
