1: /*
   2:  * Copyright (c) 1982 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  *
   6:  *	@(#)asnumber.h	5.1 (Berkeley) 4/30/85
   7:  */
   8: 
   9: union Ib_int{       /* byte */
  10:     u_char  Ib_uchar[1];
  11:     char    Ichar;
  12: };
  13: union Iw_int{       /* word */
  14:     u_char  Iw_uchar[2];
  15:     u_short Iw_ushort[1];
  16:     short   Iw_short;
  17: };
  18: union Il_int{       /* long word */
  19:     u_char  Il_uchar[4];
  20:     u_short Il_ushort[2];
  21:     u_int   Il_ulong[1];
  22:     int Il_long;
  23: };
  24: 
  25: union Iq_int{       /* quad word */
  26:     u_char  Iq_uchar[8];
  27:     u_short Iq_ushort[4];
  28:     u_int   Iq_ulong[2];
  29: };
  30: 
  31: union Io_int{       /* octal word */
  32:     u_char  Io_uchar[16];
  33:     u_short Io_ushort[8];
  34:     u_int   Io_ulong[4];
  35:     union   Iq_int  Io_quad[2];
  36: };
  37: 
  38: union Ff_float{
  39:     u_char  Ff_uchar[4];
  40:     u_short Ff_ushort[2];
  41:     u_int   Ff_ulong[1];
  42:     float   Ff_value;
  43: };
  44: 
  45: union Fd_float{
  46:     u_char  Fd_uchar[8];
  47:     u_short Fd_ushort[4];
  48:     u_int   Fd_ulong[2];
  49:     double  Fd_value;
  50: };
  51: 
  52: union Fg_float{
  53:     u_char  Fg_uchar[8];
  54:     u_short Fg_ushort[4];
  55:     u_int   Fg_ulong[2];
  56: };
  57: 
  58: union Fh_float{
  59:     u_char  Fh_uchar[16];
  60:     u_short Fh_ushort[8];
  61:     u_int   Fh_ulong[4];
  62: };
  63: 
  64: struct  as_number{
  65:     union {
  66:         union Ib_int    numIb_int;
  67:         union Iw_int    numIw_int;
  68:         union Il_int    numIl_int;
  69:         union Iq_int    numIq_int;
  70:         union Io_int    numIo_int;
  71:         union Ff_float  numFf_float;
  72:         union Fd_float  numFd_float;
  73:         union Fg_float  numFg_float;
  74:         union Fh_float  numFh_float;
  75:     }num_num;
  76:     char    num_tag;        /* the key field: TYPB..TYPUNPACKED */
  77:     char    num_sign;       /* when unpacked, the sign */
  78:     short   num_exponent;       /* when unpacked, the unexcessed exp */
  79: };
  80: typedef struct as_number    Bignum;
  81: 
  82: extern  Bignum  Znumber;        /* one all zero'ed out */
  83: 
  84: #define num_uchar   num_num.numIq_int.Iq_uchar
  85: #define num_uint    num_num.numIq_int.Iq_ulong
  86: #define num_ulong   num_num.numIq_int.Iq_ulong
  87: #define num_ushort  num_num.numIq_int.Iq_ushort
  88: /*
  89:  *	The following definitions must all be consistent.
  90:  *	They define the granularity of working on longs, quad and octal
  91:  *	words. Currently, the granularity is as large as it can be: 32 bits
  92:  *	in a chunk.
  93:  */
  94: #define CH_N        4       /* number of pieces */
  95: #define CH_BITS     32      /* number of bits per piece */
  96: #define CH_FIELD(x) ((x).num_num.numIo_int.Io_ulong)
  97: typedef u_int       *chptr;     /* basic data type */
  98: #define SIGNBIT     0x80000000
  99: 
 100: #define HOC     (CH_N - 1)  /* high order chunk */
 101: #if 0
 102: #define MAXINT_1    ((unsigned)(1<<(CH_BITS - 1)))
 103: #define MAXINT_10   ((unsigned)((MAXINT_1/(unsigned)10)))
 104: #define MAXINT_5    ((unsigned)((MAXINT_1/(unsigned)5)))
 105: #else not 0
 106: /*
 107:  *	These values were computed using dc, so are exact.
 108:  *	Only MAXINT_10 and MAXINT_5 are used in the programs.
 109:  */
 110: #define MAXINT_1    2147483648
 111: #define MAXINT_10   214748364
 112: #define MAXINT_5    429496729
 113: #endif not 0
 114: 
 115: Bignum as_atoi();       /* converts string to integer */
 116: Bignum as_atof();       /* converts string to float */
 117: Bignum bigatof();       /* converts string to float */
 118: Bignum floatconvert();  /* converts amongst float #s */
 119: Bignum intconvert();        /* converts amongst float #s */
 120: Bignum bignumconvert(); /* converts amongst float #s */
 121: Bignum bignumpack();        /* converts UNPACKED bignum to bignum */
 122: Bignum bignumunpack();  /* converts bignum to UNPACKED bignum */
 123: 
 124: /*
 125:  *	Definitions for overflows.
 126:  */
 127: typedef u_int   Ovf;
 128: 
 129: #define OVF_ADDV    (1<<0)  /* integer: adding two vectors overflowed */
 130: #define OVF_LSHIFT  (1<<1)  /* integer: left shifting a vector lost bits */
 131: #define OVF_POSOVF  (1<<2)  /* integer: positive number overflowed */
 132: #define OVF_MAXINT  (1<<3)  /* integer: the number was the maxint + 1*/
 133: #define OVF_F       (1<<4)  /* float: F overflow */
 134: #define OVF_D       (1<<5)  /* float: D overflow */
 135: #define OVF_G       (1<<6)  /* float: G overflow */
 136: #define OVF_H       (1<<7)  /* float: H overflow */
 137: #define OVF_OVERFLOW    (1<<9)  /* overflow in conversion */
 138: #define OVF_UNDERFLOW   (1<<10) /* underflow in conversion */
 139: 
 140: Ovf posovf();
 141: Ovf numclear();
 142: Ovf numshift();
 143: Ovf numaddv();
 144: Ovf numaddd();
 145: Ovf num1comp();
 146: Ovf numnegate();
 147: 
 148: /*
 149:  *	Definitions to unpack big numbers numbers into
 150:  *	a 128 bit fraction and 16 bit excess-free exponent,
 151:  *	and an 8 copy bits for the sign.
 152:  *
 153:  *	The fraction is represented as a normalized binary number,
 154:  *	128 bits long, with the binary point between bits 127 and the
 155:  *	hypothetical 128'th bit.  This hypothetical 128'th bit
 156:  *	is always assumed to be one.
 157:  */
 158: /*
 159:  *	A map entry is NOTAKE if the corresponding byte is
 160:  *	not to be taken
 161:  *
 162:  *	The maps are for going from packed to unpacked format (b_up)
 163:  *	and from unpacked to packed format (b_p)
 164:  *	for the mantissa (b_upmmap) and for the exponent(b_upemap)
 165:  *
 166:  *	byte #i in the packed number goes to byte #b_upmmap[i] in the unpacked
 167:  */
 168: #define NOTAKE  -1
 169: struct ty_bigdesc{
 170:     char    b_upmmap[16];   /* byte x of float goes to up_mmap[x] in mant */
 171:     char    b_pmmap[16];    /* inverse of upmmap */
 172:     char    b_upemap[2];    /* byte x of float goes to up_emap[x] in exp */
 173:     char    b_pemap[2]; /* inverse of upemap */
 174:     char    b_mlshift;  /* left shift quantity to justify to left */
 175:     char    b_ershift;  /* right shift quantity to r justify exponent */
 176:     short   b_msigbits; /* # sig bits in mantissa */
 177:     char    b_esigbits; /* # sig bits in exponent */
 178:     short   b_eexcess;  /* exponent excess */
 179: };
 180: extern struct ty_bigdesc ty_bigdesc[];
 181: /*
 182:  *	Bit manipulations
 183:  */
 184: #define ONES(n) ((1 << (n)) - 1)
 185: /*
 186:  *	Assertions
 187:  */
 188: #if 1
 189: #define assert(x, str) if (!(x)) panic("%s%s\n", "x", str)
 190: #else
 191: #define assert(x, str)
 192: #endif

