global.h 4.1 KB

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