home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / devc / _SETUP.5 / Group3 / stdio.h < prev    next >
C/C++ Source or Header  |  1999-11-07  |  10KB  |  380 lines

  1. /*
  2.  * stdio.h
  3.  *
  4.  * Definitions of types and prototypes of functions for standard input and
  5.  * output.
  6.  *
  7.  * NOTE: The file manipulation functions provided by Microsoft seem to
  8.  * work with either slash (/) or backslash (\) as the path separator.
  9.  *
  10.  * This file is part of the Mingw32 package.
  11.  *
  12.  * Contributors:
  13.  *  Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
  14.  *
  15.  *  THIS SOFTWARE IS NOT COPYRIGHTED
  16.  *
  17.  *  This source code is offered for use in the public domain. You may
  18.  *  use, modify or distribute it freely.
  19.  *
  20.  *  This code is distributed in the hope that it will be useful but
  21.  *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  22.  *  DISCLAMED. This includes but is not limited to warranties of
  23.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  24.  *
  25.  * $Revision: 1.9 $
  26.  * $Author: khan $
  27.  * $Date: 1999/06/15 00:47:30 $
  28.  *
  29.  */
  30.  
  31. #ifndef _STDIO_H_
  32. #define    _STDIO_H_
  33.  
  34. /* All the headers include this file. */
  35. #include <_mingw.h>
  36.  
  37. #define __need_size_t
  38. #define __need_NULL
  39. #define __need_wchar_t
  40. #define    __need_wint_t
  41. #ifndef RC_INVOKED
  42. #include <stddef.h>
  43. #endif    /* Not RC_INVOKED */
  44.  
  45.  
  46. /* Some flags for the iobuf structure provided by <paag@tid.es> */
  47. #define    _IOREAD    1
  48. #define    _IOWRT    2
  49. #define    _IORW    4
  50.  
  51. /*
  52.  * The three standard file pointers provided by the run time library.
  53.  * NOTE: These will go to the bit-bucket silently in GUI applications!
  54.  */
  55. #define    STDIN_FILENO    0
  56. #define    STDOUT_FILENO    1
  57. #define    STDERR_FILENO    2
  58.  
  59. /* Returned by various functions on end of file condition or error. */
  60. #define    EOF    (-1)
  61.  
  62. /*
  63.  * The maximum length of a file name. You should use GetVolumeInformation
  64.  * instead of this constant. But hey, this works.
  65.  *
  66.  * NOTE: This is used in the structure _finddata_t (see io.h) so changing it
  67.  *       is probably not a good idea.
  68.  */
  69. #define    FILENAME_MAX    (260)
  70.  
  71. /*
  72.  * The maximum number of files that may be open at once. I have set this to
  73.  * a conservative number. The actual value may be higher.
  74.  */
  75. #define FOPEN_MAX    (20)
  76.  
  77. /*
  78.  * The maximum size of name (including NUL) that will be put in the user
  79.  * supplied buffer caName for tmpnam.
  80.  * NOTE: This has not been determined by experiment, but based on the
  81.  * maximum file name length above it is probably reasonable. I could be
  82.  * wrong...
  83.  */
  84. #define    L_tmpnam    (260)
  85.  
  86. /*
  87.  * The three possible buffering mode (nMode) values for setvbuf.
  88.  * NOTE: _IOFBF works, but _IOLBF seems to work like unbuffered...
  89.  * maybe I'm testing it wrong?
  90.  */
  91. #define    _IOFBF    0    /* fully buffered */
  92. #define    _IOLBF    1    /* line buffered */
  93. #define    _IONBF    2    /* unbuffered */
  94.  
  95. /*
  96.  * The buffer size as used by setbuf such that it is equivalent to
  97.  * (void) setvbuf(fileSetBuffer, caBuffer, _IOFBF, BUFSIZ).
  98.  */
  99. #define    BUFSIZ    512
  100.  
  101. /* Constants for nOrigin indicating the position relative to which fseek
  102.  * sets the file position. Enclosed in ifdefs because io.h could also
  103.  * define them. (Though not anymore since io.h includes this file now.) */
  104. #ifndef    SEEK_SET
  105. #define SEEK_SET    (0)
  106. #endif
  107.  
  108. #ifndef    SEEK_CUR
  109. #define    SEEK_CUR    (1)
  110. #endif
  111.  
  112. #ifndef    SEEK_END
  113. #define SEEK_END    (2)
  114. #endif
  115.  
  116.  
  117. #ifndef    RC_INVOKED
  118.  
  119. /*
  120.  * I used to include stdarg.h at this point, in order to allow for the
  121.  * functions later on in the file which use va_list. That conflicts with
  122.  * using stdio.h and varargs.h in the same file, so I do the typedef myself.
  123.  */
  124. #ifndef _VA_LIST
  125. #define _VA_LIST
  126. typedef    char* va_list;
  127. #endif
  128.  
  129. /*
  130.  * The structure underlying the FILE type.
  131.  *
  132.  * I still believe that nobody in their right mind should make use of the
  133.  * internals of this structure. Provided by Pedro A. Aranda Gutiirrez
  134.  * <paag@tid.es>.
  135.  */
  136. #ifndef _FILE_DEFINED
  137. #define    _FILE_DEFINED
  138. typedef struct _iobuf
  139. {
  140.     char*    _ptr;
  141.     int    _cnt;
  142.     char*    _base;
  143.     int    _flag;
  144.     int    _file;
  145.     int    _charbuf;
  146.     int    _bufsiz;
  147.     char*    _tmpfname;
  148. } FILE;
  149. #endif    /* Not _FILE_DEFINED */
  150.  
  151.  
  152. /*
  153.  * The standard file handles
  154.  */
  155. #ifndef __DECLSPEC_SUPPORTED
  156.  
  157. extern FILE (*__imp__iob)[];    /* A pointer to an array of FILE */
  158.  
  159. #define _iob    (*__imp__iob)    /* An array of FILE */
  160.  
  161. #else /* __DECLSPEC_SUPPORTED */
  162.  
  163. __MINGW_IMPORT FILE _iob[];    /* An array of FILE imported from DLL. */
  164.  
  165. #endif /* __DECLSPEC_SUPPORTED */
  166.  
  167. #define stdin    (&_iob[STDIN_FILENO])
  168. #define stdout    (&_iob[STDOUT_FILENO])
  169. #define stderr    (&_iob[STDERR_FILENO])
  170.  
  171. #ifdef __cplusplus
  172. extern "C" {
  173. #endif
  174.  
  175. /*
  176.  * File Operations
  177.  */
  178.  
  179. FILE*    fopen (const char* szFileName, const char* szMode);
  180. FILE*    freopen (const char* szNewFileName, const char* szNewMode,
  181.          FILE* fileChangeAssociation);
  182. int    fflush (FILE* fileFlush);
  183. int    fclose (FILE* fileClose);
  184. int    remove (const char* szFileName);
  185. int    rename (const char* szOldFileName, const char* szNewFileName);
  186. FILE*    tmpfile ();
  187. char*    tmpnam (char caName[]);
  188. char*    _tempnam (const char* szPath, const char* szPrefix);
  189.  
  190. #ifndef    NO_OLDNAMES
  191. char*    tempnam (const char* szPath, const char* szPrefix);
  192. #endif
  193.  
  194. int    setvbuf (FILE* fileSetBuffer, char* caBuffer, int nMode,
  195.          size_t sizeBuffer);
  196.  
  197. void    setbuf (FILE* fileSetBuffer, char* caBuffer);
  198.  
  199. /*
  200.  * Formatted Output
  201.  */
  202.  
  203. int    fprintf (FILE* filePrintTo, const char* szFormat, ...);
  204. int    printf (const char* szFormat, ...);
  205. int    sprintf (char* caBuffer, const char* szFormat, ...);
  206. int     _snprintf (char* caBuffer, size_t n, const char* szFormat, ...);
  207. int    vfprintf (FILE* filePrintTo, const char* szFormat, va_list varg);
  208. int    vprintf (const char* szFormat, va_list varg);
  209. int    vsprintf (char* caBuffer, const char* szFormat, va_list varg);
  210. int     _vsnprintf (char* caBuffer, size_t n, const char* szFormat,
  211.                     va_list varg);
  212.  
  213. /* Wide character versions */
  214. int    fwprintf (FILE* filePrintTo, const wchar_t* wsFormat, ...);
  215. int    wprintf (const wchar_t* wsFormat, ...);
  216. int    swprintf (wchar_t* wcaBuffer, const wchar_t* wsFormat, ...);
  217. int    vfwprintf (FILE* filePrintTo, const wchar_t* wsFormat, va_list varg);
  218. int    vwprintf (const wchar_t* wsFormat, va_list varg);
  219. int    vswprintf (wchar_t* wcaBuffer, const wchar_t* wsFormat, va_list varg);
  220.  
  221. /*
  222.  * Formatted Input
  223.  */
  224.  
  225. int    fscanf (FILE* fileReadFrom, const char* szFormat, ...);
  226. int    scanf (const char* szFormat, ...);
  227. int    sscanf (const char* szReadFrom, const char* szFormat, ...);
  228.  
  229. /* Wide character versions */
  230. int    fwscanf (FILE* fileReadFrom, const wchar_t* wsFormat, ...);
  231. int    wscanf (const wchar_t* wsFormat, ...);
  232. int    swscanf (wchar_t* wsReadFrom, const wchar_t* wsFormat, ...);
  233.  
  234. /*
  235.  * Character Input and Output Functions
  236.  */
  237.  
  238. int    fgetc (FILE* fileRead);
  239. char*    fgets (char* caBuffer, int nBufferSize, FILE* fileRead);
  240. int    fputc (int c, FILE* fileWrite);
  241. int    fputs (const char* szOutput, FILE* fileWrite);
  242. int    getc (FILE* fileRead);
  243. int    getchar ();
  244. char*    gets (char* caBuffer);    /* Unsafe: how does gets know how long the
  245.                  * buffer is? */
  246. int    putc (int c, FILE* fileWrite);
  247. int    putchar (int c);
  248. int    puts (const char* szOutput);
  249. int    ungetc (int c, FILE* fileWasRead);
  250.  
  251. /* Wide character versions */
  252. wint_t    fgetwc (FILE* fileRead);
  253. wint_t    fputwc (wchar_t wc, FILE* fileWrite);
  254. wint_t    ungetwc (wchar_t wc, FILE* fileWasRead);
  255.  
  256.  
  257. /*
  258.  * Not exported by CRTDLL.DLL included for reference purposes.
  259.  */
  260. #if 0
  261. wchar_t*    fgetws (wchar_t* wcaBuffer, int nBufferSize, FILE* fileRead);
  262. int        fputws (const wchar_t* wsOutput, FILE* fileWrite);
  263. int        getwc (FILE* fileRead);
  264. int        getwchar ();
  265. wchar_t*    getws (wchar_t* wcaBuffer);
  266. int        putwc (wchar_t wc, FILE* fileWrite);
  267. int        putws (const wchar_t* wsOutput);
  268. #endif    /* 0 */
  269.  
  270. /* NOTE: putchar has no wide char equivalent even in tchar.h */
  271.  
  272.  
  273. /*
  274.  * Direct Input and Output Functions
  275.  */
  276.  
  277. size_t    fread (void* pBuffer, size_t sizeObject, size_t sizeObjCount,
  278.         FILE* fileRead);
  279. size_t    fwrite (const void* pObjArray, size_t sizeObject, size_t sizeObjCount,
  280.         FILE* fileWrite);
  281.  
  282.  
  283. /*
  284.  * File Positioning Functions
  285.  */
  286.  
  287. int    fseek    (FILE* fileSetPosition, long lnOffset, int nOrigin);
  288. long    ftell    (FILE* fileGetPosition);
  289. void    rewind    (FILE* fileRewind);
  290.  
  291. /*
  292.  * An opaque data type used for storing file positions... The contents of
  293.  * this type are unknown, but we (the compiler) need to know the size
  294.  * because the programmer using fgetpos and fsetpos will be setting aside
  295.  * storage for fpos_t structres. Actually I tested using a byte array and
  296.  * it is fairly evident that the fpos_t type is a long (in CRTDLL.DLL).
  297.  * Perhaps an unsigned long? TODO?
  298.  */
  299. typedef long    fpos_t;
  300.  
  301. int    fgetpos    (FILE* fileGetPosition, fpos_t* pfpos);
  302. int    fsetpos (FILE* fileSetPosition, fpos_t* pfpos);
  303.  
  304. /*
  305.  * Error Functions
  306.  */
  307.  
  308. void    clearerr (FILE* fileClearErrors);
  309. int    feof (FILE* fileIsAtEnd);
  310. int    ferror (FILE* fileIsError);
  311. void    perror (const char* szErrorMessage);
  312.  
  313.  
  314. #ifndef __STRICT_ANSI__
  315.  
  316. /*
  317.  * Pipes
  318.  */
  319. FILE*    _popen (const char* szPipeName, const char* szMode);
  320. int    _pclose (FILE* pipeClose);
  321.  
  322. #ifndef NO_OLDNAMES
  323. FILE*    popen (const char* szPipeName, const char* szMode);
  324. int    pclose (FILE* pipeClose);
  325. #endif
  326.  
  327. /* The wide character version, only available in MSVCRT DLL versions, not
  328.  * CRTDLL. */
  329. #ifdef __MSVCRT__
  330. FILE*    _wpopen (const wchar_t* szPipeName, const wchar_t* szMode);
  331.  
  332. #ifndef NO_OLDNAMES
  333. #if 0
  334. FILE*    wpopen (const wchar_t* szPipeName, const wchar_t* szMode);
  335. #else /* Always true */
  336. /*
  337.  * The above prototypeing is not possible unless the wpopen export is added
  338.  * to moldnames, which can't be done unless we make separate moldnames.def
  339.  * files for every supported runtime. For the time being we use a define
  340.  * instead. Pedro's modified dlltool should take care of this I think.
  341.  */
  342. #define wpopen _wpopen
  343. #endif    /* Always true */
  344.  
  345. #endif /* not NO_OLDNAMES */
  346. #endif /* MSVCRT runtime */
  347.  
  348. /*
  349.  * Other Non ANSI functions
  350.  */
  351. int    _fgetchar ();
  352. int    _fputchar (int c);
  353. FILE*    _fdopen (int nHandle, const char* szMode);
  354. wint_t    _fgetwchar(void);
  355. wint_t    _fputwchar(wint_t c);
  356. int    _fileno (FILE* fileGetHandle);
  357. int    _getw (FILE*);
  358. int    _putw (int, FILE*);
  359.  
  360. #ifndef _NO_OLDNAMES
  361. int    fgetchar ();
  362. int    fputchar (int c);
  363. FILE*    fdopen (int nHandle, const char* szMode);
  364. wint_t    fgetwchar(void);
  365. wint_t    fputwchar(wint_t c);
  366. int    fileno (FILE* fileGetHandle);
  367. int    getw (FILE*);
  368. int    putw (int, FILE*);
  369. #endif    /* Not _NO_OLDNAMES */
  370.  
  371. #endif    /* Not __STRICT_ANSI__ */
  372.  
  373. #ifdef __cplusplus
  374. }
  375. #endif
  376.  
  377. #endif    /* Not RC_INVOKED */
  378.  
  379. #endif /* _STDIO_H_ */
  380.