3 #if defined(__cplusplus)
9 #include <sys/types.h> /* for off_t */
10 #include <fcntl.h> /* for O_RDONLY, O_WRONLY */
12 typedef struct Biobuf Biobuf;
17 Bungetsize = 4, /* space for ungetc */
22 Binactive = 0, /* states */
32 int icount; /* neg num of bytes at eob */
33 int ocount; /* num of bytes at bob */
34 int rdline; /* num of bytes after rdline */
35 int runesize; /* num of bytes of last getrune */
36 int state; /* r/w/inactive */
37 int fid; /* open file */
38 int flag; /* magic if malloc'ed */
39 off_t offset; /* offset of buffer in file */
40 int bsize; /* size of buffer */
41 unsigned char* bbuf; /* pointer to beginning of buffer */
42 unsigned char* ebuf; /* pointer to end of buffer */
43 unsigned char* gbuf; /* pointer to good data in buf */
44 unsigned char b[Bungetsize+Bsize];
48 ((bp)->icount?(bp)->bbuf[(bp)->bsize+(bp)->icount++]:Bgetc((bp)))
50 ((bp)->ocount?(bp)->bbuf[(bp)->bsize+(bp)->ocount++]=(c),0:Bputc((bp),(c)))
52 (((bp)->state==Bractive)?\
53 (bp)->offset + (bp)->icount:\
54 (((bp)->state==Bwactive)?\
55 (bp)->offset + ((bp)->bsize + (bp)->ocount):\
62 int Bbuffered(Biobuf*);
63 Biobuf* Bfdopen(int, int);
67 int Bgetd(Biobuf*, double*);
68 long Bgetrune(Biobuf*);
69 int Binit(Biobuf*, int, int);
70 int Binits(Biobuf*, int, int, unsigned char*, int);
71 int Blinelen(Biobuf*);
72 off_t Boffset(Biobuf*);
73 Biobuf* Bopen(char*, int);
74 int Bprint(Biobuf*, char*, ...);
75 int Bputc(Biobuf*, int);
76 int Bputrune(Biobuf*, long);
77 void* Brdline(Biobuf*, int);
78 char* Brdstr(Biobuf*, int, int);
79 long Bread(Biobuf*, void*, long);
80 off_t Bseek(Biobuf*, off_t, int);
83 int Bungetrune(Biobuf*);
84 long Bwrite(Biobuf*, void*, long);
85 int Bvprint(Biobuf*, char*, va_list);
87 #if defined(__cplusplus)