/**
*
* This header file defines the information used by the standard I/O
* package.
*
**/
#define _BUFSIZ 512		/* standard buffer size */
#define BUFSIZ 512		/* standard buffer size */
#define _NFILE 20		/* maximum number of files */

struct _iobuf
{
struct _iobuf *_next;
unsigned char *_ptr;		/* current buffer pointer */
int _rcnt;			/* current byte count for reading */
int _wcnt;			/* current byte count for writing */
unsigned char *_base;		/* base address of I/O buffer */
int _size;			/* size of buffer */
int _flag;			/* control flags */
#ifdef MSDOS
unsigned char _file;		/* file number */
#else
int _file;			/* file descriptor */
#endif
unsigned char _cbuff;		/* single char buffer */
};

extern struct _iobuf _iob[_NFILE];

/**
*
* Definitions associated with _iobuf._flag
*
*/
#define _IOFBF 0		/* fully buffered (for setvbuf) */
#define _IOREAD 1		/* read flag */
#define _IOWRT 2		/* write flag */
#define _IONBF 4		/* non-buffered flag */
#define _IOMYBUF 8		/* private buffer flag */
#define _IOEOF 16		/* end-of-file flag */
#define _IOERR 32		/* error flag */
#define _IOLBF 64		/* line-buffered flag */
#define _IORW 128		/* read-write (update) flag */
#define _IOAPP 0x4000		/* append flag */
#define _IOXLAT 0x8000		/* translation flag */

#ifndef NULL
#if SPTR
#define NULL 0			/* null pointer value */
#else
#define NULL 0L
#endif
#endif
#define FILE struct _iobuf	/* shorthand */
#define EOF (-1)		/* end-of-file code */


#define stdin (&_iob[0])	/* standard input file pointer */
#define stdout (&_iob[1])	/* standard output file pointer */
#define stderr (&_iob[2])	/* standard error file pointer */
#ifdef MSDOS
#define stdaux (&_iob[3])	/* standard auxiliary file pointer */
#define stdprt (&_iob[4])	/* standard printer file pointer */
#endif

#define getc(p) (--(p)->_rcnt>=0? *(p)->_ptr++:_filbf(p))
#define getchar() getc(stdin)
#define putc(c,p) (--(p)->_wcnt>=0 \
	? ((int)(*(p)->_ptr++=(c))):_flsbf((unsigned char)(c),p))
#define putchar(c) putc(c,stdout)
#define feof(p) (((p)->_flag&_IOEOF)!=0)
#define ferror(p) (((p)->_flag&_IOERR)!=0)
#define fileno(p) (p)->_file
#define rewind(fp) fseek(fp,0L,0)
#define fflush(fp) _flsbf(-1,fp)
#define clearerr(fp) clrerr(fp)

#ifndef NARGS
extern void clrerr(FILE *);
extern int cprintf(char *, );
extern int cscanf(char *, );
extern int fclose(FILE *);
extern int fcloseall(void);
extern FILE *fdopen(int, char *);
extern int fgetc(FILE *);
extern int fgetchar(void);
extern char *fgets(char *, int, FILE *);
extern int flushall(void);
extern int fmode(FILE *, int);
extern FILE *fopen(char *, char *);
extern FILE *fopene(char *, char *, char *);
extern int fprintf(FILE *, char *, );
extern int fputc(int, FILE *);
extern int fputchar(int);
extern int fputs(char *, FILE *);
extern int fread(char *, int, int, FILE *);
extern FILE *freopen(char *, char *, FILE *);
extern int fscanf(FILE*, char *, );
extern int fseek(FILE *, long, int);
extern long ftell(FILE *);
extern int fwrite(char *, int, int, FILE *);
extern char *gets(char *);
extern int printf(char *, );
extern int puts(char *);
extern scanf(char *, );
extern int setbuf(FILE *, char *);
extern int setnbf(FILE *);
extern int setvbuf(FILE*, char *, int, int);
extern int sprintf(char *, char *, );
extern sscanf(char *, char *, );
extern int ungetc(int, FILE *);
extern int _filbf(FILE *);
extern int _flsbf(int, FILE *);

#else
extern void clrerr();
extern int cprintf();
extern int cscanf();
extern int fclose();
extern int fcloseall();
extern FILE *fdopen();
extern int fgetc();
extern int fgetchar();
extern char *fgets();
extern int flushall();
extern int fmode();
extern FILE *fopen();
extern FILE *fopene();
extern int fprintf();
extern int fputc();
extern int fputchar();
extern int fputs();
extern int fread();
extern FILE *freopen();
extern int fscanf();
extern int fseek();
extern long ftell();
extern int fwrite();
extern char *gets();
extern int printf();
extern int puts();
extern scanf();
extern int setbuf();
extern int setnbf();
extern int setvbuf();
extern int sprintf();
extern sscanf();
extern int ungetc();
extern int _filbf();
extern int _flsbf();
#endif

#ifndef NARGS
extern int access(char *, int);
extern int chdir(char *);
extern int chmod(char *, int);
extern char *getcwd(char *, int);
extern int mkdir(char *);
extern int perror(char *);
extern int rename(char *, char *);
extern int rmdir(char *);
extern char *tmpnam(char *);
#else
extern int access();
extern int chdir();
extern int chmod();
extern char *getcwd();
extern int mkdir();
extern int perror();
extern int rename();
extern int rmdir();
extern char *tmpnam();
#endif

#define abs(x) ((x)<0?-(x):(x))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<=(b)?(a):(b))

