M3DL.def 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. DEFINITION MODULE M3DL; (*NW 2.6.84 / 2.11.85*)
  2. FROM SYSTEM IMPORT ADDRESS;
  3. CONST WordSize = 16;
  4. nilval = 177777B;
  5. MaxCodeLength = 8;
  6. TYPE
  7. ObjPtr = POINTER TO Object;
  8. StrPtr = POINTER TO Structure;
  9. ParPtr = POINTER TO Parameter;
  10. PDPtr = POINTER TO PDesc;
  11. KeyPtr = POINTER TO Key;
  12. ObjClass = (Header, Const, Typ, Var, Field, Proc, Code, Module, Temp);
  13. StrForm = (Undef, Bool, Char, Card, Int, Double, Real, String,
  14. Enum, Range, Pointer, Set, Array, Record, ProcTyp, Opaque);
  15. ConstValue =
  16. RECORD
  17. CASE : StrForm OF
  18. Bool: B: BOOLEAN |
  19. Char: Ch: CHAR |
  20. Int: I: INTEGER |
  21. Card, Enum: C: CARDINAL; prev: ObjPtr |
  22. Set: S: BITSET |
  23. Double: D: LONGINT |
  24. Real: R: REAL |
  25. String: D0, D1, D2, D3: CARDINAL
  26. END
  27. END;
  28. Object =
  29. RECORD
  30. name: CARDINAL; (*index to name buffer*)
  31. typ: StrPtr;
  32. left, right, next: ObjPtr;
  33. exported: BOOLEAN;
  34. CASE class: ObjClass OF
  35. Header: kind: ObjClass; (*Proc, Module or Typ*)
  36. last, heap: ObjPtr; withadr: INTEGER |
  37. Const: conval: ConstValue |
  38. Typ: mod: ObjPtr |
  39. Var: param: BITSET;
  40. vmod, vlev: CARDINAL; vadr: INTEGER |
  41. Field: offset: INTEGER |
  42. Proc: pd: PDPtr;
  43. firstParam: ParPtr;
  44. firstLocal: ObjPtr;
  45. pmod: CARDINAL |
  46. Code: cd: PDPtr;
  47. firstArg: ParPtr;
  48. cnum, length: CARDINAL |
  49. Module: key: KeyPtr;
  50. firstObj, root: ObjPtr;
  51. modno: CARDINAL |
  52. Temp: baseref: CARDINAL
  53. END
  54. END;
  55. PDesc = RECORD
  56. CASE : BOOLEAN OF
  57. TRUE: num, lev: CARDINAL; adr, size: INTEGER |
  58. FALSE: cod: ARRAY [0..MaxCodeLength-1] OF CHAR
  59. END
  60. END;
  61. Structure =
  62. RECORD
  63. strobj: ObjPtr; (*object (type) naming structure*)
  64. size: INTEGER;
  65. ref: CARDINAL;
  66. CASE form: StrForm OF
  67. Undef, Bool, Char, Int, Card, Double, Real, String: |
  68. Enum: ConstLink: ObjPtr; NofConst: CARDINAL |
  69. Range: RBaseTyp: StrPtr;
  70. min, max: INTEGER |
  71. Pointer: PBaseTyp: StrPtr;
  72. BaseId: CARDINAL | (*to handle forward refs*)
  73. Set: SBaseTyp: StrPtr |
  74. Array: ElemTyp, IndexTyp: StrPtr;
  75. dyn: BOOLEAN |
  76. Record: firstFld: ObjPtr |
  77. ProcTyp: firstPar: ParPtr;
  78. resTyp: StrPtr |
  79. Opaque:
  80. END
  81. END;
  82. Parameter = RECORD name: CARDINAL; varpar: BOOLEAN;
  83. typ: StrPtr; next: ParPtr
  84. END;
  85. Key = RECORD k0, k1, k2: CARDINAL
  86. END;
  87. VAR mainmod, sysmod: ObjPtr;
  88. undftyp, booltyp, chartyp, inttyp, cardtyp, bitstyp, dbltyp, realtyp,
  89. proctyp, notyp, stringtyp, addrtyp, wordtyp: StrPtr;
  90. PROCEDURE ALLOCATE(VAR a: ADDRESS; n: CARDINAL);
  91. PROCEDURE Available(): CARDINAL;
  92. PROCEDURE ResetHeap(a: ADDRESS);
  93. END M3DL.