123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 |
- /*
- * stdio.h
- *
- * Definitions of types and prototypes of functions for standard input and
- * output.
- *
- * NOTE: The file manipulation functions provided by Microsoft seem to
- * work with either slash (/) or backslash (\) as the path separator.
- *
- * This file is part of the Mingw32 package.
- *
- * Contributors:
- * Created by Colin Peters <[email protected]>
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * $Revision: 1.2 $
- * $Author: bellard $
- * $Date: 2005/04/17 13:14:29 $
- *
- */
- #ifndef _STDIO_H_
- #define _STDIO_H_
- /* All the headers include this file. */
- #include <_mingw.h>
- #define __need_size_t
- #define __need_NULL
- #define __need_wchar_t
- #define __need_wint_t
- #ifndef RC_INVOKED
- #include <stddef.h>
- #endif /* Not RC_INVOKED */
- /* Flags for the iobuf structure */
- #define _IOREAD 1
- #define _IOWRT 2
- #define _IORW 0x0080 /* opened as "r+w" */
- /*
- * The three standard file pointers provided by the run time library.
- * NOTE: These will go to the bit-bucket silently in GUI applications!
- */
- #define STDIN_FILENO 0
- #define STDOUT_FILENO 1
- #define STDERR_FILENO 2
- /* Returned by various functions on end of file condition or error. */
- #define EOF (-1)
- /*
- * The maximum length of a file name. You should use GetVolumeInformation
- * instead of this constant. But hey, this works.
- *
- * NOTE: This is used in the structure _finddata_t (see io.h) so changing it
- * is probably not a good idea.
- */
- #define FILENAME_MAX (260)
- /*
- * The maximum number of files that may be open at once. I have set this to
- * a conservative number. The actual value may be higher.
- */
- #define FOPEN_MAX (20)
- /* After creating this many names, tmpnam and tmpfile return NULL */
- #define TMP_MAX 32767
- /*
- * Tmpnam, tmpfile and, sometimes, _tempnam try to create
- * temp files in the root directory of the current drive
- * (not in pwd, as suggested by some older MS doc's).
- * Redefining these macros does not effect the CRT functions.
- */
- #define _P_tmpdir "\\"
- #define _wP_tmpdir L"\\"
- /*
- * The maximum size of name (including NUL) that will be put in the user
- * supplied buffer caName for tmpnam.
- * Inferred from the size of the static buffer returned by tmpnam
- * when passed a NULL argument. May actually be smaller.
- */
- #define L_tmpnam (16)
- #define _IOFBF 0x0000
- #define _IOLBF 0x0040
- #define _IONBF 0x0004
- /*
- * The buffer size as used by setbuf such that it is equivalent to
- * (void) setvbuf(fileSetBuffer, caBuffer, _IOFBF, BUFSIZ).
- */
- #define BUFSIZ 512
- /* Constants for nOrigin indicating the position relative to which fseek
- * sets the file position. Enclosed in ifdefs because io.h could also
- * define them. (Though not anymore since io.h includes this file now.) */
- #ifndef SEEK_SET
- #define SEEK_SET (0)
- #endif
- #ifndef SEEK_CUR
- #define SEEK_CUR (1)
- #endif
- #ifndef SEEK_END
- #define SEEK_END (2)
- #endif
- #ifndef RC_INVOKED
- /*
- * I used to include stdarg.h at this point, in order to allow for the
- * functions later on in the file which use va_list. That conflicts with
- * using stdio.h and varargs.h in the same file, so I do the typedef myself.
- */
- #ifndef _VA_LIST
- #define _VA_LIST
- #if defined __GNUC__ && __GNUC__ >= 3
- typedef __builtin_va_list va_list;
- #else
- typedef char* va_list;
- #endif
- #endif
- /*
- * The structure underlying the FILE type.
- *
- * I still believe that nobody in their right mind should make use of the
- * internals of this structure. Provided by Pedro A. Aranda Gutiirrez
- * <[email protected]>.
- */
- #ifndef _FILE_DEFINED
- #define _FILE_DEFINED
- typedef struct _iobuf
- {
- char* _ptr;
- int _cnt;
- char* _base;
- int _flag;
- int _file;
- int _charbuf;
- int _bufsiz;
- char* _tmpfname;
- } FILE;
- #endif /* Not _FILE_DEFINED */
- /*
- * The standard file handles
- */
- #ifndef __DECLSPEC_SUPPORTED
- extern FILE (*__imp__iob)[]; /* A pointer to an array of FILE */
- #define _iob (*__imp__iob) /* An array of FILE */
- #else /* __DECLSPEC_SUPPORTED */
- __MINGW_IMPORT FILE _iob[]; /* An array of FILE imported from DLL. */
- #endif /* __DECLSPEC_SUPPORTED */
- #define stdin (&_iob[STDIN_FILENO])
- #define stdout (&_iob[STDOUT_FILENO])
- #define stderr (&_iob[STDERR_FILENO])
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * File Operations
- */
- FILE* fopen (const char*, const char*);
- FILE* freopen (const char*, const char*, FILE*);
- int fflush (FILE*);
- int fclose (FILE*);
- /* MS puts remove & rename (but not wide versions) in io.h also */
- int remove (const char*);
- int rename (const char*, const char*);
- FILE* tmpfile (void);
- char* tmpnam (char*);
- char* _tempnam (const char*, const char*);
- #ifndef NO_OLDNAMES
- char* tempnam (const char*, const char*);
- #endif
- int setvbuf (FILE*, char*, int, size_t);
- void setbuf (FILE*, char*);
- /*
- * Formatted Output
- */
- int fprintf (FILE*, const char*, ...);
- int printf (const char*, ...);
- int sprintf (char*, const char*, ...);
- int _snprintf (char*, size_t, const char*, ...);
- int vfprintf (FILE*, const char*, va_list);
- int vprintf (const char*, va_list);
- int vsprintf (char*, const char*, va_list);
- int _vsnprintf (char*, size_t, const char*, va_list);
- #ifndef __NO_ISOCEXT /* externs in libmingwex.a */
- int snprintf(char* s, size_t n, const char* format, ...);
- extern inline int vsnprintf (char* s, size_t n, const char* format,
- va_list arg)
- { return _vsnprintf ( s, n, format, arg); }
- #endif
- /*
- * Formatted Input
- */
- int fscanf (FILE*, const char*, ...);
- int scanf (const char*, ...);
- int sscanf (const char*, const char*, ...);
- /*
- * Character Input and Output Functions
- */
- int fgetc (FILE*);
- char* fgets (char*, int, FILE*);
- int fputc (int, FILE*);
- int fputs (const char*, FILE*);
- int getc (FILE*);
- int getchar (void);
- char* gets (char*);
- int putc (int, FILE*);
- int putchar (int);
- int puts (const char*);
- int ungetc (int, FILE*);
- /*
- * Direct Input and Output Functions
- */
- size_t fread (void*, size_t, size_t, FILE*);
- size_t fwrite (const void*, size_t, size_t, FILE*);
- /*
- * File Positioning Functions
- */
- int fseek (FILE*, long, int);
- long ftell (FILE*);
- void rewind (FILE*);
- #ifdef __USE_MINGW_FSEEK /* These are in libmingwex.a */
- /*
- * Workaround for limitations on win9x where a file contents are
- * not zero'd out if you seek past the end and then write.
- */
- int __mingw_fseek (FILE *, long, int);
- int __mingw_fwrite (const void*, size_t, size_t, FILE*);
- #define fseek(fp, offset, whence) __mingw_fseek(fp, offset, whence)
- #define fwrite(buffer, size, count, fp) __mingw_fwrite(buffer, size, count, fp)
- #endif /* __USE_MINGW_FSEEK */
- /*
- * An opaque data type used for storing file positions... The contents of
- * this type are unknown, but we (the compiler) need to know the size
- * because the programmer using fgetpos and fsetpos will be setting aside
- * storage for fpos_t structres. Actually I tested using a byte array and
- * it is fairly evident that the fpos_t type is a long (in CRTDLL.DLL).
- * Perhaps an unsigned long? TODO? It's definitely a 64-bit number in
- * MSVCRT however, and for now `long long' will do.
- */
- #ifdef __MSVCRT__
- typedef long long fpos_t;
- #else
- typedef long fpos_t;
- #endif
- int fgetpos (FILE*, fpos_t*);
- int fsetpos (FILE*, const fpos_t*);
- /*
- * Error Functions
- */
- void clearerr (FILE*);
- int feof (FILE*);
- int ferror (FILE*);
- void perror (const char*);
- #ifndef __STRICT_ANSI__
- /*
- * Pipes
- */
- FILE* _popen (const char*, const char*);
- int _pclose (FILE*);
- #ifndef NO_OLDNAMES
- FILE* popen (const char*, const char*);
- int pclose (FILE*);
- #endif
- /*
- * Other Non ANSI functions
- */
- int _flushall (void);
- int _fgetchar (void);
- int _fputchar (int);
- FILE* _fdopen (int, const char*);
- int _fileno (FILE*);
- #ifndef _NO_OLDNAMES
- int fgetchar (void);
- int fputchar (int);
- FILE* fdopen (int, const char*);
- int fileno (FILE*);
- #endif /* Not _NO_OLDNAMES */
- #endif /* Not __STRICT_ANSI__ */
- /* Wide versions */
- #ifndef _WSTDIO_DEFINED
- /* also in wchar.h - keep in sync */
- int fwprintf (FILE*, const wchar_t*, ...);
- int wprintf (const wchar_t*, ...);
- int swprintf (wchar_t*, const wchar_t*, ...);
- int _snwprintf (wchar_t*, size_t, const wchar_t*, ...);
- int vfwprintf (FILE*, const wchar_t*, va_list);
- int vwprintf (const wchar_t*, va_list);
- int vswprintf (wchar_t*, const wchar_t*, va_list);
- int _vsnwprintf (wchar_t*, size_t, const wchar_t*, va_list);
- int fwscanf (FILE*, const wchar_t*, ...);
- int wscanf (const wchar_t*, ...);
- int swscanf (const wchar_t*, const wchar_t*, ...);
- wint_t fgetwc (FILE*);
- wint_t fputwc (wchar_t, FILE*);
- wint_t ungetwc (wchar_t, FILE*);
- #ifdef __MSVCRT__
- wchar_t* fgetws (wchar_t*, int, FILE*);
- int fputws (const wchar_t*, FILE*);
- wint_t getwc (FILE*);
- wint_t getwchar (void);
- wchar_t* _getws (wchar_t*);
- wint_t putwc (wint_t, FILE*);
- int _putws (const wchar_t*);
- wint_t putwchar (wint_t);
- FILE* _wfopen (const wchar_t*, const wchar_t*);
- FILE* _wfreopen (const wchar_t*, const wchar_t*, FILE*);
- FILE* _wfsopen (const wchar_t*, const wchar_t*, int);
- wchar_t* _wtmpnam (wchar_t*);
- wchar_t* _wtempnam (const wchar_t*, const wchar_t*);
- int _wrename (const wchar_t*, const wchar_t*);
- int _wremove (const wchar_t*);
- void _wperror (const wchar_t*);
- FILE* _wpopen (const wchar_t*, const wchar_t*);
- #endif /* __MSVCRT__ */
- #ifndef __NO_ISOCEXT /* externs in libmingwex.a */
- int snwprintf(wchar_t* s, size_t n, const wchar_t* format, ...);
- extern inline int vsnwprintf (wchar_t* s, size_t n, const wchar_t* format,
- va_list arg)
- { return _vsnwprintf ( s, n, format, arg); }
- #endif
- #define _WSTDIO_DEFINED
- #endif /* _WSTDIO_DEFINED */
- #ifndef __STRICT_ANSI__
- #ifdef __MSVCRT__
- #ifndef NO_OLDNAMES
- FILE* wpopen (const wchar_t*, const wchar_t*);
- #endif /* not NO_OLDNAMES */
- #endif /* MSVCRT runtime */
- /*
- * Other Non ANSI wide functions
- */
- wint_t _fgetwchar (void);
- wint_t _fputwchar (wint_t);
- int _getw (FILE*);
- int _putw (int, FILE*);
- #ifndef _NO_OLDNAMES
- wint_t fgetwchar (void);
- wint_t fputwchar (wint_t);
- int getw (FILE*);
- int putw (int, FILE*);
- #endif /* Not _NO_OLDNAMES */
- #endif /* __STRICT_ANSI */
- #ifdef __cplusplus
- }
- #endif
- #endif /* Not RC_INVOKED */
- #endif /* _STDIO_H_ */
|