Pristine Ack-5.5
[Ack-5.5.git] / util / int / global.h
1 /*
2         Defines and externs of general interest
3 */
4
5 /* $Id: global.h,v 2.4 1994/06/24 10:47:28 ceriel Exp $ */
6
7
8 /********* PRIVATE/static *********/
9
10 #define PRIVATE         static          /* or not */
11
12
13 /********* The internal data types ********/
14
15 #define UNSIGNED                        /* the normal case */
16 #ifdef  UNSIGNED
17
18 /* The EM pointer is an abstract type and requires explicit conversion*/
19 typedef unsigned long ptr;              /* pointer to EM address */
20 #define p2i(p)          (p)             /* convert pointer to index */
21 #define i2p(p)          (ptr)(p)        /* convert index to pointer */
22
23 #else   /* UNSIGNED */
24
25 typedef char *ptr;                      /* pointer to EM address */
26 #define p2i(p)          (long)(p)       /* convert pointer to index */
27 #define i2p(p)          (ptr)(p)        /* convert index to pointer */
28
29 #endif /* UNSIGNED */
30
31 /* The EM size is an integer type; a cast suffices */
32 typedef long size;
33
34
35 /********* Mathematical constants ********/
36
37 #define I_MAXU1         255L
38 #define I_MAXS1         127L
39 #define I_MINS1         (-127L-1L)
40
41 #define I_MAXU2         65535L
42 #define I_MAXS2         32767L
43 #define I_MINS2         (-32767L-1L)
44
45 #define I_MAXU4         4294967295L
46 #define I_MAXS4         2147483647L
47 #define I_MINS4         (-2147483647L-1L)
48
49 #define FL_MAXU1        255.0
50 #define FL_MAXS1        127.0
51 #define FL_MINS1        -128.0
52
53 #define FL_MAXU2        65535.0
54 #define FL_MAXS2        32767.0
55 #define FL_MINS2        -32768.0
56
57 #define FL_MAXU4        4294967295.0
58 #define FL_MAXS4        2147483647.0
59 #define FL_MINS4        -2147483648.0
60
61 #define BIT(n)          (1L<<(n))
62
63 #define SIGNBIT1        BIT(7)          /* Signbit of one byte signed int */
64 #define SIGNBIT2        BIT(15)         /* Signbit of two byte signed int */
65 #define SIGNBIT4        BIT(31)         /* Signbit of four byte signed int */
66
67 #define MASK1           0xFF            /* To mask one byte */
68 #define MASK2           0xFFFF          /* To mask two bytes */
69
70
71 /******** Machine constants ********/
72
73 #define MAX_OFF2        I_MAXS2
74 #define MAX_OFF4        I_MAXS4
75
76
77 /******** EM machine data sizes ********/
78
79 #define FRALIMIT        8L              /* Default limit */
80 #define LINSIZE         4L              /* Fixed size of LIN number */
81
82
83 /******** EM Machine capacity parameters ********/
84
85 extern size wsize;              /* wordsize */
86 extern size dwsize;             /* double wordsize */
87 extern size psize;              /* pointersize */
88 extern long i_minsw;            /* Min. value for signed integer of wsize */
89 extern long i_maxsw;            /* Max. value for signed integer of wsize */
90 extern unsigned long i_maxuw;   /* Max. value for unsigned integer of wsize */
91 extern long min_off;            /* Minimum offset */
92 extern long max_off;            /* Maximum offset */
93 extern ptr max_addr;            /* Maximum address */
94 extern size wsizem1;            /* wordsize - 1 */
95
96
97 /******** EM program parameters ********/
98
99 extern ptr ML;                  /* Memory Limit */
100 extern ptr HB;                  /* Heap Base */
101 extern ptr DB;                  /* Procedure Descriptor Base, end of text */
102 extern long NProc;              /* Number of Procedure Descriptors */
103 extern long PreIgnMask;         /* Preset Ignore Mask, from command line */
104
105
106 /******** EM machine registers ********/
107
108 #define UNDEFINED       (0)
109 #define DEFINED         (1)
110
111 extern long PI;                 /* Procedure Identifier of running proc */
112 extern ptr PC;                  /* Program Counter */
113
114 extern ptr HP;                  /* Heap Pointer */
115 extern ptr SP;                  /* Stack Pointer */
116 extern ptr LB;                  /* Local Base */
117 extern ptr AB;                  /* Actual Base */
118
119 extern long ES;                 /* program Exit Status */
120 extern int ES_def;              /* set iff Exit Status legal */
121
122 #define TR_ABORT        (1)
123 #define TR_HALT         (2)
124 #define TR_TRAP         (3)
125 extern int OnTrap;              /* what to do upon trap */
126 extern long IgnMask;            /* Ignore Mask for traps */
127 extern long TrapPI;             /* Procedure Identifier of trap routine */
128
129 extern char *FRA;               /* Function Return Area */
130 extern size FRALimit;           /* Function Return Area maximum Size */
131 extern size FRASize;            /* Function Return Area actual Size */
132 extern int FRA_def;             /* set iff Function Return Area legal */
133
134
135 /******** The EM Machine Memory ********/
136
137 extern char *text;              /* program text & procedure descriptors */
138
139 extern char *data;              /* global data & heap space */
140 extern ptr HL;                  /* Heap Limit */
141
142 extern char *stack;             /* stack space and local data */
143 extern char *stackML;           /* stack + ML, to speed up stack accesses */
144 extern ptr SL;                  /* Stack Limit */
145
146
147 /********* Global inline functions ********/
148
149 #define btol(c)         (long)((c) & MASK1)
150 #define btou(c)         (unsigned int)((c) & MASK1)
151 #define btos(c)         (c)
152
153 #define max(i,j)        (((i) > (j)) ? (i) : (j))
154 #define min(i,j)        (((i) < (j)) ? (i) : (j))
155
156