Annotation of researchv10no/cmd/odist/pax/include/sfio.h, revision 1.1.1.1

1.1       root        1: #ifndef _SFIO_H                /* protect against multiple #includes */
                      2: #define _SFIO_H
                      3: 
                      4: #if __STDC__ || __cplusplus || c_plusplus
                      5: #define _SFA_(x)       x
                      6: #else
                      7: #define _SFA_(x)       ()
                      8: #endif
                      9: 
                     10: #ifndef NULL
                     11: #define NULL   0
                     12: #endif
                     13: #ifndef EOF
                     14: #define EOF    (-1)
                     15: #endif
                     16: #ifndef SEEK_SET
                     17: #define SEEK_SET       0
                     18: #define SEEK_CUR       1
                     19: #define SEEK_END       2
                     20: #endif
                     21: 
                     22: typedef struct _sfdc_  Sfdisc_t;
                     23: typedef struct _sfio_  Sfile_t, SFIO;
                     24: 
                     25: /* discipline structure */
                     26: struct _sfdc_
                     27: {
                     28:        int     (*readf) _SFA_((Sfile_t*, unsigned char*, int, char*));
                     29:        int     (*writef) _SFA_((Sfile_t*, const unsigned char*, int, char*));
                     30:        long    (*seekf) _SFA_((Sfile_t*, long, int, char*));
                     31:        int     (*exceptf) _SFA_((Sfile_t*, int, char*));
                     32:        char    *handle;        /* to store any state information       */
                     33: };
                     34: 
                     35: /* a file structure */
                     36: struct _sfio_
                     37: {
                     38:        unsigned char   *next;  /* next position to read/write from     */
                     39:        unsigned char   *endw;  /* end of write buffer                  */
                     40:        unsigned char   *endr;  /* end of read buffer                   */
                     41:        unsigned char   *endb;  /* end of buffer                        */
                     42:        struct _sfio_   *push;  /* the stream that was pushed on        */
                     43:        short           flags;  /* type of stream                       */
                     44:        short           file;   /* file descriptor                      */
                     45:        long            orig;   /* where we start in the file           */
                     46: #ifdef _SFIO_PRIVATE
                     47:        _SFIO_PRIVATE
                     48: #endif
                     49: };
                     50: 
                     51: /* bits for various types of files */
                     52: #define        SF_READ         000001  /* open for reading                     */
                     53: #define SF_WRITE       000002  /* open for writing                     */
                     54: #define SF_STRING      000004  /* a string stream                      */
                     55: #define SF_APPEND      000010  /* associated file is in append mode    */
                     56: #define SF_RELATIVE    000020  /* file pos is relative to starting pos */
                     57: #define SF_MALLOC      000040  /* buffered space malloc-ed             */
                     58: #define SF_LINE                000100  /* line buffering                       */
                     59: #define SF_KEEPFD      000200  /* keep file opened when closing stream */
                     60: #define SF_SHARE       000400  /* file stream that is shared           */
                     61: #define SF_REUSE       001000  /* keep stream space after closing      */
                     62: #define SF_FLAGS       000777  /* PUBLIC FLAGS PASSABLE TO SFNEW()     */
                     63: #define SF_SETS                001743  /* flags passable to sfset()            */
                     64: 
                     65: #define SF_EOF         002000  /* eof was detected                     */
                     66: #define SF_ERROR       004000  /* an error happened                    */
                     67: 
                     68: #define SF_BUFSIZE     8192    /* suggested default buffer size        */
                     69: #define SF_UNBOUND     (-1)    /* unbounded buffer size                */
                     70: 
                     71: #define        sfstdin         (&_Sfstdin)     /* standard input stream        */
                     72: #define        sfstdout        (&_Sfstdout)    /* standard output stream       */
                     73: #define        sfstderr        (&_Sfstderr)    /* standard error stream        */
                     74: 
                     75: #if __cplusplus
                     76: extern "C"
                     77: {
                     78: #endif
                     79: 
                     80: extern int             _Sfi;
                     81: extern Sfile_t         _Sfstdin, _Sfstdout, _Sfstderr;
                     82: 
                     83: extern Sfile_t         *sfnew _SFA_((Sfile_t*, unsigned char*, int, int, int));
                     84: extern Sfile_t         *sfopen _SFA_((Sfile_t*, const char*, const char*));
                     85: extern Sfile_t         *sfdopen _SFA_((int, const char*));
                     86: extern Sfile_t         *sfpopen _SFA_((const char*, const char*, Sfile_t**));
                     87: extern Sfile_t         *sfstack _SFA_((Sfile_t*, Sfile_t*));
                     88: extern Sfile_t         *_sftmpfile _SFA_((int));
                     89: extern int             _sfflsbuf _SFA_((Sfile_t*, int));
                     90: extern int             _sffilbuf _SFA_((Sfile_t*, int));
                     91: extern int             _sfsync _SFA_((Sfile_t*));
                     92: extern int             _sfpeek _SFA_((Sfile_t*, unsigned char**));
                     93: extern int             sfclrlock _SFA_((Sfile_t*));
                     94: extern unsigned char*  sfsetbuf _SFA_((Sfile_t*, unsigned char*, int));
                     95: extern Sfdisc_t*       sfsetdisc _SFA_((Sfile_t*,Sfdisc_t*));
                     96: extern int             sfnotice _SFA_((void(*)(Sfile_t*, int)));
                     97: extern int             sfset _SFA_((Sfile_t*, int, int));
                     98: extern int             sfpool _SFA_((Sfile_t*, Sfile_t*, int));
                     99: extern int             sfread _SFA_((Sfile_t*, unsigned char*, int));
                    100: extern int             sfwrite _SFA_((Sfile_t*, const unsigned char*, int));
                    101: extern int             sfmove _SFA_((Sfile_t*, Sfile_t*, long, const char*));
                    102: extern int             sfclose _SFA_((Sfile_t*));
                    103: extern long            sftell _SFA_((Sfile_t*));
                    104: extern long            sfseek _SFA_((Sfile_t*, long, int));
                    105: extern int             sfllen _SFA_((long));
                    106: extern int             sfdlen _SFA_((double));
                    107: extern int             sfputs _SFA_((Sfile_t*, const char*, int));
                    108: extern char            *sfgets _SFA_((Sfile_t*, char*, int));
                    109: extern int             sfnputc _SFA_((Sfile_t*, unsigned char, int));
                    110: extern int             _sfputu _SFA_((Sfile_t*, unsigned long));
                    111: extern int             _sfputl _SFA_((Sfile_t*, long));
                    112: extern long            _sfgetl _SFA_((Sfile_t*));
                    113: extern unsigned long   _sfgetu _SFA_((Sfile_t*));
                    114: extern long            _sfgetl _SFA_((Sfile_t*));
                    115: extern int             _sfputd _SFA_((Sfile_t*, double));
                    116: extern double          sfgetd _SFA_((Sfile_t*));
                    117: extern int             sfungetc _SFA_((Sfile_t*, int));
                    118: extern char            *_sfcvt _SFA_((double, int, int*, int*, int));
                    119: extern int             sfprintf _SFA_((Sfile_t*, const char*, ...));
                    120: extern int             sfsprintf _SFA_((char*, int, const char*, ...));
                    121: extern int             sfscanf _SFA_((Sfile_t*, const char*, ...));
                    122: extern int             sfsscanf _SFA_((const char*, const char*, ...));
                    123: 
                    124: #if __STDC__ || __cplusplus
                    125: #include       <stdarg.h>
                    126: #endif
                    127: extern int             sfvprintf _SFA_((Sfile_t*, const char*, va_list));
                    128: extern int             sfvscanf _SFA_((Sfile_t*, const char*, va_list));
                    129: 
                    130: /* function analogues of fast in-line functions */
                    131: extern int             sfgetc _SFA_((Sfile_t*));
                    132: extern long            sfgetl _SFA_((Sfile_t*));
                    133: extern unsigned long   sfgetu _SFA_((Sfile_t*));
                    134: extern int             sfputc _SFA_((Sfile_t*,int));
                    135: extern int             sfputd _SFA_((Sfile_t*,double));
                    136: extern int             sfputl _SFA_((Sfile_t*,long));
                    137: extern int             sfputu _SFA_((Sfile_t*,unsigned long));
                    138: extern int             sfpeek _SFA_((Sfile_t*, unsigned char**));
                    139: extern int             sfsync _SFA_((Sfile_t*));
                    140: extern Sfile_t*                sfpushed _SFA_((Sfile_t*));
                    141: extern Sfile_t*                sftmp _SFA_((int));
                    142: extern int             sfslen _SFA_((void));
                    143: extern int             sfulen _SFA_((unsigned long));
                    144: extern long            sforigin _SFA_((Sfile_t*));
                    145: extern int             sfclearerr _SFA_((Sfile_t*));
                    146: extern int             sfeof _SFA_((Sfile_t*));
                    147: extern int             sferror _SFA_((Sfile_t*));
                    148: extern int             sffileno _SFA_((Sfile_t*));
                    149: extern char*           sfecvt _SFA_((double,int,int*,int*));
                    150: extern char*           sffcvt _SFA_((double,int,int*,int*));
                    151: 
                    152: #if __cplusplus
                    153: }
                    154: #endif
                    155: 
                    156: /* fast in-line functions */
                    157: #define sfputc(f,c)    ((f)->next >= (f)->endw ? \
                    158:                                _sfflsbuf(f,(int)((unsigned char)(c))) : \
                    159:                                (int)(*(f)->next++ = (unsigned char)(c)))
                    160: #define sfgetc(f)      ((f)->next >= (f)->endr ? _sffilbuf(f,1) : (int)(*(f)->next++))
                    161: #define sfslen()       (_Sfi)
                    162: #define sffileno(f)    ((f)->file)
                    163: #define sforigin(f)    (((f)->flags&SF_STRING) ? 0L : (f)->orig)
                    164: #define sfeof(f)       (((f)->flags&(SF_EOF|SF_STRING)) && (f)->next >= (f)->endb)
                    165: #define sferror(f)     ((f)->flags&SF_ERROR)
                    166: #define sfclearerr(f)  ((f)->flags &= ~(SF_ERROR|SF_EOF))
                    167: #define sfpushed(f)    ((f)->push)
                    168: #define sftmp(n)       ((n) >= 0 ? _sftmpfile(n) : \
                    169:                                    sfnew((Sfile_t*)0,(unsigned char*)0,-1,-1, \
                    170:                                        SF_READ|SF_WRITE|SF_STRING))
                    171: 
                    172: #define sfpeek(f,bufp) (((bufp) || \
                    173:                          ((f)->flags&(SF_READ|SF_WRITE|SF_STRING)) == \
                    174:                           (SF_READ|SF_WRITE|SF_STRING)) ? _sfpeek(f,bufp) : \
                    175:                                ((f)->endb - (f)->next))
                    176: #define sfsync(f)      (((f) && (((Sfile_t*)(f))->flags&SF_STRING)) ? 0 : _sfsync(f))
                    177: 
                    178: /* coding long integers in a portable and compact fashion */
                    179: #define SF_SBITS       6
                    180: #define SF_UBITS       7
                    181: #define SF_SIGN                (1 << SF_SBITS)
                    182: #define SF_MORE                (1 << SF_UBITS)
                    183: #define SF_U1          SF_MORE
                    184: #define SF_U2          (SF_U1*SF_U1)
                    185: #define SF_U3          (SF_U2*SF_U1)
                    186: #define SF_U4          (SF_U3*SF_U1)
                    187: #define sfulen(v)      ((v) < SF_U1 ? 1 : (v) < SF_U2 ? 2 : \
                    188:                         (v) < SF_U3 ? 3 : (v) < SF_U4 ? 4 : 5)
                    189: #define sfgetu(f)      ((_Sfi = sfgetc(f)) < 0 ? -1 : \
                    190:                                ((_Sfi&SF_MORE) ? _sfgetu(f) : (unsigned long)_Sfi))
                    191: #define sfgetl(f)      ((_Sfi = sfgetc(f)) < 0 ? -1 : \
                    192:                                ((_Sfi&(SF_MORE|SF_SIGN)) ? _sfgetl(f) : (long)_Sfi))
                    193: #define sfputu(f,v)    _sfputu((f),(unsigned long)(v))
                    194: #define sfputl(f,v)    _sfputl((f),(long)(v))
                    195: #define sfputd(f,v)    _sfputd((f),(double)(v))
                    196: 
                    197: #define sfecvt(v,n,d,s)        _sfcvt((v),(n),(d),(s),1)
                    198: #define sffcvt(v,n,d,s)        _sfcvt((v),(n),(d),(s),0)
                    199: 
                    200: #endif /* _SFIO_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.