1 #pragma src "/usr/inferno/libbio" 2 3 typedef struct Biobuf Biobuf; 4 5 enum 6 { 7 Bsize = 8*1024, 8 Bungetsize = UTFmax+1, /* space for ungetc */ 9 Bmagic = 0x314159, 10 Beof = -1, 11 Bbad = -2, 12 13 Binactive = 0, /* states */ 14 Bractive, 15 Bwactive, 16 Bracteof, 17 18 Bend 19 }; 20 21 struct Biobuf 22 { 23 int icount; /* neg num of bytes at eob */ 24 int ocount; /* num of bytes at bob */ 25 int rdline; /* num of bytes after rdline */ 26 int runesize; /* num of bytes of last getrune */ 27 int state; /* r/w/inactive */ 28 int fid; /* open file */ 29 int flag; /* magic if malloc'ed */ 30 vlong offset; /* offset of buffer in file */ 31 int bsize; /* size of buffer */ 32 uchar* bbuf; /* pointer to beginning of buffer */ 33 uchar* ebuf; /* pointer to end of buffer */ 34 uchar* gbuf; /* pointer to good data in buf */ 35 uchar b[Bungetsize+Bsize]; 36 }; 37 38 /* Dregs, redefined as functions for backwards compatibility */ 39 #define BGETC(bp) Bgetc(bp) 40 #define BPUTC(bp,c) Bputc(bp,c) 41 #define BOFFSET(bp) Boffset(bp) 42 #define BLINELEN(bp) Blinelen(bp) 43 #define BFILDES(bp) Bfildes(bp) 44 45 int Bbuffered(Biobuf*); 46 int Bfildes(Biobuf*); 47 int Bflush(Biobuf*); 48 int Bgetc(Biobuf*); 49 int Bgetd(Biobuf*, double*); 50 long Bgetrune(Biobuf*); 51 int Binit(Biobuf*, int, int); 52 int Binits(Biobuf*, int, int, uchar*, int); 53 int Blinelen(Biobuf*); 54 vlong Boffset(Biobuf*); 55 Biobuf* Bopen(char*, int); 56 int Bprint(Biobuf*, char*, ...); 57 int Bvprint(Biobuf*, char*, va_list); 58 int Bputc(Biobuf*, int); 59 int Bputrune(Biobuf*, long); 60 void* Brdline(Biobuf*, int); 61 char* Brdstr(Biobuf*, int, int); 62 long Bread(Biobuf*, void*, long); 63 vlong Bseek(Biobuf*, vlong, int); 64 int Bterm(Biobuf*); 65 int Bungetc(Biobuf*); 66 int Bungetrune(Biobuf*); 67 long Bwrite(Biobuf*, void*, long); 68 69 #pragma varargck argpos Bprint 2 70