interp.h
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:7k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. /*** 
  2. *interp.h - Data Dictionary for the BASIC 3.0 Interpreter
  3. *
  4. * Copyright <C> 1985, 1986, 1987 Microsoft Corporation
  5. *
  6. *******************************************************************************/
  7. /*                             
  8. /*  Standard Major Qualifiers  
  9. /*                             
  10. /* pX        - a pointer to an X
  11. /* szX        - pointer to 1st byte of a zero terminated string
  12. /* tX        - table; A contiguous list of X's
  13. /* iX        - 0 relative index of item within a table of X's
  14. /* oX        - 0 relative byte offset of an item from a known base
  15. /* fX        - flag; bit field to signal binary types
  16. /* bX        - byte
  17. /* cX        - count of occurrances of X
  18. /* cbX        - count of bytes in an X
  19. /* cwX        - count of words in an X
  20. /* mpXY        - An array which maps X's to Y's
  21. /* opX        - 16-bit value of BASIC Virtual Machine Opcode X
  22. /* opStX       - value of opcode for statement keyword X. i.e. opStResume
  23. /* opFnX       - value of opcode for intrinsic keyword X. i.e. opFnDate
  24. /* exX        - Function which emulates BASIC Virtual Machine Opcode opX
  25. /*                             
  26. /*  Standard Minor Qualifiers  
  27. /*                             
  28. /* xFirst      - first element of a list or sequence
  29. /* xNext       - next element of a list or sequence
  30. /* xLast       - last element of a list or sequence
  31. /* xSrc        - Source
  32. /* xDst        - Destination
  33. /* xMax        - Strict upper limit, i.e. char tbXXX[XXXMAX]
  34. /* xCur        - "Current value of" as opposed to xMax or xFirst
  35. /* xT        - Temporary
  36. /*
  37. /* In general, when a variable is of a type defined by a typedef the first
  38. /* characters of the variable name are the type name.  For example, sdX is
  39. /* an occurrence of a string descriptor.
  40. /*
  41. /*
  42. ***************************************************************************/
  43. #define INTERP_H -1  /* remember that interp.h has been included */
  44. /* ALL DECLARATIONS and other entities not allowed in DEF files must be under */
  45. /* NO_DECL (#ifndef) switch so DEF files may use version.h and the C       */
  46. /* preprocessor        */
  47. #ifndef NO_DECL
  48. #define TRUE 1
  49. #define FALSE 0
  50. #ifndef NULL  /* to preclude duplicate definition warnings */
  51. #define NULL 0  /* System NULL for pointers */
  52. #endif
  53. #define UNDEFINED (ushort)65535  /* System NULL for offsets */
  54. #define MAX_LN (ushort)65529     /* maximum legal line number */
  55. #define CB_IDNAM_MAX 40          /* [1] max number of bytes in an id. name */
  56. /* Variable/Literal Explicit Type Enumerations (predefined oTyp values) */
  57. /* be sure to add all new types to the global number definitions */
  58. #define  ET_IMP      0     /* Implicitly typed variable */
  59. #define  ET_I2      1     /* 16 bit signed integer */
  60. #define  ET_I4      2     /* 32 bit signed integer */
  61. #define  ET_R4      3     /* 32 bit real */
  62. #define  ET_R8      4     /* 64 bit real */
  63. #define  ET_MaxNum   ET_R8     /* [6] */
  64. #define  ET_SD      (ET_MaxNum+1)  /* [6] String descriptor */
  65. #define  ET_FS      (ET_SD+1)     /* [6] */
  66. #define  ET_MaxStr   ET_FS     /* [10][6] */
  67. #define  ET_MAX      ET_MaxStr     /* [10] */
  68. /* WARNING: be sure to make equivalent types in interp.h */
  69. /* global et type numbers.  all new types should be appended to the end.*/
  70. /* added for [13] */
  71. /* the next 5 types MUST be in the same order as the et types in QB 4.0 */
  72. #define     GLBL_IMP     0 /* Implicitly typed variable */
  73. #define     GLBL_I2     1 /* 16 bit signed integer */
  74. #define     GLBL_I4     2 /* 32 bit signed integer */
  75. #define     GLBL_R4     3 /* 32 bit real */
  76. #define     GLBL_R8     4 /* 64 bit real */
  77. #define     GLBL_SD     5 /* String descriptor */
  78. #define     GLBL_CY     6
  79. #define     GLBL_TX     7 /* Text descriptor */
  80. #define     GLBL_FS     8 /* Fixed length string */
  81. #define     GLBL_FT     9 /* Fixed length text */
  82. #define     GLBL_FIELD     10
  83. #define     GLBL_FORM     11
  84. #define     GLBL_MENU     12
  85. #define     GLBL_ET_MAX     12 /* number of global et types defined */
  86. #define STARTOTX 0  /* [11] */
  87. #define     opLitI2Max     10 // Maximum literal with own executor
  88. /*************************************************************************
  89. * C specific definitions
  90. *************************************************************************/
  91. #define REG1 register /* The 8086 has only 2 register variables */
  92. #define REG2 register
  93. #define REG3
  94. #define REG4
  95. #define REG5
  96. #define REG6
  97. #define REG7
  98. #define REG8
  99. #define REG9
  100. #define VOID void  /* EB_API */ /* For functions that return no value */
  101. #define NEAR near  /* EB_API */
  102. #define FAR far   /* EB_API */
  103. #define PLM pascal  /* EB_API */
  104. #define CDECL cdecl  /* EB_API */
  105. typedef unsigned char uchar;  /* EB_API */
  106. typedef unsigned short ushort;  /* EB_API */
  107. typedef unsigned long ulong;  /* EB_API */
  108. typedef ushort boolean;   /* EB_API */ /* -1 = TRUE, 0=FALSE  */
  109. typedef ushort word;  /* EB_API */
  110. typedef ulong  dword;  /* EB_API */
  111. typedef uchar  byte;  /* EB_API */
  112. typedef uchar  bool;
  113. /* String Descriptor definition */
  114. typedef struct sd {
  115. ushort cb; /* Count of data bytes in string */
  116. char * pb; /* Address of string data  */
  117. } sd;
  118. /* This structure is handy for computing the size of an odd-size structure
  119. regardless of whether -Zp is specified in the compile line or not */
  120. typedef struct oneChar {
  121. char singleChar;
  122. } oneChar;
  123. /*************************************************************************
  124. * Global Variables
  125. *************************************************************************/
  126. /* Only one module has DEFINE_VARIABLES set, so the variables
  127. are not external in only this module. */
  128. #if DEFINE_VARIABLES
  129. #define EXTERNAL
  130. #define INIT(x) = x
  131. #else
  132. #define EXTERNAL extern
  133. #define INIT(x)
  134. #endif
  135. /*************************************************************************
  136. * DEBUG Aids 
  137. *************************************************************************/
  138. /* RELEASE versions can't have DEBUG code. */
  139. #if !DEBUG_H
  140. #include "debug.h"
  141. #endif
  142. /*************************************************************************
  143. * MATH for C source
  144. *************************************************************************/
  145. /* The type of the floating point variables depends on the math pack.  When 
  146. using other than the C math pack, one cannot use the "double" or "float" 
  147. types because their definition alone causes C-math pack invocation */
  148. typedef struct DOUBLE {ulong high; ulong low;} DOUBLE;
  149. typedef struct FLOAT {ulong value;} FLOAT;
  150. #define double ERROR
  151. #define float ERROR
  152. #endif