home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / famapi.zip / INCLUDE.ZIP / STDIO.H < prev    next >
C/C++ Source or Header  |  1992-12-28  |  8KB  |  216 lines

  1. //
  2. //      **************************************************************
  3. //       JdeBP C++ Library Routines      General Public Licence v1.00
  4. //          Copyright (c) 1991,1992  Jonathan de Boyne Pollard
  5. //      **************************************************************
  6. //
  7. //  STANDARD INPUT/OUTPUT LIBRARY (ANSI)
  8. //
  9.  
  10. #if !defined(___STDDEF_H_INCLUDED)
  11. #include <_stddef.h>
  12. #endif
  13.  
  14. #if !defined(__STDIO_H_INCLUDED)
  15.  
  16. #define NULL    _NULL
  17.  
  18. // Minimum #guaranteed# simultaneously open files
  19. #define FOPEN_MAX       15
  20.  
  21. #define _IOFBF          0x00        /* Full Buffering               */
  22. #define _IOLBF          0x40        /* Line buffering               */
  23. #define _IONBF          0x04        /* No buffering                 */
  24. #define BUFSIZ          512         /* setbuf() buffer size         */
  25. #define EOF             (-1)        /* End Of File                  */
  26. #define FILENAME_MAX    63          /* Max filename length          */
  27. #define L_tmpnam        63          /* Max len of tmpnam()          */
  28. #define SEEK_CUR        1
  29. #define SEEK_END        2
  30. #define SEEK_SET        0
  31. #define TMP_MAX         0x7FFF      /* Maximum no of names for tmpnam() */
  32.  
  33. #if _POSIX1_SOURCE > 0
  34. #define L_ctermid       5           /* 'C' 'O' 'N' ':' '\000' */
  35. #endif
  36.  
  37. #if _SYSV_SOURCE > 0
  38. #define _NFILE          20
  39. #define P_tmpnam        "\\"
  40. #define SYS_OPEN        20
  41. #endif
  42.  
  43. #ifndef _FPOS_T_DEFINED
  44. typedef _Fpos_t fpos_t;
  45. #define _FPOS_T_DEFINED
  46. #endif
  47.  
  48. #ifndef _SIZE_T_DEFINED
  49. typedef _Size_t size_t;
  50. #define _SIZE_T_DEFINED
  51. #endif
  52.  
  53. #ifndef _FILE_DEFINED
  54. class FILE {
  55.     FILE(const FILE &);             // Prevent initialisation by another
  56.     FILE & operator=(const FILE &); // Prevent assignment
  57. public:
  58.  
  59.     unsigned short  OpenFlags;      // OS/2 and DOS open flags
  60.     unsigned short  OpenMode;       // OS/2 and DOS open mode
  61.     unsigned short  Attribute;      // OS/2 and DOS file attribute
  62.  
  63.     unsigned short  flags;          // Status flags, see below
  64.     int             fd;             // OS file number (may be table index)
  65.     unsigned char * buf;            // Start of buffer.
  66.     unsigned char * bufend;         // End of allocated buffer
  67.     unsigned char * next;           // Next char to read or write. NEVER NULL.
  68.     unsigned char * rdend;          // End of readables. NEVER NULL.
  69.     unsigned char * rdendsave;      // Save for above when ungetc() called
  70.     unsigned char * wrend;          // End of writables. NEVER NULL.
  71.     unsigned char   pushback[2];    // Pushed back characters
  72.     unsigned char   charbuf;        // Buffer if none allocated
  73.     unsigned char   nback;          // Number of pushed back characters
  74.     unsigned char * tmpnam;         // Pointer to temporary name
  75.  
  76.     // For Standard Library use only :-
  77.  
  78.     // Associate with and Dissociate from O/S files and change modes
  79.     unsigned short  _CDECL  _fmode  (const char *) ;
  80.     unsigned short  _CDECL  _fopen  (const char *) ;
  81.     unsigned short  _CDECL  _fdopen (int) ;
  82.     int             _CDECL  _fclose (void) ;
  83.  
  84.     void _CDECL _MakeBuf(size_t) ;          // Free up buffer allocation
  85.  
  86.     int  _CDECL _fsetpos(fpos_t *, long, int) ;
  87.     long _CDECL _fgetpos(fpos_t *) ;
  88.  
  89.     int _CDECL  _frprep (void) ;
  90.     int _CDECL  _fwprep (void) ;
  91.  
  92.     FILE() ;
  93.     ~FILE() ;
  94.     FILE(int, unsigned short, unsigned short) ;
  95.     FILE(int, unsigned short, unsigned short, size_t) ;
  96.     void *  operator new (size_t) ;
  97.     void    operator delete (void *, size_t) ;
  98. };
  99. #define _FILE_DEFINED
  100. #endif
  101.  
  102. extern "C" {
  103.  
  104. void    _CDECL  clearerr    (FILE *);
  105. int     _CDECL  fclose      (FILE *);
  106. int     _CDECL  feof        (FILE *);
  107. int     _CDECL  ferror      (FILE *);
  108. int     _CDECL  fflush      (FILE *);
  109. int     _CDECL  fgetc       (FILE *);
  110. int     _CDECL  fgetpos     (FILE *, fpos_t *);
  111. char *  _CDECL  fgets       (char *, int, FILE *);
  112. FILE *  _CDECL  fopen       (const char *, const char *);
  113. int     _CDECL  fprintf     (FILE *, const char *, ...);
  114. int     _CDECL  fputc       (int, FILE *);
  115. int     _CDECL  fputs       (const char *, FILE *);
  116. int     _CDECL  fread       (void *, size_t, size_t, FILE *);
  117. FILE *  _CDECL  freopen     (const char *, const char *, FILE *);
  118. int     _CDECL  fscanf      (FILE *, const char *, ...);
  119. int     _CDECL  fseek       (FILE *, long, int);
  120. int     _CDECL  fsetpos     (FILE *, fpos_t *);
  121. long    _CDECL  ftell       (FILE *);
  122. size_t  _CDECL  fwrite      (const void *, size_t, size_t, FILE *);
  123. int     _CDECL  getc        (FILE *);
  124. int     _CDECL  getchar     (void);
  125. char *  _CDECL  gets        (char *);
  126. void    _CDECL  perror      (const char *);
  127. int     _CDECL  printf      (const char *, ...);
  128. int     _CDECL  putc        (int, FILE *);
  129. int     _CDECL  putchar     (int);
  130. int     _CDECL  puts        (const char *);
  131. int     _CDECL  remove      (const char *);
  132. int     _CDECL  rename      (const char *, const char *);
  133. void    _CDECL  rewind      (FILE *);
  134. int     _CDECL  scanf       (const char *, ...);
  135. void    _CDECL  setbuf      (FILE *, char *);
  136. int     _CDECL  setvbuf     (FILE *, char *, int, size_t);
  137. int     _CDECL  sprintf     (char *, const char *, ...);
  138. int     _CDECL  sscanf      (const char *, const char *, ...);
  139. FILE *  _CDECL  tmpfile     (void);
  140. char *  _CDECL  tmpnam      (char *);
  141. int     _CDECL  ungetc      (int, FILE *);
  142. int     _CDECL  vfprintf    (FILE *, const char *, char *);
  143. int     _CDECL  vprintf     (const char *, char *);
  144. int     _CDECL  vsprintf    (char *, const char *, char *);
  145.  
  146. #if _POSIX1_SOURCE > 0
  147. FILE *  _CDECL  fdopen      (int, const char *);
  148. int     _CDECL  fileno      (FILE *);
  149. #endif
  150.  
  151. #if _POSIX2_SOURCE > 0
  152. FILE *  _CDECL  popen       (const char *, const char *);
  153. int     _CDECL  pclose      (FILE *);
  154. #endif
  155.  
  156. #if _MSDOS_SOURCE > 0
  157. int     _CDECL  fgetchar    (void);
  158. int     _CDECL  fputchar    (int);
  159. int     _CDECL  getw        (FILE *);
  160. int     _CDECL  putw        (FILE *);
  161. FILE *  _CDECL  _fsopen     (const char *, const char *, int);
  162. int     _CDECL  _pclose     (FILE *);
  163. int     _CDECL  _popen      (const char *, const char *);
  164. int     _CDECL  fcloseall   (void);
  165. int     _CDECL  flushall    (void);
  166. int     _CDECL  rmtmp       (void);
  167. char *  _CDECL  tempnam     (char *, char *);
  168. #endif
  169.  
  170. extern  FILE * _CDECL _Files[];
  171.  
  172. };
  173.  
  174. #define _IOFSLOTFREE    0x0001      /* FILE object is available     */
  175. #define _IOFMYBUF       0x0010      /* Has an internal buffer       */
  176. #define _IOFHEAPBUF     0x0020      /* Buffer was made by malloc()  */
  177. #define _IOFHEAPFILE    0x0040      /* FILE was made by malloc()    */
  178. #define _IOFEOF         0x0100      /* End-Of-File                  */
  179. #define _IOFERR         0x0200      /* Error-on-File                */
  180. #define _IOFLBUF        0x0400      /* Line buffering               */
  181. #define _IOFNBUF        0x0800      /* No buffering                 */
  182. #define _IOFAPPEND      0x1000      /* Append each write            */
  183. #define _IOFBINARY      0x2000      /* Binary mode file             */
  184. #define _IOFREAD        0x4000      /* Read after last seek         */
  185. #define _IOFWRITTEN     0x8000      /* Write after last seek        */
  186.  
  187. // Do NOT rely on these being lvalues
  188. #define stdin   ((FILE *const)(_Files[0]))
  189. #define stdout  ((FILE *const)(_Files[1]))
  190. #define stderr  ((FILE *const)(_Files[2]))
  191.  
  192. #if _MSDOS_SOURCE > 0
  193. #define stdaux  ((FILE *const)(_Files[3]))
  194. #define stdprn  ((FILE *const)(_Files[4]))
  195. #endif
  196.  
  197. // Only getc() and putc() may have side effects
  198. #define feof(s)     ((s)->flags & _IOFEOF)
  199. #define ferror(s)   ((s)->flags & _IOFERR)
  200. #define getc(s)     ((s)->next < (s)->rdend ? (int)(*(s)->next++) : fgetc(s))
  201. #define putc(c,s)   ((s)->next < (s)->wrend ? (int)(*(s)->next++ = (unsigned char)(c)) : fputc((c),(s)))
  202. #define getchar()   fgetc(stdin)
  203. #define putchar(c)  fputc((c),stdout)
  204.  
  205. #define fgetpos(f,p)    (int)(f->_fgetpos(p))
  206. #define ftell(f)        f->_fgetpos(NULL)
  207. #define fsetpos(f,p)    f->_fsetpos(p,0L,SEEK_SET)
  208. #define fseek(f,o,w)    f->_fsetpos(NULL,o,w)
  209.  
  210. #if _POSIX1_SOURCE > 0
  211. #define fileno(fh)  ((int)(fh)->fd)
  212. #endif
  213.  
  214. #define __STDIO_H_INCLUDED
  215. #endif
  216.