Annotation of 43BSDReno/pgrm/as.tahoe/asnumber.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     Copyright (c) 1982 Regents of the University of California
                      3:  *     @(#)asnumber.h 4.3 2/14/82
                      4:  */
                      5: 
                      6: union Ib_int{          /* byte */
                      7:        u_char  Ib_uchar[1];
                      8:        char    Ichar;
                      9: };
                     10: union Iw_int{          /* word */
                     11:        u_char  Iw_uchar[2];
                     12:        u_short Iw_ushort[1];
                     13:        short   Iw_short;
                     14: };
                     15: union Il_int{          /* long word */
                     16:        u_char  Il_uchar[4];
                     17:        u_short Il_ushort[2];
                     18:        u_int   Il_ulong[1];
                     19:        int     Il_long;
                     20: };
                     21: 
                     22: union Iq_int{          /* quad word */
                     23:        u_char  Iq_uchar[8];
                     24:        u_short Iq_ushort[4];
                     25:        u_int   Iq_ulong[2];
                     26: };
                     27: 
                     28: 
                     29: union Ff_float{
                     30:        u_char  Ff_uchar[4];
                     31:        u_short Ff_ushort[2];
                     32:        u_int   Ff_ulong[1];
                     33:        float   Ff_value;
                     34: };
                     35: 
                     36: union Fd_float{
                     37:        u_char  Fd_uchar[8];
                     38:        u_short Fd_ushort[4];
                     39:        u_int   Fd_ulong[2];
                     40:        double  Fd_value;
                     41: };
                     42: 
                     43: 
                     44: struct as_number{
                     45:        union {
                     46:                union Ib_int    numIb_int;
                     47:                union Iw_int    numIw_int;
                     48:                union Il_int    numIl_int;
                     49:                union Iq_int    numIq_int;
                     50:                union Ff_float  numFf_float;
                     51:                union Fd_float  numFd_float;
                     52:        }num_num;
                     53:        char    num_tag;                /* the key field: TYPB..TYPUNPACKED */
                     54:        char    num_sign;               /* the sign */
                     55:        short   num_exponent;           /* the unexcessed exp */
                     56: };
                     57: typedef        struct as_number        Bignum;
                     58: 
                     59: extern Bignum  Znumber;                /* one all zero'ed out */
                     60: 
                     61: #define        num_uchar       num_num.numIq_int.Iq_uchar
                     62: #define        num_uint        num_num.numIq_int.Iq_ulong
                     63: #define        num_ulong       num_num.numIq_int.Iq_ulong
                     64: #define        num_ushort      num_num.numIq_int.Iq_ushort
                     65: /*
                     66:  *     The following definitions must all be consistent.
                     67:  *     They define the granularity of working on longs and quad 
                     68:  *     words. Currently, the granularity is as large as it can be: 32 bits
                     69:  *     in a chunk.
                     70:  */
                     71: #define        CH_N            2               /* number of pieces */
                     72: #define        CH_BITS         32              /* number of bits per piece */
                     73: #define        CH_FIELD(x)     ((x).num_num.numIq_int.Iq_ulong)
                     74: typedef        u_int           *chptr;         /* basic data type */
                     75: #define SIGNBIT                0x80000000
                     76: 
                     77: #define        HOC             (CH_N - 1)      /* high order chunk */
                     78: #if 0
                     79: #define        MAXINT_1        ((unsigned)(1<<(CH_BITS - 1)))
                     80: #define        MAXINT_10       ((unsigned)((MAXINT_1/(unsigned)10)))
                     81: #define        MAXINT_5        ((unsigned)((MAXINT_1/(unsigned)5)))
                     82: #else not 0
                     83: /*
                     84:  *     These values were computed using dc, so are exact.
                     85:  *     Only MAXINT_10 and MAXINT_5 are used in the programs.
                     86:  */
                     87: #define        MAXINT_1        2147483648
                     88: #define        MAXINT_10       214748364
                     89: #define        MAXINT_5        429496729
                     90: #endif not 0
                     91: 
                     92: Bignum as_atoi();              /* converts string to integer */
                     93: Bignum as_atof();              /* converts string to float */
                     94: 
                     95: /*
                     96:  *     Definitions for overflows.
                     97:  */
                     98: typedef        u_int   Ovf;
                     99: 
                    100: #define        OVF_ADDV        (1<<0)  /* integer: adding two vectors overflowed */
                    101: #define        OVF_LSHIFT      (1<<1)  /* integer: left shifting a vector lost bits */
                    102: #define        OVF_POSOVF      (1<<2)  /* integer: positive number overflowed */
                    103: #define        OVF_MAXINT      (1<<3)  /* integer: the number was the maxint + 1*/
                    104: #define        OVF_F           (1<<4)  /* float: F overflow */
                    105: #define        OVF_D           (1<<5)  /* float: D overflow */
                    106: #define        OVF_OVERFLOW    (1<<9)  /* overflow in conversion */
                    107: #define        OVF_UNDERFLOW   (1<<10) /* underflow in conversion */
                    108: 
                    109: Ovf    posovf();
                    110: Ovf    numclear();
                    111: Ovf    numshift();
                    112: Ovf    numaddv();
                    113: Ovf    numaddd();
                    114: Ovf    num1comp();
                    115: Ovf    numnegate();
                    116: /*
                    117:  *     Bit manipulations
                    118:  */
                    119: #define        ONES(n) ((1 << (n)) - 1)
                    120: /*
                    121:  *     Assertions
                    122:  */
                    123: #if 1
                    124: #define        assert(x, str) if (!(x)) panic("%s%s\n", "x", str)
                    125: #else
                    126: #define assert(x, str)
                    127: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.