/************************************************************ Created: Wednesday, September 27, 1989 at 2:58 PM SANE.h C Interface to the Macintosh Libraries Copyright Apple Computer, Inc. 1985-1991 All rights reserved This file is used in these builds: ROM System Change History (most recent first): <4> 2/17/92 MH Move def on extended80 to types.h, and include types.h <3> 8/8/91 JL Updated copyright 26 Oct 89 - Jon Okada Removed initialization of IEEEDEFAULTENV for -mc68881 mode (deferred to CLib881.o); declared IEEEDEFAULTENV extern. Installed #include of Math.h. Removed declarations of sqrt, log, exp, tan, cos, sin, and atan (deferred to Math.h). Changed declarations of functions power and inf to macro definitions using pow and __inf. ************************************************************/ #ifndef __SANE__ #define __SANE__ #ifndef __TYPES__ #include #endif #ifndef __MATH__ #include #endif #ifdef mc68881 /* specific to the MC68881 SANE library */ #define INEXACT ((exception)(8)) #define DIVBYZERO ((exception)(16)) #define UNDERFLOW ((exception)(32)) #define OVERFLOW ((exception)(64)) #define INVALID ((exception)(128)) #define CURINEX1 ((exception)(256)) #define CURINEX2 ((exception)(512)) #define CURDIVBYZERO ((exception)(1024)) #define CURUNDERFLOW ((exception)(2048)) #define CUROVERFLOW ((exception)(4096)) #define CUROPERROR ((exception)(8192)) #define CURSIGNAN ((exception)(16384)) #define CURBSONUNOR ((exception)(32768)) #else /* specific to the software SANE library */ #define INVALID ((exception)(1)) #define UNDERFLOW ((exception)(2)) #define OVERFLOW ((exception)(4)) #define DIVBYZERO ((exception)(8)) #define INEXACT ((exception)(16)) #define IEEEDEFAULTENV ((environment)(0)) /*IEEE-default floating-point environment*/ #endif /* mc68881 */ /* The common interface to the SANE library */ /* Decimal Representation Constants */ #define SIGDIGLEN 20 /* significant decimal digits */ #define DECSTROUTLEN 80 /* max length for dec2str output */ /* Decimal Formatting Styles */ #define FLOATDECIMAL ((char)(0)) #define FIXEDDECIMAL ((char)(1)) /* Ordering Relations */ #define GREATERTHAN ((relop)(0)) #define LESSTHAN ((relop)(1)) #define EQUALTO ((relop)(2)) #define UNORDERED ((relop)(3)) /* Inquiry Classes */ #define SNAN ((numclass)(0)) #define QNAN ((numclass)(1)) #define INFINITE ((numclass)(2)) #define ZERONUM ((numclass)(3)) #define NORMALNUM ((numclass)(4)) #define DENORMALNUM ((numclass)(5)) /* Rounding Directions */ #define TONEAREST ((rounddir)(0)) #define UPWARD ((rounddir)(1)) #define DOWNWARD ((rounddir)(2)) #define TOWARDZERO ((rounddir)(3)) /* Rounding Precisions */ #define EXTPRECISION ((roundpre)(0)) #define DBLPRECISION ((roundpre)(1)) #define FLOATPRECISION ((roundpre)(2)) #ifdef mc68881 typedef long exception; struct environment { long FPCR; long FPSR; }; typedef struct environment environment; extern environment IEEEDEFAULTENV; struct trapvector { void (*unordered)(); void (*inexact)(); void (*divbyzero)(); void (*underflow)(); void (*operror)(); void (*overflow)(); void (*signan)(); }; typedef struct trapvector trapvector; #else typedef short exception; typedef short environment; typedef struct {short w[6];} extended96; struct mischaltinfo { unsigned short haltexceptions; unsigned short pendingCCR; long pendingD0; }; typedef struct mischaltinfo mischaltinfo; typedef pascal void (*haltvector)(mischaltinfo *misc, void *src2, void *src, void *dst, short opcode); #endif typedef short relop; /* relational operator */ typedef short numclass; /* inquiry class */ typedef short rounddir; /* rounding direction */ typedef short roundpre; /* rounding precision */ struct decimal { char sgn; /*sign 0 for +, 1 for -*/ char unused; short exp; /*decimal exponent*/ struct{ unsigned char length; unsigned char text[SIGDIGLEN]; /*significant digits */ unsigned char unused; }sig; }; typedef struct decimal decimal; struct decform { char style; /*FLOATDECIMAL or FIXEDDECIMAL*/ char unused; short digits; }; typedef struct decform decform; #ifdef __cplusplus extern "C" { #endif #ifdef mc68881 struct trapvector gettrapvector(void); void settrapvector(const trapvector *v); void x96tox80(const extended *x,extended80 *x80); void x80tox96(const extended80 *x80,extended *x); #else haltvector gethaltvector(void); void sethaltvector(haltvector v); void x96tox80(const extended96 *x96,extended *x); void x80tox96(const extended *x,extended96 *x96); #endif void num2dec(const decform *f,extended x,decimal *d); extended dec2num(const decimal *d); void dec2str(const decform *f,const decimal *d,char *s); void str2dec(const char *s,short *ix,decimal *d,short *vp); extended remainder(extended x,extended y,short *quo); extended rint(extended x); extended scalb(short n,extended x); extended logb(extended x); extended copysign(extended x,extended y); extended nextfloat(extended x,extended y); extended nextdouble(extended x,extended y); extended nextextended(extended x,extended y); extended log2(extended x); extended log1(extended x); extended exp2(extended x); extended exp1(extended x); #define power(x,y) pow(x,y) extended ipower(extended x,short i); extended compound(extended r,extended n); extended annuity(extended r,extended n); extended randomx(extended *x); numclass classfloat(extended x); numclass classdouble(extended x); numclass classcomp(extended x); numclass classextended(extended x); long signnum(extended x); void setexception(exception e,long s); long testexception(exception e); void sethalt(exception e,long s); long testhalt(exception e); void setround(rounddir r); rounddir getround(void); void setprecision(roundpre p); roundpre getprecision(void); void setenvironment(environment e); void getenvironment(environment *e); void procentry(environment *e); void procexit(environment e); relop relation(extended x,extended y); extended nan(unsigned char c); #define inf() __inf() extended pi(void); #ifdef __cplusplus } #endif #endif