// -*- 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-2006 Rogue Wave Software.
 * 
 **************************************************************************/

#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
