URI: 
       tbio.h - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tbio.h (2124B)
       ---
            1 #ifndef _BIO_H_
            2 #define _BIO_H_ 1
            3 #if defined(__cplusplus)
            4 extern "C" { 
            5 #endif
            6 
            7 #ifdef AUTOLIB
            8 AUTOLIB(bio)
            9 #endif
           10 
           11 #include <fcntl.h>        /* for O_RDONLY, O_WRONLY */
           12 
           13 typedef        struct        Biobuf        Biobuf;
           14 
           15 enum
           16 {
           17         Bsize                = 8*1024,
           18         Bungetsize        = 4,                /* space for ungetc */
           19         Bmagic                = 0x314159,
           20         Beof                = -1,
           21         Bbad                = -2,
           22 
           23         Binactive        = 0,                /* states */
           24         Bractive,
           25         Bwactive,
           26         Bracteof,
           27 
           28         Bend
           29 };
           30 
           31 struct        Biobuf
           32 {
           33         int        icount;                /* neg num of bytes at eob */
           34         int        ocount;                /* num of bytes at bob */
           35         int        rdline;                /* num of bytes after rdline */
           36         int        runesize;        /* num of bytes of last getrune */
           37         int        state;                /* r/w/inactive */
           38         int        fid;                /* open file */
           39         int        flag;                /* magic if malloc'ed */
           40         long long        offset;                /* offset of buffer in file */
           41         int        bsize;                /* size of buffer */
           42         unsigned char*        bbuf;                /* pointer to beginning of buffer */
           43         unsigned char*        ebuf;                /* pointer to end of buffer */
           44         unsigned char*        gbuf;                /* pointer to good data in buf */
           45         unsigned char        b[Bungetsize+Bsize];
           46 };
           47 
           48 #define        BGETC(bp)\
           49         ((bp)->icount?(bp)->bbuf[(bp)->bsize+(bp)->icount++]:Bgetc((bp)))
           50 #define        BPUTC(bp,c)\
           51         ((bp)->ocount?(bp)->bbuf[(bp)->bsize+(bp)->ocount++]=(c),0:Bputc((bp),(c)))
           52 #define        BOFFSET(bp)\
           53         (((bp)->state==Bractive)?\
           54                 (bp)->offset + (bp)->icount:\
           55         (((bp)->state==Bwactive)?\
           56                 (bp)->offset + ((bp)->bsize + (bp)->ocount):\
           57                 -1))
           58 #define        BLINELEN(bp)\
           59         (bp)->rdline
           60 #define        BFILDES(bp)\
           61         (bp)->fid
           62 
           63 int        Bbuffered(Biobuf*);
           64 Biobuf*        Bfdopen(int, int);
           65 int        Bfildes(Biobuf*);
           66 int        Bflush(Biobuf*);
           67 int        Bgetc(Biobuf*);
           68 int        Bgetd(Biobuf*, double*);
           69 long        Bgetrune(Biobuf*);
           70 int        Binit(Biobuf*, int, int);
           71 int        Binits(Biobuf*, int, int, unsigned char*, int);
           72 int        Blinelen(Biobuf*);
           73 long long        Boffset(Biobuf*);
           74 Biobuf*        Bopen(char*, int);
           75 int        Bprint(Biobuf*, char*, ...);
           76 int        Bputc(Biobuf*, int);
           77 int        Bputrune(Biobuf*, long);
           78 void*        Brdline(Biobuf*, int);
           79 char*        Brdstr(Biobuf*, int, int);
           80 long        Bread(Biobuf*, void*, long);
           81 long long        Bseek(Biobuf*, long long, int);
           82 int        Bterm(Biobuf*);
           83 int        Bungetc(Biobuf*);
           84 int        Bungetrune(Biobuf*);
           85 long        Bwrite(Biobuf*, void*, long);
           86 int        Bvprint(Biobuf*, char*, va_list);
           87 
           88 #if defined(__cplusplus)
           89 }
           90 #endif
           91 #endif