#line 1 "stdio/freopen.c"

#line 4 "stdio/freopen.c"
#line 1 "stdio/iolib.h"

#line 17 "stdio/iolib.h"
#line 1 "/sys/include/ape/stdio.h"


#pragma lib "/$M/lib/ape/libap.a"


#line 8 "/sys/include/ape/stdio.h"
#line 1 "/mips/include/ape/stdarg.h"



typedef char *va_list;




#line 10 "/mips/include/ape/stdarg.h"


#line 9 "/sys/include/ape/stdio.h"
#line 1 "/sys/include/ape/stddef.h"








typedef long ptrdiff_t;


typedef unsigned long size_t;



typedef unsigned short wchar_t;



#line 10 "/sys/include/ape/stdio.h"

#line 30 "/sys/include/ape/stdio.h"
typedef struct{
	int fd;
	char flags;
	char state;
	char *buf;
	char *rp;
	char *wp;
	char *lp;
	size_t bufl;
	char unbuf[1];
}FILE;
typedef long fpos_t;




#line 48 "/sys/include/ape/stdio.h"























extern int remove(const char *);
extern int rename(const char *, const char *);
extern FILE *tmpfile(void);
extern char *tmpnam(char *);
extern int fclose(FILE *);
extern int fflush(FILE *);
extern FILE *fopen(const char *, const char *);
extern FILE *freopen(const char *, const char *, FILE *);
extern void setbuf(FILE *, char *);
extern int setvbuf(FILE *, char *, int, size_t);
extern int fprintf(FILE *, const char *, ...);
extern int fscanf(FILE *, const char *, ...);
extern int printf(const char *, ...);
extern int scanf(const char *, ...);
extern int sprintf(char *, const char *, ...);
extern int sscanf(const char *, const char *, ...);
extern int vfprintf(FILE *, const char *, va_list);
extern int vprintf(const char *, va_list);
extern int vsprintf(char *, const char *, va_list);
extern int vfscanf(FILE *, const char *, va_list);
extern int fgetc(FILE *);
extern char *fgets(char *, int, FILE *);
extern int fputc(int, FILE *);
extern int fputs(const char *, FILE *);
extern int getc(FILE *);

extern int _IO_getc(FILE *f);
extern int getchar(void);

extern char *gets(char *);
extern int putc(int, FILE *);

extern int _IO_putc(int, FILE *);
extern int putchar(int);

extern int puts(const char *);
extern int ungetc(int, FILE *);
extern size_t fread(void *, size_t, size_t, FILE *);
extern size_t fwrite(const void *, size_t, size_t, FILE *);
extern int fgetpos(FILE *, fpos_t *);
extern int fseek(FILE *, long int, int);
extern int fsetpos(FILE *, const fpos_t *);
extern long int ftell(FILE *);
extern void rewind(FILE *);
extern void clearerr(FILE *);
extern int feof(FILE *);
extern int ferror(FILE *);
extern void perror(const char *);
extern FILE _IO_stream[90];
extern FILE *sopenr(const char *);
extern FILE *sopenw(void);
extern char *sclose(FILE *);
extern char *rdline(FILE *, char **);


extern int fileno(FILE *);
extern FILE* fdopen(int, const char*);
extern char *ctermid(char *);







#line 18 "stdio/iolib.h"
#line 1 "/sys/include/ape/stdlib.h"


#pragma lib "/$M/lib/ape/libap.a"

#line 1 "/sys/include/ape/stddef.h"



















#line 6 "/sys/include/ape/stdlib.h"






typedef struct { int quot, rem; } div_t;
typedef struct { long quot, rem; } ldiv_t;





extern double atof(const char *nptr);
extern int atoi(const char *nptr);
extern long int atol(const char *nptr);
extern double strtod(const char *nptr, char **endptr);
extern long int strtol(const char *nptr, char **endptr, int base);
extern unsigned long int strtoul(const char *nptr, char **endptr, int base);
extern int rand(void);
extern void srand(unsigned int seed);
extern void *calloc(size_t nmemb, size_t size);
extern void free(void *ptr);
extern void *malloc(size_t size);
extern void *realloc(void *ptr, size_t size);
extern void abort(void);
extern int atexit(void (*func)(void));
extern void exit(int status);
extern char *getenv(const char *name);
extern int system(const char *string);
extern void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
extern void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
extern int abs(int j);
extern div_t div(int numer, int denom);
extern long int labs(long int j);
extern ldiv_t ldiv(long int numer, long int denom);
extern int mblen(const char *, size_t);
extern int mbtowc(wchar_t *, const char *, size_t);
extern int wctomb(char *, wchar_t);
extern size_t mbstowcs(wchar_t *, const char *, size_t);
extern size_t wcstombs(char *, const wchar_t *, size_t);






