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