Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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