| /* |
| * 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 <colin@bird.fu.is.saga-u.ac.jp> |
| * |
| * 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 |
| * DISCLAMED. This includes but is not limited to warranties of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| * |
| * $Revision$ |
| * $Author$ |
| * $Date$ |
| * |
| */ |
| |
| #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 */ |
| |
| |
| /* Some flags for the iobuf structure provided by <paag@tid.es> */ |
| #define _IOREAD 1 |
| #define _IOWRT 2 |
| #define _IORW 4 |
| |
| /* |
| * 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) |
| |
| /* |
| * The maximum size of name (including NUL) that will be put in the user |
| * supplied buffer caName for tmpnam. |
| * NOTE: This has not been determined by experiment, but based on the |
| * maximum file name length above it is probably reasonable. I could be |
| * wrong... |
| */ |
| #define L_tmpnam (260) |
| |
| /* |
| * The three possible buffering mode (nMode) values for setvbuf. |
| * NOTE: _IOFBF works, but _IOLBF seems to work like unbuffered... |
| * maybe I'm testing it wrong? |
| */ |
| #define _IOFBF 0 /* fully buffered */ |
| #define _IOLBF 1 /* line buffered */ |
| #define _IONBF 2 /* unbuffered */ |
| |
| /* |
| * 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 |
| typedef char* va_list; |
| #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 |
| * <paag@tid.es>. |
| */ |
| #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*); |
| 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); |
| |
| /* Wide character versions */ |
| int fwprintf (FILE*, const wchar_t*, ...); |
| int wprintf (const wchar_t*, ...); |
| int swprintf (wchar_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); |
| |
| /* |
| * Formatted Input |
| */ |
| |
| int fscanf (FILE*, const char*, ...); |
| int scanf (const char*, ...); |
| int sscanf (const char*, const char*, ...); |
| |
| /* Wide character versions */ |
| int fwscanf (FILE*, const wchar_t*, ...); |
| int wscanf (const wchar_t*, ...); |
| int swscanf (wchar_t*, const wchar_t*, ...); |
| |
| /* |
| * 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*); |
| |
| /* Wide character versions */ |
| 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); |
| #endif /* __MSVCRT__ */ |
| |
| /* |
| * 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*); |
| |
| /* |
| * 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 |
| |
| /* The wide character version, only available in MSVCRT DLL versions, not |
| * CRTDLL. */ |
| #ifdef __MSVCRT__ |
| FILE* _wpopen (const wchar_t*, const wchar_t*); |
| |
| #ifndef NO_OLDNAMES |
| #if 0 |
| FILE* wpopen (const wchar_t*, const wchar_t*); |
| #else /* Always true */ |
| /* |
| * The above prototypeing is not possible unless the wpopen export is added |
| * to moldnames, which can't be done unless we make separate moldnames.def |
| * files for every supported runtime. For the time being we use a define |
| * instead. Pedro's modified dlltool should take care of this I think. |
| */ |
| #define wpopen _wpopen |
| #endif /* Always true */ |
| |
| #endif /* not NO_OLDNAMES */ |
| #endif /* MSVCRT runtime */ |
| |
| /* |
| * Other Non ANSI functions |
| */ |
| int _fgetchar (void); |
| int _fputchar (int); |
| FILE* _fdopen (int, const char*); |
| wint_t _fgetwchar(void); |
| wint_t _fputwchar(wint_t); |
| int _fileno (FILE*); |
| int _getw (FILE*); |
| int _putw (int, FILE*); |
| |
| #ifndef _NO_OLDNAMES |
| int fgetchar (void); |
| int fputchar (int); |
| FILE* fdopen (int, const char*); |
| wint_t fgetwchar(void); |
| wint_t fputwchar(wint_t); |
| int fileno (FILE*); |
| int getw (FILE*); |
| int putw (int, FILE*); |
| #endif /* Not _NO_OLDNAMES */ |
| |
| #endif /* Not __STRICT_ANSI__ */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* Not RC_INVOKED */ |
| |
| #endif /* _STDIO_H_ */ |