xref: /inferno-os/include/bio.h (revision e45fa0eb0763b57d6fb0649c064bc3b95ccdea6c)
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