sfhdr.h

来自「su 的源代码库」· C头文件 代码 · 共 1,230 行 · 第 1/3 页

H
1,230
字号
#define SFKILL(f)	((f)->mode = (SF_AVAIL|SF_LOCK) )#define SFKILLED(f)	(((f)->mode&(SF_AVAIL|SF_LOCK)) == (SF_AVAIL|SF_LOCK) )/* exception types */#define SF_EDONE	0	/* stop this operation and return	*/#define SF_EDISC	1	/* discipline says it's ok		*/#define SF_ESTACK	2	/* stack was popped			*/#define SF_ECONT	3	/* can continue normally		*/#define SETLOCAL(f)	((f)->mode |= SF_LOCAL)#define GETLOCAL(f,v)	((v) = ((f)->mode&SF_LOCAL), (f)->mode &= ~SF_LOCAL, (v))#define SFWRALL(f)	((f)->mode |= SF_RV)#define SFISALL(f,v)	((((v) = (f)->mode&SF_RV) ? ((f)->mode &= ~SF_RV) : 0), \			 ((v) || (f)->extent < 0 || \			  ((f)->flags&(SF_SHARE|SF_APPENDWR|SF_WHOLE)) ) )#define SFSK(f,a,o,d)	(SETLOCAL(f),sfsk(f,(Sfoff_t)a,o,d))#define SFRD(f,b,n,d)	(SETLOCAL(f),sfrd(f,(Void_t*)b,n,d))#define SFWR(f,b,n,d)	(SETLOCAL(f),sfwr(f,(Void_t*)b,n,d))#define SFSYNC(f)	(SETLOCAL(f),sfsync(f))#define SFCLOSE(f)	(SETLOCAL(f),sfclose(f))#define SFFLSBUF(f,n)	(SETLOCAL(f),_sfflsbuf(f,n))#define SFFILBUF(f,n)	(SETLOCAL(f),_sffilbuf(f,n))#define SFSETBUF(f,s,n)	(SETLOCAL(f),sfsetbuf(f,s,n))#define SFWRITE(f,s,n)	(SETLOCAL(f),sfwrite(f,s,n))#define SFREAD(f,s,n)	(SETLOCAL(f),sfread(f,s,n))#define SFSEEK(f,p,t)	(SETLOCAL(f),sfseek(f,p,t))#define SFNPUTC(f,c,n)	(SETLOCAL(f),sfnputc(f,c,n))#define SFRAISE(f,e,d)	(SETLOCAL(f),sfraise(f,e,d))/* lock/open a stream */#define SFMODE(f,l)	((f)->mode & ~(SF_RV|SF_RC|((l) ? SF_LOCK : 0)) )#define SFLOCK(f,l)	(void)((f)->mode |= SF_LOCK, (f)->endr = (f)->endw = (f)->data)#define _SFOPENRD(f)	((f)->endr = ((f)->flags&SF_MTSAFE) ? (f)->data : (f)->endb)#define _SFOPENWR(f)	((f)->endw = ((f)->flags&(SF_MTSAFE|SF_LINE)) ? (f)->data : (f)->endb)#define _SFOPEN(f)	((f)->mode == SF_READ  ? _SFOPENRD(f) : \			 (f)->mode == SF_WRITE ? _SFOPENWR(f) : \			 ((f)->endr = (f)->endr = (f)->data) )#define SFOPEN(f,l)	(void)((l) ? 0 : \				((f)->mode &= ~(SF_LOCK|SF_RC|SF_RV), _SFOPEN(f), 0) )/* check to see if the stream can be accessed */#define SFFROZEN(f)	(((f)->mode&(SF_PUSH|SF_LOCK|SF_PEEK)) ? 1 : \			 !((f)->mode&SF_STDIO) ? 0 : \			 _Sfstdsync ? (*_Sfstdsync)(f) : (((f)->mode &= ~SF_STDIO),0) )/* set discipline code */#define SFDISC(f,dc,iof) \	{	Sfdisc_t* d; \		if(!(dc)) \			d = (dc) = (f)->disc; \		else 	d = (f->bits&SF_DCDOWN) ? ((dc) = (dc)->disc) : (dc); \		while(d && !(d->iof))	d = d->disc; \		if(d)	(dc) = d; \	}#define SFDCRD(f,buf,n,dc,rv) \	{	int		dcdown = f->bits&SF_DCDOWN; f->bits |= SF_DCDOWN; \		rv = (*dc->readf)(f,buf,n,dc); \		if(!dcdown)	f->bits &= ~SF_DCDOWN; \	}#define SFDCWR(f,buf,n,dc,rv) \	{	int		dcdown = f->bits&SF_DCDOWN; f->bits |= SF_DCDOWN; \		rv = (*dc->writef)(f,buf,n,dc); \		if(!dcdown)	f->bits &= ~SF_DCDOWN; \	}#define SFDCSK(f,addr,type,dc,rv) \	{	int		dcdown = f->bits&SF_DCDOWN; f->bits |= SF_DCDOWN; \		rv = (*dc->seekf)(f,addr,type,dc); \		if(!dcdown)	f->bits &= ~SF_DCDOWN; \	}/* fast peek of a stream */#define _SFAVAIL(f,s,n)	((n) = (f)->endb - ((s) = (f)->next) )#define SFRPEEK(f,s,n)	(_SFAVAIL(f,s,n) > 0 ? (n) : \				((n) = SFFILBUF(f,-1), (s) = (f)->next, (n)) )#define SFWPEEK(f,s,n)	(_SFAVAIL(f,s,n) > 0 ? (n) : \				((n) = SFFLSBUF(f,-1), (s) = (f)->next, (n)) )/* more than this for a line buffer, we might as well flush */#define HIFORLINE	128/* string stream extent */#define SFSTRSIZE(f)	{ Sfoff_t s = (f)->next - (f)->data; \			  if(s > (f)->here) \			    { (f)->here = s; if(s > (f)->extent) (f)->extent = s; } \			}/* control flags for open() */#ifdef O_CREAT#define _has_oflags	1#else	/* for example, research UNIX */#define _has_oflags	0#define O_CREAT		004#define O_TRUNC		010#define O_APPEND	020#define O_EXCL		040#ifndef O_RDONLY#define	O_RDONLY	000#endif#ifndef O_WRONLY#define O_WRONLY	001#endif#ifndef O_RDWR#define O_RDWR		002#endif#endif /*O_CREAT*/#ifndef O_BINARY#define O_BINARY	000#endif#ifndef O_TEXT#define O_TEXT		000#endif#ifndef O_TEMPORARY#define O_TEMPORARY	000#endif#define	SF_RADIX	64	/* maximum integer conversion base */#if _PACKAGE_ast#define SF_MAXINT	INT_MAX#define SF_MAXLONG	LONG_MAX#else#define SF_MAXINT	((int)(((uint)~0) >> 1))#define SF_MAXLONG	((long)(((ulong)~0L) >> 1))#endif#define SF_MAXCHAR	((uchar)(~0))/* floating point to ascii conversion */#define SF_MAXEXP10	6#define SF_MAXPOW10	(1 << SF_MAXEXP10)#if !_ast_fltmax_double#define SF_FDIGITS	1024		/* max allowed fractional digits */#define SF_IDIGITS	(8*1024)	/* max number of digits in int part */#else#define SF_FDIGITS	256		/* max allowed fractional digits */#define SF_IDIGITS	1024		/* max number of digits in int part */#endif#define SF_MAXDIGITS	(((SF_FDIGITS+SF_IDIGITS)/sizeof(int) + 1)*sizeof(int))/* tables for numerical translation */#define _Sfpos10	(_Sftable.sf_pos10)#define _Sfneg10	(_Sftable.sf_neg10)#define _Sfdec		(_Sftable.sf_dec)#define _Sfdigits	(_Sftable.sf_digits)#define _Sfcvinitf	(_Sftable.sf_cvinitf)#define _Sfcvinit	(_Sftable.sf_cvinit)#define _Sffmtposf	(_Sftable.sf_fmtposf)#define _Sffmtintf	(_Sftable.sf_fmtintf)#define _Sfcv36		(_Sftable.sf_cv36)#define _Sfcv64		(_Sftable.sf_cv64)#define _Sftype		(_Sftable.sf_type)#define _Sffhuge	(_Sftable.sf_flt_huge)#define _Sfdhuge	(_Sftable.sf_dbl_huge)#define _Sflhuge	(_Sftable.sf_ldbl_huge)#define _Sffpow10	(_Sftable.sf_flt_pow10)#define _Sfdpow10	(_Sftable.sf_dbl_pow10)#define _Sflpow10	(_Sftable.sf_ldbl_pow10)typedef struct _sftab_{	Sfdouble_t	sf_pos10[SF_MAXEXP10];	/* positive powers of 10	*/	Sfdouble_t	sf_neg10[SF_MAXEXP10];	/* negative powers of 10	*/	uchar		sf_dec[200];		/* ascii reps of values < 100	*/	char*		sf_digits;		/* digits for general bases	*/ 	int		(*sf_cvinitf)();	/* initialization function	*/	int		sf_cvinit;		/* initialization state		*/	Fmtpos_t*	(*sf_fmtposf)_ARG_((Sfio_t*,const char*,va_list,Sffmt_t*,int));	char*		(*sf_fmtintf)_ARG_((const char*,int*));	float*		sf_flt_pow10;		/* float powers of 10		*/	double*		sf_dbl_pow10;		/* double powers of 10		*/	Sfdouble_t*	sf_ldbl_pow10;		/* Sfdouble_t powers of 10	*/	float		sf_flt_huge;		/* float HUGE_VALUE		*/	double		sf_dbl_huge;		/* double HUGE_VALUE		*/	Sfdouble_t	sf_ldbl_huge;		/* Sfdouble_t HUGE_VALUE	*/	uchar		sf_cv36[SF_MAXCHAR+1];	/* conversion for base [2-36]	*/	uchar		sf_cv64[SF_MAXCHAR+1];	/* conversion for base [37-64]	*/	uchar		sf_type[SF_MAXCHAR+1];	/* conversion formats&types	*/} Sftab_t;/* thread-safe macro/function to initialize _Sfcv* conversion tables */#define SFCVINIT()      (_Sfcvinit ? 1 : (_Sfcvinit = (*_Sfcvinitf)()) )/* sfucvt() converts decimal integers to ASCII */#define SFDIGIT(v,scale,digit) \	{ if(v < 5*scale) \		if(v < 2*scale) \			if(v < 1*scale) \				{ digit = '0'; } \			else	{ digit = '1'; v -= 1*scale; } \		else	if(v < 3*scale) \				{ digit = '2'; v -= 2*scale; } \			else if(v < 4*scale) \				{ digit = '3'; v -= 3*scale; } \			else	{ digit = '4'; v -= 4*scale; } \	  else	if(v < 7*scale) \			if(v < 6*scale) \				{ digit = '5'; v -= 5*scale; } \			else	{ digit = '6'; v -= 6*scale; } \		else	if(v < 8*scale) \				{ digit = '7'; v -= 7*scale; } \			else if(v < 9*scale) \				{ digit = '8'; v -= 8*scale; } \			else	{ digit = '9'; v -= 9*scale; } \	}#define sfucvt(v,s,n,list,type,utype) \	{ while((utype)v >= 10000) \	  {	n = v; v = (type)(((utype)v)/10000); \		n = (type)((utype)n - ((utype)v)*10000); \	  	s -= 4; SFDIGIT(n,1000,s[0]); SFDIGIT(n,100,s[1]); \			s[2] = *(list = (char*)_Sfdec + (n <<= 1)); s[3] = *(list+1); \	  } \	  if(v < 100) \	  { if(v < 10) \	    { 	s -= 1; s[0] = (char)('0'+v); \	    } else \	    { 	s -= 2; s[0] = *(list = (char*)_Sfdec + (v <<= 1)); s[1] = *(list+1); \	    } \	  } else \	  { if(v < 1000) \	    { 	s -= 3; SFDIGIT(v,100,s[0]); \			s[1] = *(list = (char*)_Sfdec + (v <<= 1)); s[2] = *(list+1); \	    } else \	    {	s -= 4; SFDIGIT(v,1000,s[0]); SFDIGIT(v,100,s[1]); \			s[2] = *(list = (char*)_Sfdec + (v <<= 1)); s[3] = *(list+1); \	    } \	  } \	}/* handy functions */#undef min#undef max#define min(x,y)	((x) < (y) ? (x) : (y))#define max(x,y)	((x) > (y) ? (x) : (y))/* fast functions for memory copy and memory clear */#if _PACKAGE_ast#define memclear(s,n)	memzero(s,n)#else#if _lib_bcopy && !_lib_memcpy#define memcpy(to,fr,n)	bcopy((fr),(to),(n))#endif#if _lib_bzero && !_lib_memset#define memclear(s,n)	bzero((s),(n))#else#define memclear(s,n)	memset((s),'\0',(n))#endif#endif /*_PACKAGE_ast*//* note that MEMCPY advances the associated pointers */#define MEMCPY(to,fr,n) \	switch(n) \	{ default : memcpy((Void_t*)to,(Void_t*)fr,n); to += n; fr += n; break; \	  case  7 : *to++ = *fr++; \	  case  6 : *to++ = *fr++; \	  case  5 : *to++ = *fr++; \	  case  4 : *to++ = *fr++; \	  case  3 : *to++ = *fr++; \	  case  2 : *to++ = *fr++; \	  case  1 : *to++ = *fr++; \	}#define MEMSET(s,c,n) \	switch(n) \	{ default : memset((Void_t*)s,(int)c,n); s += n; break; \	  case  7 : *s++ = c; \	  case  6 : *s++ = c; \	  case  5 : *s++ = c; \	  case  4 : *s++ = c; \	  case  3 : *s++ = c; \	  case  2 : *s++ = c; \	  case  1 : *s++ = c; \	}_BEGIN_EXTERNS_extern Sftab_t		_Sftable;extern int		_sfpopen _ARG_((Sfio_t*, int, int, int));extern int		_sfpclose _ARG_((Sfio_t*));extern int		_sfexcept _ARG_((Sfio_t*, int, ssize_t, Sfdisc_t*));extern Sfrsrv_t*	_sfrsrv _ARG_((Sfio_t*, ssize_t));extern int		_sfsetpool _ARG_((Sfio_t*));extern char*		_sfcvt _ARG_((Sfdouble_t,char*,size_t,int,int*,int*,int*,int));extern char**		_sfgetpath _ARG_((char*));/* extern Sfdouble_t _sfdscan _ARG_((Void_t*, int(*)(Void_t*,int))); */#if _BLD_sfio && defined(__EXPORT__)#define extern		__EXPORT__#endif#if !_BLD_sfio && defined(__IMPORT__)#define extern		extern __IMPORT__#endifextern Sfextern_t	_Sfextern;extern int		_sfmode _ARG_((Sfio_t*, int, int));extern int		_sftype _ARG_((const char*, int*, int*));#undef	extern#ifndef errnoextern int		errno;#endif/* for portable encoding of double values */#ifndef frexpl#if _ast_fltmax_double#define frexpl		frexp#endif#if !__STDC__extern Sfdouble_t	frexpl _ARG_((Sfdouble_t, int*));#endif#endif#ifndef ldexpl#if _ast_fltmax_double#define ldexpl		ldexp#endif#if !__STDC__extern Sfdouble_t	ldexpl _ARG_((Sfdouble_t, int));#endif#endif#if !_PACKAGE_ast#if !__STDC__ && !_hdr_stdlibextern void	abort _ARG_((void));extern int	atexit _ARG_((void(*)(void)));extern char*	getenv _ARG_((const char*));extern void*	malloc _ARG_((size_t));extern void*	realloc _ARG_((void*, size_t));extern void	free _ARG_((void*));extern size_t	strlen _ARG_((const char*));extern char*	strcpy _ARG_((char*, const char*));extern Void_t*	memset _ARG_((void*, int, size_t));extern Void_t*	memchr _ARG_((const void*, int, size_t));extern Void_t*	memccpy _ARG_((void*, const void*, int, size_t));#ifndef memcpyextern Void_t*	memcpy _ARG_((void*, const void*, size_t));#endif#if !defined(strtod)extern double	strtod _ARG_((const char*, char**));#endif#if !defined(remove)extern int	sysremovef _ARG_((const char*));#endif#endif /* !__STDC__ && !_hdr_stdlib */#if !_hdr_unistd#if _proto_open && __cplusplusextern int	sysopenf _ARG_((const char*, int, ...));#endifextern int	sysclosef _ARG_((int));extern ssize_t	sysreadf _ARG_((int, void*, size_t));extern ssize_t	syswritef _ARG_((int, const void*, size_t));extern sfoff_t	syslseekf _ARG_((int, sfoff_t, int));extern int	sysdupf _ARG_((int));extern int	syspipef _ARG_((int*));extern int	sysaccessf _ARG_((const char*, int));extern int	sysremovef _ARG_((const char*));extern int	sysfstatf _ARG_((int, sfstat_t*));extern int	sysstatf _ARG_((const char*, sfstat_t*));extern int	isatty _ARG_((int));extern int	wait _ARG_((int*));extern uint	sleep _ARG_((uint));extern int	execl _ARG_((const char*, const char*,...));extern int	execv _ARG_((const char*, char**));#if !defined(fork)extern int	fork _ARG_((void));#endif#if _lib_unlinkextern int	unlink _ARG_((const char*));#endif#endif /*_hdr_unistd*/#if _lib_bcopy && !_proto_bcopyextern void	bcopy _ARG_((const void*, void*, size_t));#endif#if _lib_bzero && !_proto_bzeroextern void	bzero _ARG_((void*, size_t));#endifextern time_t	time _ARG_((time_t*));extern int	waitpid _ARG_((int,int*,int));extern void	_exit _ARG_((int));typedef int(*	Onexit_f)_ARG_((void));extern Onexit_f	onexit _ARG_((Onexit_f));#if _lib_vfork && !_hdr_vfork && !_sys_vforkextern pid_t	vfork _ARG_((void));#endif /*_lib_vfork*/#if _lib_poll#if _lib_poll_fd_1extern int	poll _ARG_((struct pollfd*, ulong, int));#elseextern int	poll _ARG_((ulong, struct pollfd*, int));#endif#endif /*_lib_poll*/#endif /* _PACKAGE_ast */_END_EXTERNS_#endif /*_SFHDR_H*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?