39YP_FILE yp_iob[YP_MAX_FILES];
44 f->flags = f->cnt = 0;
46 f->ptr = f->base = (
char *) &f->buf;
57 for(i=0; i<YP_MAX_FILES; ++i) {
59 clear_iob(&yp_iob[i]);
63 yp_iob[0].flags = _YP_IO_FILE | _YP_IO_READ;
65 yp_iob[1].flags = _YP_IO_FILE | _YP_IO_WRITE;
67 yp_iob[2].flags = _YP_IO_FILE | _YP_IO_WRITE;
73 if (!(f->flags & _YP_IO_READ)||(f->flags & (_YP_IO_ERR|_YP_IO_EOF)))
75 if ((f->cnt = (f->read)(f->fd,f->base,f->buflen)) < 0) {
76 f->flags |= _YP_IO_ERR;
80 f->flags |= _YP_IO_EOF;
89YP_flushbuf(
int c,YP_FILE *f)
91 if(!(f->flags & _YP_IO_WRITE)||(f->flags & _YP_IO_ERR))
return -1;
94 int cnt = f->ptr-f->base;
95 int r = (f->write)(f->fd,f->base,cnt);
98 f->flags |= _YP_IO_ERR;
102 f->cnt = f->buflen-1;
110 if(!(f->flags & _YP_IO_WRITE)||(f->flags & _YP_IO_ERR))
return -1;
111 if (f->ptr==f->base)
return 0;
113 int cnt = f->ptr-f->base;
114 int r = (f->write)(f->fd,f->base,cnt);
117 f->flags |= _YP_IO_ERR;
121 f->cnt = f->buflen-1;
127YP_fputs(
char *s, YP_FILE *f)
131 if (putc(*s++,f)<0)
return -1;
140 return YP_fputs(s,YP_stdout);
145YP_fgets(
char *s,
int n, YP_FILE *f)
148 if (f->flags & _YP_IO_ERR)
return 0;
164 int ch = YP_getchar();
175YP_fopen(
char *path,
char *mode)
178 int i, fd, flags, ch1, ch2;
179 for(i=3; i<YP_MAX_FILES; ++i)
180 if (!yp_iob[i].flags) {
199 flags |= O_WRONLY | O_TRUNC | O_CREAT;
202 flags |= O_WRONLY | O_CREAT | O_APPEND;
207 if ((fd=open(path,flags,0644))<0)
return 0;
209 f->flags = _YP_IO_FILE | (ch1==
'r' ? _YP_IO_READ : _YP_IO_WRITE);
222 if (f != &yp_iob[f->check])
return -1;
223 if (f->flags & _YP_IO_WRITE) {
233#define MAXBSIZE 32768
236YP_printf(
char *format,...)
239 char *buf = (
char *) alloca(MAXBSIZE);
243 vsprintf(buf,format,ap);
253YP_fprintf(YP_FILE *f,
char *format,...)
256 char *buf = (
char *) alloca(MAXBSIZE);
260 vsprintf(buf,format,ap);
275YP_clearerr(YP_FILE *f)
277 f->flags &= ~ _YP_IO_ERR | _YP_IO_EOF;
284 return f->flags & _YP_IO_EOF ? 1 : 0;
288YP_setbuf(YP_FILE *f,
char *b)
294YP_fseek(YP_FILE *f,
int offset,
int whence)