/***

*stdio.h - definitions/declarations for standard I/O routines

*

*       Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.

*

*Purpose:

*       This file defines the structures, values, macros, and functions

*       used by the level 2 I/O ("standard I/O") routines.

*       [ANSI/System V]

*

*       [Public]

*

****/

 

#if     _MSC_VER > 1000

#pragma once

#endif

 

#ifndef _INC_STDIO

#define _INC_STDIO

 

#if     !defined(_WIN32) && !defined(_MAC)

#error ERROR: Only Mac or Win32 targets supported!

#endif

 

 

#ifdef  _MSC_VER

/*

 * Currently, all MS C compilers for Win32 platforms default to 8 byte

 * alignment.

 */

#pragma pack(push,8)

#endif  /* _MSC_VER */

 

#ifdef  __cplusplus

extern "C" {

#endif

 

 

 

/* Define _CRTIMP */

 

#ifndef _CRTIMP

#ifdef  _DLL

#define CRTIMP __declspec(dllimport)

#else   /* ndef _DLL */

#define _CRTIMP

#endif  /* _DLL */

#endif  /* _CRTIMP */

 

 

/* Define __cdecl for non-Microsoft compilers */

 

#if     ( !defined(_MSC_VER) && !defined(__cdecl) )

#define __cdecl

#endif

 

/* Define _CRTAPI1 (for compatibility with the NT SDK) */

 

#ifndef _CRTAPI1

#if      _MSC_VER >= 800 && _M_IX86 >= 300

#define _CRTAPI1 __cdecl

#else

#define _CRTAPI1

#endif

#endif

 

 

#ifndef _SIZE_T_DEFINED

typedef unsigned int size_t;

#define _SIZE_T_DEFINED

#endif

 

 

#ifndef _MAC

#ifndef _WCHAR_T_DEFINED

typedef unsigned short wchar_t;

#define _WCHAR_T_DEFINED

#endif

 

 

#ifndef _WCTYPE_T_DEFINED

typedef wchar_t wint_t;

typedef wchar_t wctype_t;

#define _WCTYPE_T_DEFINED

#endif

#endif /* ndef _MAC */

 

 

#ifndef _VA_LIST_DEFINED

#ifdef  _M_ALPHA

typedef struct {

        char *a0;       /* pointer to first homed integer argument */

        int offset;     /* byte offset of next parameter */

} va_list;

#else

typedef char *  va_list;

#endif

#define _VA_LIST_DEFINED

#endif

 

 

/* Buffered I/O macros */

 

#if     defined(_M_MPPC)

#define BUFSIZ  4096

#else  /* defined (_M_MPPC) */

#define BUFSIZ  512

#endif /* defined (_M_MPPC) */

 

 

/*

 * Default number of supported streams. _NFILE is confusing and obsolete, but

 * supported anyway for backwards compatibility.

 */

#define _NFILE      _NSTREAM_

 

#ifdef  _WIN32

 

#define _NSTREAM_   512

 

/*

 * Number of entries in _iob[] (declared below). Note that _NSTREAM_ must be

 * greater than or equal to _IOB_ENTRIES.

 */

#define _IOB_ENTRIES 20

 

#else   /* ndef _WIN32 */

 

#ifdef  _DLL

#define _NSTREAM_   128

#else

#ifdef  _MT

#define _NSTREAM_   40

#else

#define _NSTREAM_   20

#endif

#endif  /* _DLL */

 

#endif  /* ndef _MAC */

 

#define EOF     (-1)

 

 

#ifndef _FILE_DEFINED

struct _iobuf {

        char *_ptr;

        int   _cnt;

        char *_base;

        int   _flag;

        int   _file;

        int   _charbuf;

        int   _bufsiz;

        char *_tmpfname;

        };

typedef struct _iobuf FILE;

#define _FILE_DEFINED

#endif

 

 

#ifndef _MAC

 

/* Directory where temporary files may be created. */

 

#ifdef  _POSIX_

#define _P_tmpdir   "/"

#define _wP_tmpdir  L"/"

#else

#define _P_tmpdir   "\\"

#define _wP_tmpdir  L"\\"

#endif

 

/* L_tmpnam = size of P_tmpdir

 *            + 1 (in case P_tmpdir does not end in "/")

 *            + 12 (for the filename string)

 *            + 1 (for the null terminator)

 */

#define L_tmpnam sizeof(_P_tmpdir)+12

 

#else   /* def _MAC */

 

#define L_tmpnam 255

 

#endif  /* _MAC */

 

 

#ifdef  _POSIX_

#define L_ctermid   9

#define L_cuserid   32

#endif

 

 

/* Seek method constants */

 

#define SEEK_CUR    1

#define SEEK_END    2

#define SEEK_SET    0

 

 

#define FILENAME_MAX    260

#define FOPEN_MAX       20

#define _SYS_OPEN       20

#define TMP_MAX         32767

 

 

/* Define NULL pointer value */

 

#ifndef NULL

#ifdef  __cplusplus

#define NULL    0

#else

#define NULL    ((void *)0)

#endif

#endif

 

 

/* Declare _iob[] array */

 

#ifndef _STDIO_DEFINED

_CRTIMP extern FILE _iob[];

#endif  /* _STDIO_DEFINED */

 

 

/* Define file position type */

 

#ifndef _FPOS_T_DEFINED

#undef _FPOSOFF

 

#if defined (_POSIX_)

typedef long fpos_t;

#else /* _POSIX_ */

 

#if     !__STDC__ && _INTEGRAL_MAX_BITS >= 64

typedef __int64 fpos_t;

#define _FPOSOFF(fp) ((long)(fp))

#else

typedef struct fpos_t {

        unsigned int lopart;

        int          hipart;

        } fpos_t;

#define _FPOSOFF(fp) ((long)(fp).lopart)

#endif

#endif  /* _POSIX_ */

 

#define _FPOS_T_DEFINED

#endif

 

 

#define stdin  (&_iob[0])

#define stdout (&_iob[1])

#define stderr (&_iob[2])

 

 

#define _IOREAD         0x0001

#define _IOWRT          0x0002

 

#define _IOFBF          0x0000

#define _IOLBF          0x0040

#define _IONBF          0x0004

 

#define _IOMYBUF        0x0008

#define _IOEOF          0x0010

#define _IOERR          0x0020

#define _IOSTRG         0x0040

#define _IORW           0x0080

#ifdef _POSIX_

#define _IOAPPEND       0x0200

#endif

 

 

/* Function prototypes */

 

#ifndef _STDIO_DEFINED

 

_CRTIMP int __cdecl _filbuf(FILE *);

_CRTIMP int __cdecl _flsbuf(int, FILE *);

 

#ifdef  _POSIX_

_CRTIMP FILE * __cdecl _fsopen(const char *, const char *);

#else

_CRTIMP FILE * __cdecl _fsopen(const char *, const char *, int);

#endif

 

_CRTIMP void __cdecl clearerr(FILE *);

_CRTIMP int __cdecl fclose(FILE *);

_CRTIMP int __cdecl _fcloseall(void);

 

#ifdef  _POSIX_

_CRTIMP FILE * __cdecl fdopen(int, const char *);

#else

_CRTIMP FILE * __cdecl _fdopen(int, const char *);

#endif

 

_CRTIMP int __cdecl feof(FILE *);

_CRTIMP int __cdecl ferror(FILE *);

_CRTIMP int __cdecl fflush(FILE *);

_CRTIMP int __cdecl fgetc(FILE *);

_CRTIMP int __cdecl _fgetchar(void);

_CRTIMP int __cdecl fgetpos(FILE *, fpos_t *);

_CRTIMP char * __cdecl fgets(char *, int, FILE *);

 

#ifdef  _POSIX_

_CRTIMP int __cdecl fileno(FILE *);

#else

_CRTIMP int __cdecl _fileno(FILE *);

#endif

 

_CRTIMP int __cdecl _flushall(void);

_CRTIMP FILE * __cdecl fopen(const char *, const char *);

_CRTIMP int __cdecl fprintf(FILE *, const char *, ...);

_CRTIMP int __cdecl fputc(int, FILE *);

_CRTIMP int __cdecl _fputchar(int);

_CRTIMP int __cdecl fputs(const char *, FILE *);

_CRTIMP size_t __cdecl fread(void *, size_t, size_t, FILE *);

_CRTIMP FILE * __cdecl freopen(const char *, const char *, FILE *);

_CRTIMP int __cdecl fscanf(FILE *, const char *, ...);

_CRTIMP int __cdecl fsetpos(FILE *, const fpos_t *);

_CRTIMP int __cdecl fseek(FILE *, long, int);

_CRTIMP long __cdecl ftell(FILE *);

_CRTIMP size_t __cdecl fwrite(const void *, size_t, size_t, FILE *);

_CRTIMP int __cdecl getc(FILE *);

_CRTIMP int __cdecl getchar(void);

_CRTIMP int __cdecl _getmaxstdio(void);

_CRTIMP char * __cdecl gets(char *);

_CRTIMP int __cdecl _getw(FILE *);

_CRTIMP void __cdecl perror(const char *);

_CRTIMP int __cdecl _pclose(FILE *);

_CRTIMP FILE * __cdecl _popen(const char *, const char *);

_CRTIMP int __cdecl printf(const char *, ...);

_CRTIMP int __cdecl putc(int, FILE *);

_CRTIMP int __cdecl putchar(int);

_CRTIMP int __cdecl puts(const char *);

_CRTIMP int __cdecl _putw(int, FILE *);

_CRTIMP int __cdecl remove(const char *);

_CRTIMP int __cdecl rename(const char *, const char *);

_CRTIMP void __cdecl rewind(FILE *);

_CRTIMP int __cdecl _rmtmp(void);

_CRTIMP int __cdecl scanf(const char *, ...);

_CRTIMP void __cdecl setbuf(FILE *, char *);

_CRTIMP int __cdecl _setmaxstdio(int);

_CRTIMP int __cdecl setvbuf(FILE *, char *, int, size_t);

_CRTIMP int __cdecl _snprintf(char *, size_t, const char *, ...);

_CRTIMP int __cdecl sprintf(char *, const char *, ...);

_CRTIMP int __cdecl sscanf(const char *, const char *, ...);

_CRTIMP char * __cdecl _tempnam(const char *, const char *);

_CRTIMP FILE * __cdecl tmpfile(void);

_CRTIMP char * __cdecl tmpnam(char *);

_CRTIMP int __cdecl ungetc(int, FILE *);

_CRTIMP int __cdecl _unlink(const char *);

_CRTIMP int __cdecl vfprintf(FILE *, const char *, va_list);

_CRTIMP int __cdecl vprintf(const char *, va_list);

_CRTIMP int __cdecl _vsnprintf(char *, size_t, const char *, va_list);

_CRTIMP int __cdecl vsprintf(char *, const char *, va_list);

 

#ifndef _MAC

#ifndef _WSTDIO_DEFINED

 

/* wide function prototypes, also declared in wchar.h  */

 

#ifndef WEOF

#define WEOF (wint_t)(0xFFFF)

#endif

 

#ifdef  _POSIX_

_CRTIMP FILE * __cdecl _wfsopen(const wchar_t *, const wchar_t *);

#else

_CRTIMP FILE * __cdecl _wfsopen(const wchar_t *, const wchar_t *, int);

#endif

 

_CRTIMP wint_t __cdecl fgetwc(FILE *);

_CRTIMP wint_t __cdecl _fgetwchar(void);

_CRTIMP wint_t __cdecl fputwc(wint_t, FILE *);

_CRTIMP wint_t __cdecl _fputwchar(wint_t);

_CRTIMP wint_t __cdecl getwc(FILE *);

_CRTIMP wint_t __cdecl getwchar(void);

_CRTIMP wint_t __cdecl putwc(wint_t, FILE *);

_CRTIMP wint_t __cdecl putwchar(wint_t);

_CRTIMP wint_t __cdecl ungetwc(wint_t, FILE *);

 

_CRTIMP wchar_t * __cdecl fgetws(wchar_t *, int, FILE *);

_CRTIMP int __cdecl fputws(const wchar_t *, FILE *);

_CRTIMP wchar_t * __cdecl _getws(wchar_t *);

_CRTIMP int __cdecl _putws(const wchar_t *);

 

_CRTIMP int __cdecl fwprintf(FILE *, const wchar_t *, ...);

_CRTIMP int __cdecl wprintf(const wchar_t *, ...);

_CRTIMP int __cdecl _snwprintf(wchar_t *, size_t, const wchar_t *, ...);

_CRTIMP int __cdecl swprintf(wchar_t *, const wchar_t *, ...);

_CRTIMP int __cdecl vfwprintf(FILE *, const wchar_t *, va_list);

_CRTIMP int __cdecl vwprintf(const wchar_t *, va_list);

_CRTIMP int __cdecl _vsnwprintf(wchar_t *, size_t, const wchar_t *, va_list);

_CRTIMP int __cdecl vswprintf(wchar_t *, const wchar_t *, va_list);

_CRTIMP int __cdecl fwscanf(FILE *, const wchar_t *, ...);

_CRTIMP int __cdecl swscanf(const wchar_t *, const wchar_t *, ...);

_CRTIMP int __cdecl wscanf(const wchar_t *, ...);

 

#define getwchar()              fgetwc(stdin)

#define putwchar(_c)            fputwc((_c),stdout)

#define getwc(_stm)             fgetwc(_stm)

#define putwc(_c,_stm)          fputwc(_c,_stm)

 

_CRTIMP FILE * __cdecl _wfdopen(int, const wchar_t *);

_CRTIMP FILE * __cdecl _wfopen(const wchar_t *, const wchar_t *);

_CRTIMP FILE * __cdecl _wfreopen(const wchar_t *, const wchar_t *, FILE *);

_CRTIMP void __cdecl _wperror(const wchar_t *);

_CRTIMP FILE * __cdecl _wpopen(const wchar_t *, const wchar_t *);

_CRTIMP int __cdecl _wremove(const wchar_t *);

_CRTIMP wchar_t * __cdecl _wtempnam(const wchar_t *, const wchar_t *);

_CRTIMP wchar_t * __cdecl _wtmpnam(wchar_t *);

 

 

#define _WSTDIO_DEFINED

#endif  /* _WSTDIO_DEFINED */

#endif /* ndef _MAC */

 

#define _STDIO_DEFINED

#endif  /* _STDIO_DEFINED */

 

 

/* Macro definitions */

 

#define feof(_stream)     ((_stream)->_flag & _IOEOF)

#define ferror(_stream)   ((_stream)->_flag & _IOERR)

#define _fileno(_stream)  ((_stream)->_file)

#define getc(_stream)     (--(_stream)->_cnt >= 0 \

                ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream))

