/*
 * Copyright (c) 1980 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 *
 *	@(#)stdio.h	5.4 (Berkeley) 10/22/87
 */

#ifndef EOF

#define	BUFSIZ	1024

extern	struct	_iobuf {
	int	_cnt;
	char	*_ptr;		/* should be unsigned char */
	char	*_base;		/* ditto */
	int	_bufsiz;
	short	_flag;
	char	_file;		/* should be short */
} _iob[];

typedef struct _iobuf FILE;

typedef int fpos_t;

#define	_IOREAD		01
#define	_IOWRT		02
#define	_IONBF		04
#define	_IOMYBUF	010
#define	_IOEOF		020
#define	_IOERR		040
#define	_IOSTRG		0100
#define	_IOLBF		0200
#define	_IORW		0400
#define	_IOFBF		***01000***	/* not implemented */
#undef	NULL
#define	NULL	(void *)0
#define	EOF	(-1)

#define	FOPEN_MAX	20
#define	FILENAME_MAX	1024
#define	L_tmpnam	16
#define	TMP_MAX		64

#define	SEEK_SET	0
#define	SEEK_CUR	1
#define	SEEK_END	2

#define	stdin	(&_iob[0])
#define	stdout	(&_iob[1])
#define	stderr	(&_iob[2])

extern	int	getc(FILE *);
#define	getc(p)		(--(p)->_cnt>=0? (int)(*(unsigned char *)(p)->_ptr++):_filbuf(p))
extern	int	getchar(void);
#define	getchar()	getc(stdin)
extern	int	putc(int, FILE *);
extern	int	fputc(int, FILE *);
#define putc(x, p)	(--(p)->_cnt >= 0 ?\
	(int)(*(unsigned char *)(p)->_ptr++ = (x)) :\
	(((p)->_flag & _IOLBF) && -(p)->_cnt < (p)->_bufsiz ?\
		((*(p)->_ptr = (x)) != '\n' ?\
			(int)(*(unsigned char *)(p)->_ptr++) :\
			_flsbuf(*(unsigned char *)(p)->_ptr, p)) :\
		_flsbuf((unsigned char)(x), p)))
extern	int	putchar(int);
#define	putchar(x)	putc(x,stdout)

#define	feof(p)		(((p)->_flag&_IOEOF)!=0)
#define	ferror(p)	(((p)->_flag&_IOERR)!=0)
#define	fileno(p)	((p)->_file)
#define	clearerr(p)	((p)->_flag &= ~(_IOERR|_IOEOF))

extern	FILE	*fopen(const char *, const char *);
extern	FILE	*fdopen(int, const char *);
extern	FILE	*freopen(const char *, const char *, FILE *);
extern	FILE	*popen(const char *, const char *);
extern	int	pclose(FILE *);
extern	long	ftell(FILE *);
extern	int	fseek(FILE *, long, int);
extern	char	*fgets(char *, int, FILE *);
extern	char	*gets(char *);
extern	int	fclose(FILE *), fflush(FILE *);
extern	int	puts(const char *), fputs(const char *, FILE *);
extern	int	fprintf(FILE *, const char *, ...);
extern	int	sprintf(char *, const char *, ...);
extern	int	printf(const char *, ...);
extern	int	scanf(const char *, ...);
extern	int	sscanf(const char *, const char *, ...);
extern	int	fscanf(FILE *, const char *, ...);
extern	int	fgetc(FILE *);
extern	void	perror(const char *);
extern	int	fwrite(const char *, unsigned int, unsigned int, FILE *);
extern	int	fread(char *, unsigned int, unsigned int, FILE *);

extern	int	_filbuf(FILE *);
extern	int	_flsbuf(unsigned char, FILE *);

extern	int	rename(const char *, const char *);
extern	int	remove(const char *);
extern	FILE	*tmpfile(void);
extern	char	*tmpnam(char *);


#endif	/* EOF */
