// -*- C++ -*-
/***************************************************************************
 *
 * cstdio - C++ Standard library interface to the ANSI C header stdio.h
 *
 * $Id$
 *
 ***************************************************************************
 *
 * Licensed to the Apache Software  Foundation (ASF) under one or more
 * contributor  license agreements.  See  the NOTICE  file distributed
 * with  this  work  for  additional information  regarding  copyright
 * ownership.   The ASF  licenses this  file to  you 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.
 *
 * Copyright 1994-2007 Rogue Wave Software, Inc.
 * 
 **************************************************************************/

#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


#ifdef _RWSTD_STRICT_ANSI
// undefine shadow macros in strict mode
#  undef fpos_t
#  undef remove
#  undef rename
#  undef tmpfile
#  undef tmpnam
#  undef fclose
#  undef fflush
#  undef fopen
#  undef freopen
#  undef setbuf
#  undef setvbuf
#  undef fprintf
#  undef fscanf
#  undef printf
#  undef scanf
#  undef sprintf
#  undef sscanf
#  undef vfprintf
#  undef vprintf
#  undef vsprintf
#  undef fgetc
#  undef fgets
#  undef fputc
#  undef fputs
#  undef getc
#  undef getchar
#  undef gets
#  undef putc
#  undef putchar
#  undef puts
#  undef ungetc
#  undef fread
#  undef fwrite
#  undef fgetpos
#  undef fseek
#  undef fsetpos
#  undef ftell
#  undef rewind
#  undef clearerr
#  undef feof
#  undef ferror
#  undef perror
#endif


#endif   // !_NO_NAMESPACE && !__NO_HONOR_STD && !_NO_USING_LIBC_IN_STD

#endif   // _RWSTD_CSTDIO_INCLUDED

#endif   // _RWSTD_NO_DEPRECATED_C_HEADERS

#endif   // _RWSTD_NO_PURE_C_HEADERS