#define putc(_c,_stream)  (--(_stream)->_cnt >= 0 \

                ? 0xff & (*(_stream)->_ptr++ = (char)(_c)) :  _flsbuf((_c),(_stream)))

#define getchar()         getc(stdin)

#define putchar(_c)       putc((_c),stdout)

 

 

 

#ifdef  _MT

#undef  getc

#undef  putc

#undef  getchar

#undef  putchar

#endif

 

 

 

#if     !__STDC__ && !defined(_POSIX_)

 

/* Non-ANSI names for compatibility */

 

#define P_tmpdir  _P_tmpdir

#define SYS_OPEN  _SYS_OPEN

 

_CRTIMP int __cdecl fcloseall(void);

_CRTIMP FILE * __cdecl fdopen(int, const char *);

_CRTIMP int __cdecl fgetchar(void);

_CRTIMP int __cdecl fileno(FILE *);

_CRTIMP int __cdecl flushall(void);

_CRTIMP int __cdecl fputchar(int);

_CRTIMP int __cdecl getw(FILE *);

_CRTIMP int __cdecl putw(int, FILE *);

_CRTIMP int __cdecl rmtmp(void);

_CRTIMP char * __cdecl tempnam(const char *, const char *);

_CRTIMP int __cdecl unlink(const char *);

 

#endif  /* __STDC__ */

 

#ifdef  __cplusplus

}

#endif

 

#ifdef  _MSC_VER

#pragma pack(pop)

#endif  /* _MSC_VER */

 

#endif  /* _INC_STDIO */