mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-12-28 01:29:32 +00:00
1af7505a00
There still aren't prototypes for the main SANE calls, since they aren't really designed to be called directly from C, and may take variable numbers of parameters depending on the operation.
273 lines
6.6 KiB
C
273 lines
6.6 KiB
C
/********************************************
|
|
; File: SANE.h
|
|
;
|
|
;
|
|
; Copyright Apple Computer, Inc.1986-90
|
|
; All Rights Reserved
|
|
;
|
|
********************************************/
|
|
#ifndef __TYPES__
|
|
#include <TYPES.h>
|
|
#endif
|
|
|
|
#ifndef __SANE__
|
|
#define __SANE__
|
|
|
|
|
|
/* Decimal Representation Constants */
|
|
#define SIGDIGLEN 0x001C
|
|
#define DECSTROUTLEN 0x0050
|
|
|
|
/* IEEE defualt environment constant */
|
|
#define IEEEDEFAULTENV 0x0000
|
|
|
|
/* Decimal formatting styles */
|
|
#define FLOATDECIMAL 0x0000
|
|
#define FIXEDDECIMAL 0x0001
|
|
|
|
/* Exceptions */
|
|
#define INVALID 0x0001
|
|
#define UNDERFLOW 0x0002
|
|
#define OVERFLOW 0x0004
|
|
#define DIVBYZERO 0x0008
|
|
#define INEXACT 0x0010
|
|
|
|
/* Ordering relations */
|
|
#define GREATERTHAN 0
|
|
#define LESSTHAN 1
|
|
#define EQUALTO 2
|
|
#define UNORDERED 3
|
|
typedef short relop ;
|
|
|
|
|
|
/* Inquiry classes */
|
|
#define SNAN 0
|
|
#define QNAN 1
|
|
#define INFINITE 2
|
|
#define ZERONUM 3
|
|
#define NORMALNUM 4
|
|
#define DENORMALNUM 5
|
|
typedef short numclass ;
|
|
|
|
|
|
/* Environmental control */
|
|
|
|
/* Rounding directions */
|
|
#define TONEAREST 0
|
|
#define UPWARD 1
|
|
#define DOWNWARD 2
|
|
#define TOWARDZERO 3
|
|
typedef short rounddir ;
|
|
|
|
|
|
/* Rounding precisions */
|
|
#define EXTPRECISION 0
|
|
#define DBLPRECISION 1
|
|
#define FLOATPRECISION 2
|
|
typedef short roundpre ;
|
|
|
|
typedef short exception;
|
|
typedef short environment;
|
|
typedef struct decimal {
|
|
short sgn; /* sign 0 for +, 1 for - */
|
|
short exp; /* decimal exponent */
|
|
struct {
|
|
unsigned char length, text[SIGDIGLEN], unused;
|
|
} sig; /* significant digits */
|
|
} decimal, Decimal;
|
|
|
|
struct decform {
|
|
short style; /* FLOATDECIMAL or FIXEDDECIMAL */
|
|
short digits;
|
|
} ;
|
|
typedef struct decform decform;
|
|
typedef struct decform DecForm;
|
|
typedef void (*haltvector)(void);
|
|
|
|
Extended fabs (Extended x) ;
|
|
|
|
|
|
|
|
/* Conversions between binary and decimal */
|
|
void num2dec (DecForm *f,extended x,Decimal *d) ;
|
|
/* d <-- x according to format f */
|
|
|
|
Extended dec2num (Decimal *d) ;
|
|
/* Dec2Num <-- d as Extended */
|
|
|
|
|
|
/* Conversions between decimal formats */
|
|
void str2dec (char *s,short *index,Decimal *d,short *validPrefix) ;
|
|
/* On input Index is starting index into s.
|
|
On output Index is one greater than index of last character of longest numeric substring.
|
|
d <-- Decimal rep of longest numeric substring;
|
|
validPrefix <-- s, beginning at Index, contains valid numeric string or valid prefix of some numeric string */
|
|
void dec2str (DecForm *f,Decimal *d,char *s) ;
|
|
/* s <-- d according to format f */
|
|
|
|
|
|
/* Arithmetic, auxiliary and elementary functions */
|
|
Extended remainder (Extended x,Extended y,short *quo) ;
|
|
/* Remainder <-- x rem y; */
|
|
/* quo <-- 7 low-order bits of integer quotient x/y */
|
|
/* where -127 < quo < 127 */
|
|
|
|
Extended sqrt (Extended x) ;
|
|
/* square root */
|
|
|
|
Extended rint (Extended x) ;
|
|
/* round to integral value */
|
|
|
|
Extended scalb (short n,Extended x) ;
|
|
/* scale binary; scalb <-- x * 2^n */
|
|
|
|
Extended logb (Extended x) ;
|
|
/* binary log: binary exponent of normalized x */
|
|
|
|
Extended copysign (Extended x,Extended y) ;
|
|
/* CopySign <-- y with sign of x */
|
|
|
|
Extended nextfloat (Extended x,Extended y) ;
|
|
/* next float rep after (float) x in direction of (float) y */
|
|
|
|
Extended nextdouble (Extended x,Extended y) ;
|
|
/* next Double rep after (Double) x in direction of (Double) y */
|
|
|
|
Extended nextextended (Extended x,Extended y) ;
|
|
/* next extended representation after x in direction of y */
|
|
|
|
Extended log2 (Extended x) ;
|
|
/* base-2 logarithm */
|
|
|
|
Extended log (Extended x) ;
|
|
/* base-e logarithm */
|
|
|
|
Extended log1 (Extended x) ;
|
|
/* log(1 + x) */
|
|
|
|
Extended exp2 (Extended x) ;
|
|
/* base-2 exponential */
|
|
|
|
Extended exp (Extended x) ;
|
|
/* base-e exponential */
|
|
|
|
Extended exp1 (Extended x) ;
|
|
/* exp(x) - 1 */
|
|
|
|
Extended power (Extended x,Extended y) ;
|
|
/* general exponential: x ^ y */
|
|
|
|
Extended ipower (Extended x,short i) ;
|
|
/* integer exponential: x ^ i */
|
|
|
|
Extended compound (Extended r,Extended n) ;
|
|
/* compound: (1 + r) ^ n */
|
|
|
|
Extended annuity (Extended r,Extended n) ;
|
|
/* Annuity <-- (1 - (1+r)^(-n)) / r */
|
|
|
|
Extended tan (Extended x) ;
|
|
/* tangent */
|
|
|
|
Extended sin (Extended x) ;
|
|
/* Sine */
|
|
|
|
Extended cos (Extended x) ;
|
|
/* Cosine */
|
|
|
|
Extended atan (Extended x) ;
|
|
/* Arctangent */
|
|
|
|
Extended randomx (Extended *x) ;
|
|
/* returns next random number; updates x; */
|
|
/* x must be integral, 1 <= x <= 2^31 - 2 */
|
|
|
|
|
|
/* Inquiry Routines */
|
|
numclass classfloat (Extended x) ;
|
|
/* class of (float) x */
|
|
|
|
numclass classdouble (Extended x) ;
|
|
/* class of (Double) x */
|
|
|
|
numclass classcomp (Extended x) ;
|
|
/* class of (Comp) x */
|
|
|
|
numclass classextended (Extended x) ;
|
|
/* class of x */
|
|
|
|
LongWord signnum (Extended x) ;
|
|
/* 0 if sign bit clear, 1 if sign bit set */
|
|
|
|
|
|
/* Environment access routines */
|
|
void setexception (exception e,long b) ;
|
|
/* clears e flags if b is 0, sets e flags otherwise; may cause halt */
|
|
|
|
long testexception (exception e) ;
|
|
/* return true if any e flag is set, return false otherwise */
|
|
|
|
void sethalt (exception e,long b) ;
|
|
/* set e halt enables if b is true, clear e halt enables otherwise */
|
|
|
|
long testhalt (exception e) ;
|
|
/* return true if any e halt is enabled, return false otherwise */
|
|
|
|
void setround (rounddir r) ;
|
|
/* set rounding direction to r */
|
|
|
|
rounddir getround (void) ;
|
|
/* return rounding direction */
|
|
|
|
void setprecision (roundpre p) ;
|
|
/* sets rnd'n precision to p */
|
|
|
|
roundpre getprecision (void) ;
|
|
|
|
|
|
void setenvironment (environment e) ;
|
|
/* sets SANE environment to e */
|
|
|
|
void getenvironment (environment *e) ;
|
|
/* e <-- SANE environment */
|
|
|
|
void procentry (environment *e) ;
|
|
/* e <-- environment; environment <-- IEEE default env */
|
|
|
|
void procexit (environment e) ;
|
|
/* temp <-- current exceptions; */
|
|
/* SANE environment <-- e; */
|
|
/* signals exceptions in temp */
|
|
|
|
haltvector gethaltvector (void) ;
|
|
/* return SANE halt vector */
|
|
|
|
void sethaltvector (haltvector v) ;
|
|
/* halt vector <-- v */
|
|
|
|
|
|
/* Comparison routine */
|
|
relop relation (Extended x,Extended y) ;
|
|
/* return Relation such that "x Relation y" is true */
|
|
|
|
|
|
/* NaNs and Special Constants */
|
|
extended nan( unsigned char c ); /* returns NaN with code c */
|
|
|
|
Extended inf (void) ;
|
|
/* returns infinity */
|
|
|
|
Extended pi (void) ;
|
|
/* returns pi */
|
|
|
|
extern pascal void SANEBootInit(void) inline(0x010A,dispatcher);
|
|
extern pascal void SANEStartUp(Word) inline(0x020A,dispatcher);
|
|
extern pascal void SANEShutDown(void) inline(0x030A,dispatcher);
|
|
extern pascal Word SANEVersion(void) inline(0x040A,dispatcher);
|
|
extern pascal void SANEReset(void) inline(0x050A,dispatcher);
|
|
extern pascal Word SANEStatus(void) inline(0x060A,dispatcher);
|
|
extern pascal void SANEFP816() inline(0x090A,dispatcher);
|
|
extern pascal void SANEDecStr816() inline(0x0A0A,dispatcher);
|
|
extern pascal void SANEElems816() inline(0x0B0A,dispatcher);
|
|
#endif
|