#line 19 "stdio/iolib.h"
#line 1 "/sys/include/ape/sys/types.h"



typedef	unsigned short	ino_t;
typedef	unsigned short	dev_t;
typedef	long		off_t;
typedef unsigned short	mode_t;
typedef short		uid_t;
typedef short		gid_t;
typedef short		nlink_t;
typedef int		pid_t;







typedef long ssize_t;




typedef long time_t;



#line 20 "stdio/iolib.h"
#line 1 "/sys/include/ape/unistd.h"





#pragma lib "/$M/lib/ape/libap.a"

































































extern int execl(const char *, const char *, ...);
extern int execv(const char *, const char **);
extern int execle(const char *, const char *, const char *,  ...);
extern int execve(const char *, const char **, const char **);
extern int execlp(const char *, const char *, ...);
extern int execvp(const char *, const char **);
extern void _exit(int);
extern unsigned int alarm(unsigned int);
extern int pause(void);
extern unsigned int sleep(unsigned int);

extern pid_t fork(void);



extern char *getlogin(void);
extern char *cuserid(char *);
extern char *ttyname(int);
extern int isatty(int);
extern long sysconf(int);

extern pid_t getpid(void);
extern pid_t getppid(void);
extern uid_t getuid(void);
extern uid_t geteuid(void);
extern gid_t getgid(void);
extern gid_t getegid(void);
extern int setuid(uid_t);
extern int setgid(gid_t);
extern int getgroups(int, gid_t *);
extern pid_t getpgrp(void);
extern int setpgid(pid_t, pid_t);
extern pid_t setsid(void);



extern int chdir(const char *);
extern int link(const char *, const char *);
extern char *getcwd(char *, size_t);
extern int unlink(const char *);
extern int rmdir(const char *);
extern int rename(const char *, const char *);
extern int access(const char *, int);
extern long pathconf(const char *, int);
extern long fpathconf(int, int);

extern int chown(const char *, uid_t, gid_t);



extern int pipe(int *);
extern int dup(int);
extern int dup2(int, int);
extern int close(int);
extern ssize_t read(int, void *, size_t);
extern ssize_t write(int, void *, size_t);

extern off_t lseek(int, off_t, int);




extern pid_t tcgetpgrp(int);
extern int tcsetpgrp(int, pid_t);








#line 21 "stdio/iolib.h"
#line 1 "/sys/include/ape/fcntl.h"





#pragma lib "/$M/lib/ape/libap.a"























struct flock {
	short	l_type;
	short	l_whence;
	off_t	l_start;
	off_t	l_len;
	pid_t	l_pid;
};









extern int fcntl(int, int, ...);
extern int open(const char *, int, ...);
extern int creat(const char *, mode_t);






#line 22 "stdio/iolib.h"


#line 26 "stdio/iolib.h"





#line 33 "stdio/iolib.h"







char *strerror(int errno);
int _IO_setvbuf(FILE *);
#line 5 "stdio/freopen.c"

#line 15 "stdio/freopen.c"
FILE *freopen(const char *nm, const char *mode, FILE *f){
	if(f->state!= 0) fclose(f);
	if(mode[1]=='+' || mode[2]=='+'){
		if(mode[0]=='w') close(creat(nm, 0666));
		f->fd=open(nm,2);
		if(f->fd==-1){
			close(creat(nm, 0666));
			f->fd=open(nm,2);
		}
		if(mode[0]=='a') lseek(f->fd, 0L, 2);
	}
	else{
		switch(mode[0]){
		default: return 0;
		case 'r':
			f->fd=open(nm,0);
			break;
		case 'w':
			f->fd=creat(nm, 0666);
			break;
		case 'a':
			f->fd=open(nm,1);
			if(f->fd==-1)
				f->fd=creat(nm, 0666);
			lseek(f->fd, 0L, 2);
			break;
		}
	}
	if(f->fd==-1) return 0;
	f->flags=(mode[0]=='a')? 8 : 0;
	f->state= 1;
	f->buf=0;
	f->rp=0;
	f->wp=0;
	f->lp=0;
	return f;
}
