home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 April / PCWorld_2000-04_cd.bin / Software / Servis / Devc / _SETUP.4 / Group3 / io.h < prev    next >
C/C++ Source or Header  |  1999-11-07  |  8KB  |  261 lines

  1. /* 
  2.  * io.h
  3.  *
  4.  * System level I/O functions and types.
  5.  *
  6.  * This file is part of the Mingw32 package.
  7.  *
  8.  * Contributors:
  9.  *  Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
  10.  *
  11.  *  THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  *  This source code is offered for use in the public domain. You may
  14.  *  use, modify or distribute it freely.
  15.  *
  16.  *  This code is distributed in the hope that it will be useful but
  17.  *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18.  *  DISCLAMED. This includes but is not limited to warranties of
  19.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  * $Revision: 1.4 $
  22.  * $Author: khan $
  23.  * $Date: 1999/07/16 01:59:23 $
  24.  *
  25.  */
  26.  
  27. #ifndef    __STRICT_ANSI__
  28.  
  29. #ifndef    _IO_H_
  30. #define    _IO_H_
  31.  
  32. /* All the headers include this file. */
  33. #include <_mingw.h>
  34.  
  35. /* We need the definition of FILE anyway... */
  36. #include <stdio.h>
  37.  
  38. /* MSVC's io.h contains the stuff from dir.h, so I will too.
  39.  * NOTE: This also defines off_t, the file offset type, through
  40.  *       an inclusion of sys/types.h */
  41. #ifndef __STRICT_ANSI__
  42.  
  43. #include <sys/types.h>    /* To get time_t. */
  44.  
  45. /*
  46.  * Attributes of files as returned by _findfirst et al.
  47.  */
  48. #define    _A_NORMAL    0x00000000
  49. #define    _A_RDONLY    0x00000001
  50. #define    _A_HIDDEN    0x00000002
  51. #define    _A_SYSTEM    0x00000004
  52. #define    _A_VOLID    0x00000008
  53. #define    _A_SUBDIR    0x00000010
  54. #define    _A_ARCH        0x00000020
  55.  
  56.  
  57. #ifndef RC_INVOKED
  58.  
  59. #ifndef    _FSIZE_T_DEFINED
  60. typedef    unsigned long    _fsize_t;
  61. #define _FSIZE_T_DEFINED
  62. #endif
  63.  
  64. /*
  65.  * The following structure is filled in by _findfirst or _findnext when
  66.  * they succeed in finding a match.
  67.  */
  68. struct _finddata_t
  69. {
  70.     unsigned    attrib;        /* Attributes, see constants above. */
  71.     time_t        time_create;
  72.     time_t        time_access;    /* always midnight local time */
  73.     time_t        time_write;
  74.     _fsize_t    size;
  75.     char        name[FILENAME_MAX];    /* may include spaces. */
  76. };
  77.  
  78. #ifndef _WFINDDATA_T_DEFINED
  79. struct _wfinddata_t {
  80.         unsigned    attrib;
  81.         time_t        time_create;    /* -1 for FAT file systems */
  82.         time_t        time_access;    /* -1 for FAT file systems */
  83.         time_t        time_write;
  84.         _fsize_t    size;
  85.         wchar_t        name[FILENAME_MAX];    /* may include spaces. */
  86. };
  87. #define _WFINDDATA_T_DEFINED
  88. #endif
  89.  
  90. #ifdef    __cplusplus
  91. extern "C" {
  92. #endif
  93.  
  94. /*
  95.  * Functions for searching for files. _findfirst returns -1 if no match
  96.  * is found. Otherwise it returns a handle to be used in _findnext and
  97.  * _findclose calls. _findnext also returns -1 if no match could be found,
  98.  * and 0 if a match was found. Call _findclose when you are finished.
  99.  */
  100. int    _findfirst (const char* szFilespec, struct _finddata_t* find);
  101. int    _findnext (int nHandle, struct _finddata_t* find);
  102. int    _findclose (int nHandle);
  103.  
  104. int    _chdir (const char* szPath);
  105. char*    _getcwd (char* caBuffer, int nBufferSize);
  106. int    _mkdir (const char* szPath);
  107. char*    _mktemp (char* szTemplate);
  108. int    _rmdir (const char* szPath);
  109.  
  110.  
  111. #ifndef _NO_OLDNAMES
  112.  
  113. #ifndef _UWIN
  114. int    chdir (const char* szPath);
  115. char*    getcwd (char* caBuffer, int nBufferSize);
  116. int    mkdir (const char* szPath);
  117. char*    mktemp (char* szTemplate);
  118. int    rmdir (const char* szPath);
  119. #endif /* _UWIN */
  120.  
  121. #endif /* Not _NO_OLDNAMES */
  122.  
  123. #ifdef    __cplusplus
  124. }
  125. #endif
  126.  
  127. #endif    /* Not RC_INVOKED */
  128.  
  129. #endif    /* Not __STRICT_ANSI__ */
  130.  
  131. /* TODO: Maximum number of open handles has not been tested, I just set
  132.  * it the same as FOPEN_MAX. */
  133. #define    HANDLE_MAX    FOPEN_MAX
  134.  
  135.  
  136. /* Some defines for _access nAccessMode (MS doesn't define them, but
  137.  * it doesn't seem to hurt to add them). */
  138. #define    F_OK    0    /* Check for file existence */
  139. #define    X_OK    1    /* Check for execute permission. */
  140. #define    W_OK    2    /* Check for write permission */
  141. #define    R_OK    4    /* Check for read permission */
  142.  
  143. #ifndef RC_INVOKED
  144.  
  145. #ifdef    __cplusplus
  146. extern "C" {
  147. #endif
  148.  
  149. int        _access (const char* szFileName, int nAccessMode);
  150. int        _chsize (int nHandle, long lnNewSize);
  151. int        _close (int nHandle);
  152.  
  153. /* NOTE: The only significant bit in unPermissions appears to be bit 7 (0x80),
  154.  *       the "owner write permission" bit (on FAT). */
  155. int        _creat (const char* szFileName, unsigned unPermissions);
  156.  
  157. int        _dup (int nHandle);
  158. int        _dup2 (int nOldHandle, int nNewHandle);
  159. long        _filelength (int nHandle);
  160. int        _fileno (FILE* fileGetHandle);
  161. long        _get_osfhandle (int nHandle);
  162. int        _isatty (int nHandle);
  163.  
  164. /* In a very odd turn of events this function is excluded from those
  165.  * files which define _STREAM_COMPAT. This is required in order to
  166.  * build GNU libio because of a conflict with _eof in streambuf.h
  167.  * line 107. Actually I might just be able to change the name of
  168.  * the enum member in streambuf.h... we'll see. TODO */
  169. #ifndef    _STREAM_COMPAT
  170. int        _eof (int nHandle);
  171. #endif
  172.  
  173. /* LK_... locking commands defined in sys/locking.h. */
  174. int        _locking (int nHandle, int nCmd, long lnLockRegionLength);
  175.  
  176. long        _lseek (int nHandle, long lnOffset, int nOrigin);
  177.  
  178. /* Optional third argument is unsigned unPermissions. */
  179. int        _open (const char* szFileName, int nFlags, ...);
  180.  
  181. int        _open_osfhandle (long lnOSHandle, int nFlags);
  182. int        _pipe (int *naHandles, unsigned int unSize, int nMode);
  183. int        _read (int nHandle, void* caBuffer, unsigned int nToRead);
  184.  
  185. /* SH_... flags for nShFlags defined in share.h
  186.  * Optional fourth argument is unsigned unPermissions */
  187. int        _sopen (const char* szFileName, int nFlags, int nShFlags, ...);
  188.  
  189. long        _tell (int nHandle);
  190. /* Should umask be in sys/stat.h and/or sys/types.h instead? */
  191. int        _umask (int nMode);
  192. int        _unlink (const char* szFileName);
  193. int        _write (int nHandle, const void* caBuffer,
  194.                 unsigned int unToWrite);
  195.  
  196. /* Wide character versions. Also declared in wchar.h. */
  197. int         _waccess(const wchar_t *, int);
  198. int         _wchmod(const wchar_t *, int);
  199. int         _wcreat(const wchar_t *, int);
  200. long         _wfindfirst(wchar_t *, struct _wfinddata_t *);
  201. int         _wfindnext(long, struct _wfinddata_t *);
  202. int         _wunlink(const wchar_t *);
  203. int         _wrename(const wchar_t *, const wchar_t *);
  204. int         _wopen(const wchar_t *, int, ...);
  205. int         _wsopen(const wchar_t *, int, int, ...);
  206. wchar_t *     _wmktemp(wchar_t *);
  207.  
  208.  
  209. #ifndef    _NO_OLDNAMES
  210. /*
  211.  * Non-underscored versions of non-ANSI functions to improve portability.
  212.  * These functions live in libmoldname.a.
  213.  */
  214.  
  215. #ifndef _UWIN
  216. int        access (const char* szFileName, int nAccessMode);
  217. int        chsize (int nHandle, long lnNewSize);
  218. int        close (int nHandle);
  219. int        creat (const char* szFileName, int nAccessMode);
  220. int        dup (int nHandle);
  221. int        dup2 (int nOldHandle, int nNewHandle);
  222. int        eof (int nHandle);
  223. long        filelength (int nHandle);
  224. int        fileno (FILE* fileGetHandle);
  225. int        isatty (int nHandle);
  226. long        lseek (int nHandle, long lnOffset, int nOrigin);
  227. int        open (const char* szFileName, int nFlags, ...);
  228. int        read (int nHandle, void* caBuffer, unsigned int nToRead);
  229. int        sopen (const char* szFileName, int nAccess, int nFlag, ...);
  230. long        tell (int nHandle);
  231. int        umask (int nMode);
  232. int        unlink (const char* szFileName);
  233. int        write (int nHandle, const void* caBuffer,
  234.                unsigned int nToWrite);
  235. #endif /* _UWIN */
  236.  
  237. /* Wide character versions. Also declared in wchar.h. */
  238. int         waccess(const wchar_t *, int);
  239. int         wchmod(const wchar_t *, int);
  240. int         wcreat(const wchar_t *, int);
  241. long         wfindfirst(wchar_t *, struct _wfinddata_t *);
  242. int         wfindnext(long, struct _wfinddata_t *);
  243. int         wunlink(const wchar_t *);
  244. int         wrename(const wchar_t *, const wchar_t *);
  245. int         wopen(const wchar_t *, int, ...);
  246. int         wsopen(const wchar_t *, int, int, ...);
  247. wchar_t *     wmktemp(wchar_t *);
  248.  
  249. #endif    /* Not _NO_OLDNAMES */
  250.  
  251. #ifdef    __cplusplus
  252. }
  253. #endif
  254.  
  255. #endif    /* Not RC_INVOKED */
  256.  
  257. #endif    /* _IO_H_ not defined */
  258.  
  259. #endif    /* Not strict ANSI */
  260.  
  261.