/*
 *
 *    STDIO.H       Standard i/o include file
 *
 * 1993.
 * Modified by Jason Petty. 
 * Changes marked with VANSOFT. 
 */

#ifndef STDIO_H
#define STDIO_H

#ifndef STDDEF_H
#include <clib/stddef.h>
#endif

#ifndef STDLIB_H            /* VANSOFT. */
#include <clib/stdlib.h>    /* Prototypes of misc.lib functions. */
#endif

/*
 * CONSTANTS:
 */

#define _NFILE  (20)   /* maximum number of open streams    */
#define OPEN_MAX _NFILE   /* ANSI equivalent (replaces _NFILE) */
#define FILENAME_MAX (128)   /* maximum filename size             */
#define BUFSIZ  (1024)   /* default buffer size               */
#define EOF  (-1)   /* end-of-file indicator             */
#define EOS  '\0'   /* end-of-string indicator           */

#define RAND_MAX (0x7FFF)  /* maximum value from rand()         */

#ifndef ERROR
#define ERROR  (-1)   /* general error condition */
#endif

/* lseek() origins */
#define SEEK_SET 0   /* from beginning of file */
#define SEEK_CUR 1   /* from current location  */
#define SEEK_END 2   /* from end of file       */

/* cfg_ch() control flags */
#define _CIOB  0x01   /* use bios rather than gemdos */
#define _CIOCH  0x02   /* return only 8-bit values    */
#define _CIOVT  0x04   /* process vt52 escape codes   */

/* FILE structure flags */
#define _IOREAD  0x0001   /* file may be read from       */
#define _IOWRT  0x0002   /* file may be written to      */
#define _IOBIN  0x0004   /* file is in "binary" mode    */
#define _IODEV  0x0008   /* file is a character device  */
#define _IORW  0x0080   /* last i/o was 0:read/1:write */
#define _IOFBF  0x0100   /* i/o is fully buffered       */
#define _IOLBF  0x0100   /* i/o is line buffered        */
#define _IONBF  0x0400   /* i/o is not buffered         */
#define _IOMYBUF 0x0800   /* standard buffer             */
#define _IOEOF  0x1000   /* EOF has been reached        */
#define _IOERR  0x4000   /* an error has occured        */

typedef struct     /* FILE structure          */
 {
 int  _cnt;   /* # of bytes in buffer    */
 unsigned char *_ptr;   /* current buffer pointer  */
 unsigned char *_base;   /* base of file buffer     */
 unsigned int _flag;   /* file status flags       */
 int  _file;   /* file handle             */
 int  _bsiz;   /* buffer size             */
 unsigned char _ch;   /* tiny buffer, for "unbuffered" i/o */
 } FILE;

#define L_tmpnam 128
#define TMP_MAX  1000

extern char *etext;
extern char *edata;
extern char *end;

extern void _exit();
extern FILE _iob[];

/* standard streams */
#define stdin (&_iob[0])
#define stdout (&_iob[1])
#define stderr (&_iob[2])

/* stream macros */
#define clearerr(fp) ((void) ((fp)->_flag &= ~(_IOERR|_IOEOF)))
#define feof(fp) ((fp)->_flag & _IOEOF)
#define ferror(fp) ((fp)->_flag & _IOERR)
#define fileno(fp) ((fp)->_file)

/* compatibility macros */
#define sync()   /* sync() not possible, no operation */

/* aliases */
#define getc   fgetc
#define ungetc   fungetc
#define putc   fputc
#define getchar()  fgetc(stdin)
#define ungetchar(c)  fungetc((c),stdin)
#define putchar(c)  fputc((c),stdout)
#define fexists   exists
#define exists(f)  access(f,0x00)
#define forkv(prog,args) forkve(prog,args,NULL)
#define forkvp(prog,args) forkvpe(prog,args,NULL)


/* Stdio library prototypes. VANSOFT. */

extern void closeall(), rewind(), setbuf(), setvbuf(), perror();

extern FILE *fdopen();
extern FILE *fopen();
extern FILE *freopen();
extern FILE *_fopen();

extern int access();
extern int creat();
extern int fclose();
extern int fflush();
extern int fgetc();
extern int fungetc();
extern int fputc();
extern int fputs();
extern int puts();
extern int fread();
extern int fgetpos();
extern int fsetpos();
extern int fwrite();
extern int fseek();
extern int getw();
extern int isatty();
extern int open();
extern int close();
extern int read();
extern int remove();
extern int unlink();
extern int rename();
extern int rmdir();
extern int write();

extern int sgetc();
extern int sungetc();
extern unsigned int sputc();

extern long fprintf();
extern long vfprintf();
extern long printf();
extern long vprintf();
extern long fscanf();
extern long scanf();
extern long getl();
extern long putl();
extern long lseek();
extern long tell();
extern long sscanf();
extern long fsize();

extern char *gets();
extern char *strerror();

#endif
