#ifndef _SFIO_H
#define _SFIO_H 1
#define SFIO_VERSION 20010201L
#if _PACKAGE_ast
#include <ast_std.h>
#else
#include <ast_common.h>
#ifdef UNUSED
#ifndef __stdio_h__
#define __stdio_h__ 1
#endif
#ifndef _stdio_h_
#define _stdio_h_ 1
#endif
#ifndef _stdio_h
#define _stdio_h 1
#endif
#ifndef __h_stdio__
#define __h_stdio__ 1
#endif
#ifndef _h_stdio_
#define _h_stdio_ 1
#endif
#ifndef _h_stdio
#define _h_stdio 1
#endif
#ifndef __STDIO_H__
#define __STDIO_H__ 1
#endif
#ifndef _STDIO_H_
#define _STDIO_H_ 1
#endif
#ifndef _STDIO_H
#define _STDIO_H 1
#endif
#ifndef __H_STDIO__
#define __H_STDIO__ 1
#endif
#ifndef _H_STDIO_
#define _H_STDIO_ 1
#endif
#ifndef _H_STDIO
#define _H_STDIO 1
#endif
#ifndef _stdio_included
#define _stdio_included 1
#endif
#ifndef _included_stdio
#define _included_stdio 1
#endif
#ifndef _INCLUDED_STDIO
#define _INCLUDED_STDIO 1
#endif
#ifndef _STDIO_INCLUDED
#define _STDIO_INCLUDED 1
#endif
#ifndef _INC_STDIO
#define _INC_STDIO 1
#endif
#define _FILE_DEFINED 1
#define _FILEDEFED 1
#ifndef FILE
#define FILE struct _sfio_s
#endif
#endif
#endif
#define Sfoff_t _ast_intmax_t
#define Sflong_t _ast_intmax_t
#define Sfulong_t unsigned _ast_intmax_t
#define Sfdouble_t _ast_fltmax_t
typedef struct _sfio_s Sfio_t;
typedef struct _sfdisc_s Sfdisc_t;
typedef ssize_t (*Sfread_f)_ARG_((Sfio_t*, Void_t*, size_t, Sfdisc_t*));
typedef ssize_t (*Sfwrite_f)_ARG_((Sfio_t*, const Void_t*, size_t, Sfdisc_t*));
typedef Sfoff_t (*Sfseek_f)_ARG_((Sfio_t*, Sfoff_t, int, Sfdisc_t*));
typedef int (*Sfexcept_f)_ARG_((Sfio_t*, int, Void_t*, Sfdisc_t*));
struct _sfdisc_s
{ Sfread_f readf;
Sfwrite_f writef;
Sfseek_f seekf;
Sfexcept_f exceptf;
Sfdisc_t* disc;
};
struct _sfio_s
{ unsigned char* next;
unsigned char* endw;
unsigned char* endr;
unsigned char* endb;
Sfio_t* push;
unsigned short flags;
short file;
unsigned char* data;
ssize_t size;
ssize_t val;
#ifdef _SFIO_PRIVATE
_SFIO_PRIVATE
#endif
};
typedef struct _sffmt_s Sffmt_t;
typedef int (*Sffmtext_f)_ARG_((Sfio_t*, Void_t*, Sffmt_t*));
typedef int (*Sffmtevent_f)_ARG_((Sfio_t*, int, Void_t*, Sffmt_t*));
struct _sffmt_s
{ long version;
Sffmtext_f extf;
Sffmtevent_f eventf;
char* form;
va_list args;
int fmt;
ssize_t size;
int flags;
int width;
int precis;
int base;
char* t_str;
ssize_t n_str;
Void_t* noop;
};
#define sffmtversion(fe,type) \
(type ? ((fe)->version = SFIO_VERSION) : (fe)->version)
#define SFFMT_SSHORT 00000010
#define SFFMT_TFLAG 00000020
#define SFFMT_ZFLAG 00000040
#define SFFMT_LEFT 00000100
#define SFFMT_SIGN 00000200
#define SFFMT_BLANK 00000400
#define SFFMT_ZERO 00001000
#define SFFMT_ALTER 00002000
#define SFFMT_THOUSAND 00004000
#define SFFMT_SKIP 00010000
#define SFFMT_SHORT 00020000
#define SFFMT_LONG 00040000
#define SFFMT_LLONG 00100000
#define SFFMT_LDOUBLE 00200000
#define SFFMT_VALUE 00400000
#define SFFMT_ARGPOS 01000000
#define SFFMT_IFLAG 02000000
#define SFFMT_JFLAG 04000000
#define SFFMT_SET 07777770
#define SFMTX_LOCK 0
#define SFMTX_TRYLOCK 1
#define SFMTX_UNLOCK 2
#define SFMTX_CLRLOCK 3
#ifndef NULL
#define NULL 0
#endif
#ifndef EOF
#define EOF (-1)
#endif
#ifndef SEEK_SET
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
#endif
#define SF_READ 0000001
#define SF_WRITE 0000002
#define SF_STRING 0000004
#define SF_APPENDWR 0000010
#if !_mac_SF_APPEND
#define SF_APPEND SF_APPENDWR
#endif
#define SF_MALLOC 0000020
#define SF_LINE 0000040
#define SF_SHARE 0000100
#define SF_EOF 0000200
#define SF_ERROR 0000400
#define SF_STATIC 0001000
#define SF_IOCHECK 0002000
#define SF_PUBLIC 0004000
#define SF_MTSAFE 0010000
#define SF_WHOLE 0020000
#define SF_FLAGS 0077177
#define SF_SETS 0027163
#ifndef KPVDEL
#define SF_BUFCONST 0400000
#endif
#define SF_LOCKR 0000010
#define SF_LASTR 0000020
#define SF_SEEK 3
#define SF_CLOSING 4
#if !_mac_SF_CLOSE
#define SF_CLOSE SF_CLOSING
#endif
#define SF_DPUSH 5
#define SF_DPOP 6
#define SF_DPOLL 7
#define SF_DBUFFER 8
#define SF_SYNC 9
#define SF_PURGE 10
#define SF_FINAL 11
#define SF_READY 12
#define SF_LOCKED 13
#define SF_ATEXIT 14
#define SF_EVENT 100
#define SF_POPSTACK ((Sfio_t*)0)
#define SF_POPDISC ((Sfdisc_t*)0)
#define SF_NEW 0
#define SF_SETFD (-1)
#define SF_BUFSIZE 8192
#define SF_UNBOUND (-1)
_BEGIN_EXTERNS_
extern ssize_t _Sfi;
extern Sfio_t* sfstdin;
extern Sfio_t* sfstdout;
extern Sfio_t* sfstderr;
extern Sfio_t _Sfstdin;
extern Sfio_t _Sfstdout;
extern Sfio_t _Sfstderr;
#if _DLL && _DLL_INDIRECT_DATA
#define sfstdin ((Sfio_t*)_ast_dll->_ast_stdin)
#define sfstdout ((Sfio_t*)_ast_dll->_ast_stdout)
#define sfstderr ((Sfio_t*)_ast_dll->_ast_stderr)
#endif
#if _BLD_sfio && defined(__EXPORT__)
#define extern __EXPORT__
#endif
extern Sfio_t* sfnew _ARG_((Sfio_t*, Void_t*, size_t, int, int));
extern Sfio_t* sfopen _ARG_((Sfio_t*, const char*, const char*));
extern Sfio_t* sfpopen _ARG_((Sfio_t*, const char*, const char*));
extern Sfio_t* sfstack _ARG_((Sfio_t*, Sfio_t*));
extern Sfio_t* sfswap _ARG_((Sfio_t*, Sfio_t*));
extern Sfio_t* sftmp _ARG_((size_t));
extern int sfpurge _ARG_((Sfio_t*));
extern int sfpoll _ARG_((Sfio_t**, int, int));
extern Void_t* sfreserve _ARG_((Sfio_t*, ssize_t, int));
extern int sfsync _ARG_((Sfio_t*));
extern int sfclrlock _ARG_((Sfio_t*));
extern Void_t* sfsetbuf _ARG_((Sfio_t*, Void_t*, size_t));
extern Sfdisc_t* sfdisc _ARG_((Sfio_t*,Sfdisc_t*));
extern int sfraise _ARG_((Sfio_t*, int, Void_t*));
extern int sfnotify _ARG_((void(*)(Sfio_t*, int, int)));
extern int sfset _ARG_((Sfio_t*, int, int));
extern int sfsetfd _ARG_((Sfio_t*, int));
extern Sfio_t* sfpool _ARG_((Sfio_t*, Sfio_t*, int));
extern ssize_t sfread _ARG_((Sfio_t*, Void_t*, size_t));
extern ssize_t sfwrite _ARG_((Sfio_t*, const Void_t*, size_t));
extern Sfoff_t sfmove _ARG_((Sfio_t*, Sfio_t*, Sfoff_t, int));
extern int sfclose _ARG_((Sfio_t*));
extern Sfoff_t sftell _ARG_((Sfio_t*));
extern Sfoff_t sfseek _ARG_((Sfio_t*, Sfoff_t, int));
extern ssize_t sfputr _ARG_((Sfio_t*, const char*, int));
extern char* sfgetr _ARG_((Sfio_t*, int, int));
extern ssize_t sfnputc _ARG_((Sfio_t*, int, size_t));
extern int sfungetc _ARG_((Sfio_t*, int));
extern int sfprintf _ARG_((Sfio_t*, const char*, ...));
extern char* sfprints _ARG_((const char*, ...));
extern int sfsprintf _ARG_((char*, int, const char*, ...));
extern int sfvsprintf _ARG_((char*, int, const char*, va_list));
extern int sfvprintf _ARG_((Sfio_t*, const char*, va_list));
extern int sfscanf _ARG_((Sfio_t*, const char*, ...));
extern int sfsscanf _ARG_((const char*, const char*, ...));
extern int sfvsscanf _ARG_((const char*, const char*, va_list));
extern int sfvscanf _ARG_((Sfio_t*, const char*, va_list));
extern int sfresize _ARG_((Sfio_t*, Sfoff_t));
extern int sfmutex _ARG_((Sfio_t*, int));
extern ssize_t sfrd _ARG_((Sfio_t*, Void_t*, size_t, Sfdisc_t*));
extern ssize_t sfwr _ARG_((Sfio_t*, const Void_t*, size_t, Sfdisc_t*));
extern Sfoff_t sfsk _ARG_((Sfio_t*, Sfoff_t, int, Sfdisc_t*));
extern ssize_t sfpkrd _ARG_((int, Void_t*, size_t, int, long, int));
extern int sfdlen _ARG_((Sfdouble_t));
extern int sfllen _ARG_((Sflong_t));
extern int sfulen _ARG_((Sfulong_t));
extern int sfputd _ARG_((Sfio_t*, Sfdouble_t));
extern int sfputl _ARG_((Sfio_t*, Sflong_t));
extern int sfputu _ARG_((Sfio_t*, Sfulong_t));
extern int sfputm _ARG_((Sfio_t*, Sfulong_t, Sfulong_t));
extern int sfputc _ARG_((Sfio_t*, int));
extern Sfdouble_t sfgetd _ARG_((Sfio_t*));
extern Sflong_t sfgetl _ARG_((Sfio_t*));
extern Sfulong_t sfgetu _ARG_((Sfio_t*));
extern Sfulong_t sfgetm _ARG_((Sfio_t*, Sfulong_t));
extern int sfgetc _ARG_((Sfio_t*));
extern int _sfputd _ARG_((Sfio_t*, Sfdouble_t));
extern int _sfputl _ARG_((Sfio_t*, Sflong_t));
extern int _sfputu _ARG_((Sfio_t*, Sfulong_t));
extern int _sfputm _ARG_((Sfio_t*, Sfulong_t, Sfulong_t));
extern int _sfflsbuf _ARG_((Sfio_t*, int));
extern int _sffilbuf _ARG_((Sfio_t*, int));
extern int _sfdlen _ARG_((Sfdouble_t));
extern int _sfllen _ARG_((Sflong_t));
extern int _sfulen _ARG_((Sfulong_t));
extern Sfoff_t sfsize _ARG_((Sfio_t*));
extern int sfclrerr _ARG_((Sfio_t*));
extern int sfeof _ARG_((Sfio_t*));
extern int sferror _ARG_((Sfio_t*));
extern int sffileno _ARG_((Sfio_t*));
extern int sfstacked _ARG_((Sfio_t*));
extern ssize_t sfvalue _ARG_((Sfio_t*));
extern ssize_t sfslen _ARG_((void));
#undef extern
_END_EXTERNS_
#define SF_SBITS 6
#define SF_UBITS 7
#define SF_BBITS 8
#define SF_SIGN (1 << SF_SBITS)
#define SF_MORE (1 << SF_UBITS)
#define SF_BYTE (1 << SF_BBITS)
#define SF_U1 SF_MORE
#define SF_U2 (SF_U1*SF_U1)
#define SF_U3 (SF_U2*SF_U1)
#define SF_U4 (SF_U3*SF_U1)
#if __cplusplus
#define _SF_(f) (f)
#else
#define _SF_(f) ((Sfio_t*)(f))
#endif
#define __sf_putd(f,v) (_sfputd(_SF_(f),(Sfdouble_t)(v)))
#define __sf_putl(f,v) (_sfputl(_SF_(f),(Sflong_t)(v)))
#define __sf_putu(f,v) (_sfputu(_SF_(f),(Sfulong_t)(v)))
#define __sf_putm(f,v,m) (_sfputm(_SF_(f),(Sfulong_t)(v),(Sfulong_t)(m)))
#define __sf_putc(f,c) (_SF_(f)->next >= _SF_(f)->endw ? \
_sfflsbuf(_SF_(f),(int)((unsigned char)(c))) : \
(int)(*_SF_(f)->next++ = (unsigned char)(c)) )
#define __sf_getc(f) (_SF_(f)->next >= _SF_(f)->endr ? _sffilbuf(_SF_(f),0) : \
(int)(*_SF_(f)->next++) )
#define __sf_dlen(v) (_sfdlen((Sfdouble_t)(v)) )
#define __sf_llen(v) (_sfllen((Sflong_t)(v)) )
#define __sf_ulen(v) ((Sfulong_t)(v) < SF_U1 ? 1 : (Sfulong_t)(v) < SF_U2 ? 2 : \
(Sfulong_t)(v) < SF_U3 ? 3 : (Sfulong_t)(v) < SF_U4 ? 4 : 5)
#define __sf_fileno(f) ((f) ? _SF_(f)->file : -1)
#define __sf_eof(f) ((f) ? (_SF_(f)->flags&SF_EOF) : 0)
#define __sf_error(f) ((f) ? (_SF_(f)->flags&SF_ERROR) : 0)
#define __sf_clrerr(f) ((f) ? (_SF_(f)->flags &= ~(SF_ERROR|SF_EOF)) : 0)
#define __sf_stacked(f) ((f) ? (_SF_(f)->push != (Sfio_t*)0) : 0)
#define __sf_value(f) ((f) ? (_SF_(f)->val) : 0)
#define __sf_slen() (_Sfi)
#if defined(__INLINE__) && !_BLD_sfio
__INLINE__ int sfputd(Sfio_t* f, Sfdouble_t v) { return __sf_putd(f,v); }
__INLINE__ int sfputl(Sfio_t* f, Sflong_t v) { return __sf_putl(f,v); }
__INLINE__ int sfputu(Sfio_t* f, Sfulong_t v) { return __sf_putu(f,v); }
__INLINE__ int sfputm(Sfio_t* f, Sfulong_t v, Sfulong_t m)
{ return __sf_putu(f,v); }
__INLINE__ int sfputc(Sfio_t* f, int c) { return __sf_putc(f,c); }
__INLINE__ int sfgetc(Sfio_t* f) { return __sf_getc(f); }
__INLINE__ int sfdlen(Sfdouble_t v) { return __sf_dlen(v); }
__INLINE__ int sfllen(Sflong_t v) { return __sf_llen(v); }
__INLINE__ int sfulen(Sfulong_t v) { return __sf_ulen(v); }
__INLINE__ int sffileno(Sfio_t* f) { return __sf_fileno(f); }
__INLINE__ int sfeof(Sfio_t* f) { return __sf_eof(f); }
__INLINE__ int sferror(Sfio_t* f) { return __sf_error(f); }
__INLINE__ int sfclrerr(Sfio_t* f) { return __sf_clrerr(f); }
__INLINE__ int sfstacked(Sfio_t* f) { return __sf_stacked(f); }
__INLINE__ ssize_t sfvalue(Sfio_t* f) { return __sf_value(f); }
#else
#define sfputd(f,v) ( __sf_putd((f),(v)) )
#define sfputl(f,v) ( __sf_putl((f),(v)) )
#define sfputu(f,v) ( __sf_putu((f),(v)) )
#define sfputm(f,v,m) ( __sf_putm((f),(v),(m)) )
#define sfputc(f,c) ( __sf_putc((f),(c)) )
#define sfgetc(f) ( __sf_getc(f) )
#define sfdlen(v) ( __sf_dlen(v) )
#define sfllen(v) ( __sf_llen(v) )
#define sfulen(v) ( __sf_ulen(v) )
#define sffileno(f) ( __sf_fileno(f) )
#define sfeof(f) ( __sf_eof(f) )
#define sferror(f) ( __sf_error(f) )
#define sfclrerr(f) ( __sf_clrerr(f) )
#define sfstacked(f) ( __sf_stacked(f) )
#define sfvalue(f) ( __sf_value(f) )
#define sfslen() ( __sf_slen() )
#endif
#endif