Listing 5: Header file machars.h sets arithmetic type & NAME macro


 1: /* machars.h */
 2:
 3: # if defined(__MACHARS_H__)
 4: #    /* Do Nothing */
 5: # else
 6: #    define    __MACHARS_H__
 7:
 8: #ifdef __cplusplus
 9: extern "C" {
10: #endif
11:
12: /* The NAME() macro used hereinafter is due to Plauger */
13:
14: # if defined(QFLT)
15:     typedef    qfloat        TYPE;
16: #    define    NAME(F) x##F
17: # elif defined(FLT)
18:     typedef    float       TYPE;
19: #    define    NAME(x)    x##f
20: # elif defined(DBL)
21:     typedef    double        TYPE;
22: #    define    NAME(x)    x
23: # else
24:     typedef    long double    TYPE;
25: #    define    NAME(x)    x##l
26: # endif
27:
28: typedef    struct    MacharStru
29: {
30:     short    FracDigs;     /* No. Digits in f.p. Fraction  */
31:     short    Radix;          /* Radix of f.p. Representation */
32:     short    Rounds;          /* TRUE if f.p. Addition Rounds */
33:     TYPE    EpsNeg;
34:     TYPE    Eps;
35:     TYPE    Max;
36:     TYPE    Min;
37:     short    ExpDigits;
38:     short    MaxExp;
39:     short    MinExp;
40:     short    NumGuard;    /* No. Mult. Guard Digits     */
41: }
42:     MACHAR_STRU;
43:
44: extern    MACHAR_STRU  GetMachar(void);
45: extern    MACHAR_STRU  GetExtCh(void);
46:
47:
48: #ifdef __cplusplus
49: }
50: #endif
51:
52: # endif            /* <<__MACHARS_H__>>*/
/* End of File */