85 lines
2.3 KiB
C
85 lines
2.3 KiB
C
|
/*
|
||
|
* This file is part of the UCB release of Plan 9. It is subject to the license
|
||
|
* terms in the LICENSE file found in the top-level directory of this
|
||
|
* distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
|
||
|
* part of the UCB release of Plan 9, including this file, may be copied,
|
||
|
* modified, propagated, or distributed except according to the terms contained
|
||
|
* in the LICENSE file.
|
||
|
*/
|
||
|
|
||
|
#pragma src "/sys/src/lib/bio"
|
||
|
#pragma lib "libbio.a"
|
||
|
|
||
|
typedef struct Biobuf Biobuf;
|
||
|
typedef struct Biobufhdr Biobufhdr;
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
Bsize = 8*1024,
|
||
|
Bungetsize = UTFmax+1, /* space for ungetc */
|
||
|
Bmagic = 0x314159,
|
||
|
Beof = -1,
|
||
|
Bbad = -2,
|
||
|
|
||
|
Binactive = 0, /* states */
|
||
|
Bractive,
|
||
|
Bwactive,
|
||
|
Bracteof,
|
||
|
};
|
||
|
|
||
|
struct Biobufhdr
|
||
|
{
|
||
|
int icount; /* neg num of bytes at eob */
|
||
|
int ocount; /* num of bytes at bob */
|
||
|
int rdline; /* num of bytes after rdline */
|
||
|
int runesize; /* num of bytes of last getrune */
|
||
|
int state; /* r/w/inactive */
|
||
|
int fid; /* open file */
|
||
|
int flag; /* magic if malloc'ed */
|
||
|
int64_t offset; /* offset of buffer in file */
|
||
|
int bsize; /* size of buffer */
|
||
|
uint8_t* bbuf; /* pointer to beginning of buffer */
|
||
|
uint8_t* ebuf; /* pointer to end of buffer */
|
||
|
uint8_t* gbuf; /* pointer to good data in buf */
|
||
|
};
|
||
|
|
||
|
struct Biobuf
|
||
|
{
|
||
|
Biobufhdr;
|
||
|
uint8_t b[Bungetsize+Bsize];
|
||
|
};
|
||
|
|
||
|
/* Dregs, redefined as functions for backwards compatibility */
|
||
|
#define BGETC(bp) Bgetc(bp)
|
||
|
#define BPUTC(bp,c) Bputc(bp,c)
|
||
|
#define BOFFSET(bp) Boffset(bp)
|
||
|
#define BLINELEN(bp) Blinelen(bp)
|
||
|
#define BFILDES(bp) Bfildes(bp)
|
||
|
|
||
|
int Bbuffered(Biobufhdr*);
|
||
|
int Bfildes(Biobufhdr*);
|
||
|
int Bflush(Biobufhdr*);
|
||
|
int Bgetc(Biobufhdr*);
|
||
|
int Bgetd(Biobufhdr*, double*);
|
||
|
int32_t Bgetrune(Biobufhdr*);
|
||
|
int Binit(Biobuf*, int, int);
|
||
|
int Binits(Biobufhdr*, int, int, uint8_t*, int);
|
||
|
int Blinelen(Biobufhdr*);
|
||
|
int64_t Boffset(Biobufhdr*);
|
||
|
Biobuf* Bopen(char*, int);
|
||
|
Biobuf* Bfdopen(int, int);
|
||
|
int Bprint(Biobufhdr*, char*, ...);
|
||
|
int Bvprint(Biobufhdr*, char*, va_list);
|
||
|
int Bputc(Biobufhdr*, int);
|
||
|
int Bputrune(Biobufhdr*, int32_t);
|
||
|
void* Brdline(Biobufhdr*, int);
|
||
|
char* Brdstr(Biobufhdr*, int, int);
|
||
|
int32_t Bread(Biobufhdr*, void*, int32_t);
|
||
|
int64_t Bseek(Biobufhdr*, int64_t, int);
|
||
|
int Bterm(Biobufhdr*);
|
||
|
int Bungetc(Biobufhdr*);
|
||
|
int Bungetrune(Biobufhdr*);
|
||
|
int32_t Bwrite(Biobufhdr*, void*, int32_t);
|
||
|
|
||
|
#pragma varargck argpos Bprint 2
|