1219b2ee8SDavid du Colombier #pragma src "/sys/src/libbio" 23e12c5d1SDavid du Colombier #pragma lib "libbio.a" 33e12c5d1SDavid du Colombier 43e12c5d1SDavid du Colombier typedef struct Biobuf Biobuf; 53e12c5d1SDavid du Colombier typedef struct Biobufhdr Biobufhdr; 63e12c5d1SDavid du Colombier 73e12c5d1SDavid du Colombier enum 83e12c5d1SDavid du Colombier { 93e12c5d1SDavid du Colombier Bsize = 8*1024, 10*e94a8e9bSDavid du Colombier Bungetsize = UTFmax+1, /* space for ungetc */ 113e12c5d1SDavid du Colombier Bmagic = 0x314159, 123e12c5d1SDavid du Colombier Beof = -1, 133e12c5d1SDavid du Colombier Bbad = -2, 143e12c5d1SDavid du Colombier 153e12c5d1SDavid du Colombier Binactive = 0, /* states */ 163e12c5d1SDavid du Colombier Bractive, 173e12c5d1SDavid du Colombier Bwactive, 183e12c5d1SDavid du Colombier Bracteof, 193e12c5d1SDavid du Colombier }; 203e12c5d1SDavid du Colombier 213e12c5d1SDavid du Colombier struct Biobufhdr 223e12c5d1SDavid du Colombier { 233e12c5d1SDavid du Colombier int icount; /* neg num of bytes at eob */ 243e12c5d1SDavid du Colombier int ocount; /* num of bytes at bob */ 253e12c5d1SDavid du Colombier int rdline; /* num of bytes after rdline */ 263e12c5d1SDavid du Colombier int runesize; /* num of bytes of last getrune */ 273e12c5d1SDavid du Colombier int state; /* r/w/inactive */ 283e12c5d1SDavid du Colombier int fid; /* open file */ 293e12c5d1SDavid du Colombier int flag; /* magic if malloc'ed */ 307dd7cddfSDavid du Colombier vlong offset; /* offset of buffer in file */ 313e12c5d1SDavid du Colombier int bsize; /* size of buffer */ 323e12c5d1SDavid du Colombier uchar* bbuf; /* pointer to beginning of buffer */ 333e12c5d1SDavid du Colombier uchar* ebuf; /* pointer to end of buffer */ 34219b2ee8SDavid du Colombier uchar* gbuf; /* pointer to good data in buf */ 353e12c5d1SDavid du Colombier }; 363e12c5d1SDavid du Colombier 373e12c5d1SDavid du Colombier struct Biobuf 383e12c5d1SDavid du Colombier { 393e12c5d1SDavid du Colombier Biobufhdr; 403e12c5d1SDavid du Colombier uchar b[Bungetsize+Bsize]; 413e12c5d1SDavid du Colombier }; 423e12c5d1SDavid du Colombier 437dd7cddfSDavid du Colombier /* Dregs, redefined as functions for backwards compatibility */ 447dd7cddfSDavid du Colombier #define BGETC(bp) Bgetc(bp) 457dd7cddfSDavid du Colombier #define BPUTC(bp,c) Bputc(bp,c) 467dd7cddfSDavid du Colombier #define BOFFSET(bp) Boffset(bp) 477dd7cddfSDavid du Colombier #define BLINELEN(bp) Blinelen(bp) 487dd7cddfSDavid du Colombier #define BFILDES(bp) Bfildes(bp) 493e12c5d1SDavid du Colombier 503e12c5d1SDavid du Colombier int Bbuffered(Biobufhdr*); 51219b2ee8SDavid du Colombier int Bfildes(Biobufhdr*); 523e12c5d1SDavid du Colombier int Bflush(Biobufhdr*); 533e12c5d1SDavid du Colombier int Bgetc(Biobufhdr*); 543e12c5d1SDavid du Colombier int Bgetd(Biobufhdr*, double*); 553e12c5d1SDavid du Colombier long Bgetrune(Biobufhdr*); 563e12c5d1SDavid du Colombier int Binit(Biobuf*, int, int); 573e12c5d1SDavid du Colombier int Binits(Biobufhdr*, int, int, uchar*, int); 583e12c5d1SDavid du Colombier int Blinelen(Biobufhdr*); 597dd7cddfSDavid du Colombier vlong Boffset(Biobufhdr*); 603e12c5d1SDavid du Colombier Biobuf* Bopen(char*, int); 613e12c5d1SDavid du Colombier int Bprint(Biobufhdr*, char*, ...); 629a747e4fSDavid du Colombier int Bvprint(Biobufhdr*, char*, va_list); 633e12c5d1SDavid du Colombier int Bputc(Biobufhdr*, int); 643e12c5d1SDavid du Colombier int Bputrune(Biobufhdr*, long); 653e12c5d1SDavid du Colombier void* Brdline(Biobufhdr*, int); 669a747e4fSDavid du Colombier char* Brdstr(Biobufhdr*, int, int); 673e12c5d1SDavid du Colombier long Bread(Biobufhdr*, void*, long); 687dd7cddfSDavid du Colombier vlong Bseek(Biobufhdr*, vlong, int); 69219b2ee8SDavid du Colombier int Bterm(Biobufhdr*); 703e12c5d1SDavid du Colombier int Bungetc(Biobufhdr*); 713e12c5d1SDavid du Colombier int Bungetrune(Biobufhdr*); 723e12c5d1SDavid du Colombier long Bwrite(Biobufhdr*, void*, long); 737dd7cddfSDavid du Colombier 747dd7cddfSDavid du Colombier #pragma varargck argpos Bprint 2 75