#pragma src "/sys/src/alef/lib/libbio" #pragma lib "/$M/lib/alef/libbio.a" enum { Bsize = 4096, Bungetsize = 4, /* space for ungetc */ Bmagic = 0x314159, Beof = -1, Bbad = -2, Binactive = 0, /* states */ Bractive, Bwactive, }; adt Biobufhdr { QLock; int icount; /* neg num of bytes at eob */ int ocount; /* num of bytes at bob */ int nrdline; /* num of bytes after rdline */ int runesize; /* num of bytes of last getrune */ int state; /* r/w/inactive */ int fid; /* open file */ extern int flag; /* magic if malloc'ed */ int off; /* offset of buffer in file */ int bsize; /* size of buffer */ byte* bbuf; /* pointer to beginning of buffer */ byte* ebuf; /* pointer to end of buffer */ intern int iflush(*Biobufhdr); int buffered(*Biobufhdr); int term(*Biobufhdr); int fildes(*Biobufhdr); int flush(*Biobufhdr); int getc(*Biobufhdr); int getrune(*Biobufhdr); int inits(*Biobufhdr, int, int, byte*, int); int linelen(*Biobufhdr); int offset(*Biobufhdr); int print(*Biobufhdr, byte*, ...); int putc(*Biobufhdr, int); int putrune(*Biobufhdr, int); void* rdline(*Biobufhdr, int); int read(*Biobufhdr, void*, int); int seek(*Biobufhdr, int, int); int ungetc(*Biobufhdr); int ungetrune(*Biobufhdr); int write(*Biobufhdr, void*, int); }; adt Biobuf { Biobufhdr; extern byte b[Bungetsize+Bsize]; int init(*Biobuf, int, int); }; Biobuf* Bopen(byte*, int); void batexit(void);