xref: /plan9/sys/include/bio.h (revision e94a8e9b44de11e62dfd4566245554f8bf8e0295)
1 #pragma	src	"/sys/src/libbio"
2 #pragma	lib	"libbio.a"
3 
4 typedef	struct	Biobuf	Biobuf;
5 typedef	struct	Biobufhdr	Biobufhdr;
6 
7 enum
8 {
9 	Bsize		= 8*1024,
10 	Bungetsize	= UTFmax+1,		/* space for ungetc */
11 	Bmagic		= 0x314159,
12 	Beof		= -1,
13 	Bbad		= -2,
14 
15 	Binactive	= 0,		/* states */
16 	Bractive,
17 	Bwactive,
18 	Bracteof,
19 };
20 
21 struct	Biobufhdr
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 };
36 
37 struct	Biobuf
38 {
39 	Biobufhdr;
40 	uchar	b[Bungetsize+Bsize];
41 };
42 
43 /* Dregs, redefined as functions for backwards compatibility */
44 #define	BGETC(bp)	Bgetc(bp)
45 #define	BPUTC(bp,c)	Bputc(bp,c)
46 #define	BOFFSET(bp)	Boffset(bp)
47 #define	BLINELEN(bp)	Blinelen(bp)
48 #define	BFILDES(bp)	Bfildes(bp)
49 
50 int	Bbuffered(Biobufhdr*);
51 int	Bfildes(Biobufhdr*);
52 int	Bflush(Biobufhdr*);
53 int	Bgetc(Biobufhdr*);
54 int	Bgetd(Biobufhdr*, double*);
55 long	Bgetrune(Biobufhdr*);
56 int	Binit(Biobuf*, int, int);
57 int	Binits(Biobufhdr*, int, int, uchar*, int);
58 int	Blinelen(Biobufhdr*);
59 vlong	Boffset(Biobufhdr*);
60 Biobuf*	Bopen(char*, int);
61 int	Bprint(Biobufhdr*, char*, ...);
62 int	Bvprint(Biobufhdr*, char*, va_list);
63 int	Bputc(Biobufhdr*, int);
64 int	Bputrune(Biobufhdr*, long);
65 void*	Brdline(Biobufhdr*, int);
66 char*	Brdstr(Biobufhdr*, int, int);
67 long	Bread(Biobufhdr*, void*, long);
68 vlong	Bseek(Biobufhdr*, vlong, int);
69 int	Bterm(Biobufhdr*);
70 int	Bungetc(Biobufhdr*);
71 int	Bungetrune(Biobufhdr*);
72 long	Bwrite(Biobufhdr*, void*, long);
73 
74 #pragma	varargck	argpos	Bprint	2
75