jehanne/sys/include/bio.h

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