home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / SASC6574.LZX / include / stdio.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-04  |  6.1 KB  |  223 lines

  1. /* Copyright (c) 1992-1993 SAS Institute, Inc., Cary, NC USA */
  2. /* All Rights Reserved */
  3.  
  4.  
  5. #ifndef _STDIO_H
  6. #define _STDIO_H 1
  7.  
  8. #ifndef _COMMSIZE_H
  9. #include <sys/commsize.h>
  10. #endif
  11.  
  12. #ifndef _COMMLIST_H
  13. #include <sys/commlist.h>
  14. #endif
  15.  
  16. typedef unsigned long fpos_t;
  17.  
  18. #ifndef _COMMNULL_H
  19. #include <sys/commnull.h>
  20. #endif
  21.  
  22. /**
  23. *
  24. * Definitions associated with __iobuf._flag
  25. *
  26. **/
  27.  
  28. #define _IOFBF   0        /* fully buffered (for setvbuf) */
  29. #define _IOREAD  1        /* read flag */
  30. #define _IOWRT   2        /* write flag */
  31. #define _IONBF   4        /* non-buffered flag */
  32. #define _IOMYBUF 8        /* private buffer flag */
  33. #define _IOEOF   16        /* end-of-file flag */
  34. #define _IOERR   32        /* error flag */
  35. #define _IOLBF   64        /* line-buffered flag */
  36. #define _IORW    128        /* read-write (update) flag */
  37. #define _IOUNGET 0x1000         /* unget was used since last seek */
  38. #define _IORKEY  0x2000         /* raw console I/O flag */
  39. #define _IOAPP   0x4000        /* append flag */
  40. #define _IOXLAT  0x8000        /* translation flag */
  41.  
  42. #define BUFSIZ 512        /* standard buffer size */
  43. #define EOF (-1)        /* end-of-file code */
  44. #define FOPEN_MAX 20            /* maximum number of open files */
  45. #define FILENAME_MAX  64        /* maximum filename length */
  46. #define L_tmpnam 64             /* maximum tmpnam filename length */
  47.  
  48. #define SEEK_SET 0              /* Seek from beginning of file */
  49. #define SEEK_CUR 1              /* Seek from current file position */
  50. #define SEEK_END 2              /* Seek from end of file */
  51.  
  52. #define TMP_MAX 999             /* Guaranteed unique temp names */
  53.  
  54. struct __iobuf {
  55.     struct __iobuf *_next;
  56.     unsigned char *_ptr;    /* current buffer pointer */
  57.     int _rcnt;                /* current byte count for reading */
  58.     int _wcnt;                /* current byte count for writing */
  59.     unsigned char *_base;    /* base address of I/O buffer */
  60.     int _size;            /* size of buffer */
  61.     int _flag;                /* control flags */
  62.     int _file;                /* file descriptor */
  63.     unsigned char _cbuff;    /* single char buffer */
  64. };
  65.  
  66. typedef struct __iobuf FILE;
  67.  
  68. extern struct __iobuf __iob[];
  69.  
  70. #define stdin (&__iob[0])    /* standard input file pointer */
  71. #define stdout (&__iob[1])    /* standard output file pointer */
  72. #define stderr (&__iob[2])    /* standard error file pointer */
  73.  
  74.  
  75. /***
  76. *
  77. *     Prototypes for ANSI standard functions.
  78. *
  79. ***/
  80.  
  81.  
  82. extern int remove(const char *);
  83. extern int rename(const char *, const char *);
  84. extern FILE *tmpfile(void);
  85. extern char *tmpnam(char *s);
  86.  
  87. extern int fclose(FILE *);
  88. extern int fflush(FILE *);
  89. extern FILE *fopen(const char *, const char *);
  90. extern FILE *freopen(const char *, const char *, FILE *);
  91. extern void setbuf(FILE *, char *);
  92. extern int setvbuf(FILE *, char *, int, size_t);
  93.  
  94. extern int fprintf(FILE *, const char *, ...);
  95. extern int fscanf(FILE *, const char *, ...);
  96. extern int printf(const char *, ...);
  97. extern int __builtin_printf(const char *, ...);
  98. extern int scanf(const char *, ...);
  99. extern int sprintf(char *, const char *, ...);
  100. extern int sscanf(const char *, const char *, ...);
  101. extern int vfprintf(FILE *, const char *, va_list);
  102. extern int vprintf(const char *, va_list);
  103. extern int vsprintf(char *, const char *, va_list);
  104.  
  105. extern int fgetc(FILE *);
  106. extern char *fgets(char *, int, FILE *);
  107. extern int fputc(int, FILE *);
  108. extern int fputs(const char *, FILE *);
  109. extern int getc(FILE *);
  110. #define getc(p) \
  111.         (((p)->_flag & _IOREAD) ? \
  112.             (--(p)->_rcnt >= 0 && ! ((p)->_file & _IORKEY) ? \
  113.                 *(p)->_ptr++ \
  114.             : \
  115.                 fgetc(p)) \
  116.         : \
  117.             fgetc(p))
  118. extern int getchar(void);
  119. #define getchar() getc(stdin)
  120. extern char *gets(char *);
  121. extern int putc(int, FILE *);
  122.  
  123. #ifdef _USE_DIRTY_PUTC
  124. /* this putc macro evaluates the charater expression multiple time */
  125. /* which is a violation of the ANSI standard. */
  126. #define putc(c,p) \
  127.         (((p)->_flag & _IOWRT) ? \
  128.             (++(p)->_wcnt <= (p)->_size ? \
  129.                 ((((int) (*(p)->_ptr++ = ((unsigned char)(c)))) == '\n' && \
  130.                    ((p)->_flag & _IOLBF)) ? \
  131.                     fflush(p), ((unsigned char)(c)) \
  132.                 : \
  133.                     ((unsigned char)(c))) \
  134.             : \
  135.                 (--(p)->_wcnt,fputc(c,p))) \
  136.         : \
  137.              fputc(c,p))
  138. #endif
  139.  
  140.  
  141. extern int putchar(int);
  142. #define putchar(c) putc(c,stdout)
  143. extern int puts(const char *);
  144. extern int ungetc(int, FILE *);
  145.  
  146. extern size_t fread(void *, size_t, size_t, FILE *);
  147. extern size_t fwrite(const void *, size_t, size_t, FILE *);
  148. extern int fgetpos(FILE *, fpos_t *);
  149. extern int fseek(FILE *, long int, int);
  150. extern int fsetpos(FILE *, const fpos_t *);
  151. extern long int ftell(FILE *);
  152. extern void rewind(FILE *);
  153. #define rewind(p) fseek(p, 0L, 0)
  154.  
  155. extern void clearerr(FILE *);
  156. #define clearerr(p) ((p)->_flag &= ~(_IOERR | _IOEOF))
  157. extern int feof(FILE *);
  158. #define feof(p) (((p)->_flag & _IOEOF) != 0)
  159. extern int ferror(FILE *);
  160. #define ferror(p) (((p)->_flag & _IOERR) != 0)
  161. extern void perror(const char *);
  162.  
  163. #define printf __builtin_printf
  164.  
  165. #ifndef _STRICT_ANSI
  166.  
  167. /* defines for mode of access() */
  168. #define R_OK 4
  169. #define W_OK 2
  170. #define X_OK 1
  171. #define F_OK 0
  172.  
  173. /***
  174. *
  175. *     Prototypes for Non-ANSI functions.
  176. *
  177. ***/
  178.  
  179. extern int __io2errno(int);
  180. extern int fcloseall(void);
  181. extern FILE *fdopen(int, const char *);
  182. extern int fhopen(long, int);
  183. extern int fgetchar(void);
  184. extern int fileno(FILE *);
  185. extern int flushall(void);
  186. extern void fmode(FILE *, int);
  187. extern int _writes(const char *, ...);
  188. extern int _tinyprintf(char *, ...);
  189. extern int fputchar(int);
  190. extern void setnbf(FILE *);
  191. extern int __fillbuff(FILE *);
  192. extern int __flushbuff(int, FILE *);
  193. extern int __access(const char *, int);
  194. extern int access(const char *, int);
  195. extern int chdir(const char *);
  196. extern int chmod(const char *, int);
  197. extern char *getcwd(char *, int);
  198. extern int unlink(const char *);
  199. extern int poserr(const char *);
  200.  
  201. #define  clrerr  clearerr
  202. #define  access  __access
  203. #define  _filbf  __fillbuff
  204. #define  fileno(p) ((p)->_file)
  205. #define  _flsbf  __flushbuff
  206.  
  207.  
  208. /***
  209. *
  210. *     The following routines allow for raw console I/O.
  211. *
  212. ***/
  213.  
  214. int rawcon(int);
  215. int getch(void);
  216.  
  217. #endif /* _STRICT_ANSI */
  218.  
  219. extern unsigned long __fmask;
  220. extern int __fmode;
  221.  
  222. #endif
  223.