Defined struct's

as_number defined in line 64; used 2 times
  • in line 80(2)
ty_bigdesc defined in line 169; used 12 times

Defined union's

Fd_float defined in line 45; used 2 times
  • in line 72(2)
Ff_float defined in line 38; used 2 times
  • in line 71(2)
Fg_float defined in line 52; used 2 times
  • in line 73(2)
Fh_float defined in line 58; used 2 times
  • in line 74(2)
Ib_int defined in line 9; used 2 times
  • in line 66(2)
Il_int defined in line 18; used 2 times
  • in line 68(2)
Io_int defined in line 31; used 2 times
  • in line 70(2)
Iq_int defined in line 25; used 4 times
  • in line 35(2), 69(2)
Iw_int defined in line 13; used 2 times
  • in line 67(2)

Defined typedef's

Bignum defined in line 80; used 46 times

Defined macros

CH_BITS defined in line 95; used 8 times
CH_FIELD defined in line 96; used 18 times
CH_N defined in line 94; used 10 times
HOC defined in line 100; used 17 times
MAXINT_1 defined in line 110; used 2 times
MAXINT_10 defined in line 111; used 2 times
MAXINT_5 defined in line 112; used 1 times
NOTAKE defined in line 168; used 3 times
ONES defined in line 184; used 18 times
OVF_ADDV defined in line 129; used 2 times
OVF_D defined in line 134; used 1 times
OVF_F defined in line 133; used 1 times
OVF_G defined in line 135; used 1 times
OVF_H defined in line 136; used 1 times
OVF_LSHIFT defined in line 130; used 3 times
OVF_MAXINT defined in line 132; used 4 times
OVF_OVERFLOW defined in line 137; used 3 times
OVF_POSOVF defined in line 131; used 3 times
OVF_UNDERFLOW defined in line 138; used 3 times
SIGNBIT defined in line 98; used 8 times
assert defined in line 191; used 14 times
num_uchar defined in line 84; used 5 times
num_uint defined in line 85; used 6 times
num_ulong defined in line 86; never used
num_ushort defined in line 87; used 3 times

Usage of this include

asnumber.h used 1 times
Last modified: 1985-04-30
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1539
Valid CSS Valid XHTML 1.0 Strict