Bladeren bron

Removed all compilation warnings, fixed bug in Files; updated VOC bootstrap

Arthur Yefimov 4 jaren geleden
bovenliggende
commit
bc78c00e63
100 gewijzigde bestanden met toevoegingen van 2343 en 316 verwijderingen
  1. 2 2
      data/bin/voc/bootstrap/unix-44/Compiler.c
  2. 2 2
      data/bin/voc/bootstrap/unix-44/Configuration.c
  3. 1 1
      data/bin/voc/bootstrap/unix-44/Configuration.h
  4. 197 0
      data/bin/voc/bootstrap/unix-44/Errors.Txt
  5. 4 2
      data/bin/voc/bootstrap/unix-44/Files.c
  6. 1 1
      data/bin/voc/bootstrap/unix-44/Files.h
  7. 68 70
      data/bin/voc/bootstrap/unix-44/Heap.c
  8. 1 1
      data/bin/voc/bootstrap/unix-44/Heap.h
  9. 1 1
      data/bin/voc/bootstrap/unix-44/Modules.c
  10. 1 1
      data/bin/voc/bootstrap/unix-44/Modules.h
  11. 11 1
      data/bin/voc/bootstrap/unix-44/OPB.c
  12. 1 1
      data/bin/voc/bootstrap/unix-44/OPB.h
  13. 1 1
      data/bin/voc/bootstrap/unix-44/OPC.c
  14. 1 1
      data/bin/voc/bootstrap/unix-44/OPC.h
  15. 7 3
      data/bin/voc/bootstrap/unix-44/OPM.c
  16. 2 2
      data/bin/voc/bootstrap/unix-44/OPM.h
  17. 1 1
      data/bin/voc/bootstrap/unix-44/OPP.c
  18. 1 1
      data/bin/voc/bootstrap/unix-44/OPP.h
  19. 1 1
      data/bin/voc/bootstrap/unix-44/OPS.c
  20. 1 1
      data/bin/voc/bootstrap/unix-44/OPS.h
  21. 2 1
      data/bin/voc/bootstrap/unix-44/OPT.c
  22. 1 1
      data/bin/voc/bootstrap/unix-44/OPT.h
  23. 1 1
      data/bin/voc/bootstrap/unix-44/OPV.c
  24. 1 1
      data/bin/voc/bootstrap/unix-44/OPV.h
  25. 136 1
      data/bin/voc/bootstrap/unix-44/Out.c
  26. 4 1
      data/bin/voc/bootstrap/unix-44/Out.h
  27. 1 1
      data/bin/voc/bootstrap/unix-44/Platform.c
  28. 1 1
      data/bin/voc/bootstrap/unix-44/Platform.h
  29. 1 1
      data/bin/voc/bootstrap/unix-44/Reals.c
  30. 1 1
      data/bin/voc/bootstrap/unix-44/Reals.h
  31. 218 0
      data/bin/voc/bootstrap/unix-44/SYSTEM.c
  32. 330 0
      data/bin/voc/bootstrap/unix-44/SYSTEM.h
  33. 1 1
      data/bin/voc/bootstrap/unix-44/Strings.c
  34. 1 1
      data/bin/voc/bootstrap/unix-44/Strings.h
  35. 1 1
      data/bin/voc/bootstrap/unix-44/Texts.c
  36. 1 1
      data/bin/voc/bootstrap/unix-44/Texts.h
  37. 1 1
      data/bin/voc/bootstrap/unix-44/VT100.c
  38. 1 1
      data/bin/voc/bootstrap/unix-44/VT100.h
  39. 10 0
      data/bin/voc/bootstrap/unix-44/WindowsWrapper.h
  40. 1 1
      data/bin/voc/bootstrap/unix-44/extTools.c
  41. 1 1
      data/bin/voc/bootstrap/unix-44/extTools.h
  42. 2 2
      data/bin/voc/bootstrap/unix-48/Compiler.c
  43. 2 2
      data/bin/voc/bootstrap/unix-48/Configuration.c
  44. 1 1
      data/bin/voc/bootstrap/unix-48/Configuration.h
  45. 197 0
      data/bin/voc/bootstrap/unix-48/Errors.Txt
  46. 4 2
      data/bin/voc/bootstrap/unix-48/Files.c
  47. 1 1
      data/bin/voc/bootstrap/unix-48/Files.h
  48. 68 70
      data/bin/voc/bootstrap/unix-48/Heap.c
  49. 1 1
      data/bin/voc/bootstrap/unix-48/Heap.h
  50. 1 1
      data/bin/voc/bootstrap/unix-48/Modules.c
  51. 1 1
      data/bin/voc/bootstrap/unix-48/Modules.h
  52. 11 1
      data/bin/voc/bootstrap/unix-48/OPB.c
  53. 1 1
      data/bin/voc/bootstrap/unix-48/OPB.h
  54. 1 1
      data/bin/voc/bootstrap/unix-48/OPC.c
  55. 1 1
      data/bin/voc/bootstrap/unix-48/OPC.h
  56. 7 3
      data/bin/voc/bootstrap/unix-48/OPM.c
  57. 2 2
      data/bin/voc/bootstrap/unix-48/OPM.h
  58. 1 1
      data/bin/voc/bootstrap/unix-48/OPP.c
  59. 1 1
      data/bin/voc/bootstrap/unix-48/OPP.h
  60. 1 1
      data/bin/voc/bootstrap/unix-48/OPS.c
  61. 1 1
      data/bin/voc/bootstrap/unix-48/OPS.h
  62. 2 1
      data/bin/voc/bootstrap/unix-48/OPT.c
  63. 1 1
      data/bin/voc/bootstrap/unix-48/OPT.h
  64. 1 1
      data/bin/voc/bootstrap/unix-48/OPV.c
  65. 1 1
      data/bin/voc/bootstrap/unix-48/OPV.h
  66. 136 1
      data/bin/voc/bootstrap/unix-48/Out.c
  67. 4 1
      data/bin/voc/bootstrap/unix-48/Out.h
  68. 1 1
      data/bin/voc/bootstrap/unix-48/Platform.c
  69. 1 1
      data/bin/voc/bootstrap/unix-48/Platform.h
  70. 1 1
      data/bin/voc/bootstrap/unix-48/Reals.c
  71. 1 1
      data/bin/voc/bootstrap/unix-48/Reals.h
  72. 218 0
      data/bin/voc/bootstrap/unix-48/SYSTEM.c
  73. 330 0
      data/bin/voc/bootstrap/unix-48/SYSTEM.h
  74. 1 1
      data/bin/voc/bootstrap/unix-48/Strings.c
  75. 1 1
      data/bin/voc/bootstrap/unix-48/Strings.h
  76. 1 1
      data/bin/voc/bootstrap/unix-48/Texts.c
  77. 1 1
      data/bin/voc/bootstrap/unix-48/Texts.h
  78. 1 1
      data/bin/voc/bootstrap/unix-48/VT100.c
  79. 1 1
      data/bin/voc/bootstrap/unix-48/VT100.h
  80. 10 0
      data/bin/voc/bootstrap/unix-48/WindowsWrapper.h
  81. 1 1
      data/bin/voc/bootstrap/unix-48/extTools.c
  82. 1 1
      data/bin/voc/bootstrap/unix-48/extTools.h
  83. 2 2
      data/bin/voc/bootstrap/unix-88/Compiler.c
  84. 2 2
      data/bin/voc/bootstrap/unix-88/Configuration.c
  85. 1 1
      data/bin/voc/bootstrap/unix-88/Configuration.h
  86. 197 0
      data/bin/voc/bootstrap/unix-88/Errors.Txt
  87. 4 2
      data/bin/voc/bootstrap/unix-88/Files.c
  88. 1 1
      data/bin/voc/bootstrap/unix-88/Files.h
  89. 68 70
      data/bin/voc/bootstrap/unix-88/Heap.c
  90. 1 1
      data/bin/voc/bootstrap/unix-88/Heap.h
  91. 1 1
      data/bin/voc/bootstrap/unix-88/Modules.c
  92. 1 1
      data/bin/voc/bootstrap/unix-88/Modules.h
  93. 11 1
      data/bin/voc/bootstrap/unix-88/OPB.c
  94. 1 1
      data/bin/voc/bootstrap/unix-88/OPB.h
  95. 1 1
      data/bin/voc/bootstrap/unix-88/OPC.c
  96. 1 1
      data/bin/voc/bootstrap/unix-88/OPC.h
  97. 7 3
      data/bin/voc/bootstrap/unix-88/OPM.c
  98. 2 2
      data/bin/voc/bootstrap/unix-88/OPM.h
  99. 1 1
      data/bin/voc/bootstrap/unix-88/OPP.c
  100. 1 1
      data/bin/voc/bootstrap/unix-88/OPP.h

+ 2 - 2
data/bin/voc/bootstrap/unix-44/Compiler.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspamS */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspamS */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -89,7 +89,7 @@ static void Compiler_PropagateElementaryTypeSizes (void)
 	OPT_sintobj->typ = OPT_sinttyp;
 	OPT_intobj->typ = OPT_inttyp;
 	OPT_lintobj->typ = OPT_linttyp;
-	switch (OPM_LongintSize) {
+	switch (OPM_SetSize) {
 		case 4: 
 			OPT_settyp = OPT_set32typ;
 			break;

+ 2 - 2
data/bin/voc/bootstrap/unix-44/Configuration.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -19,6 +19,6 @@ export void *Configuration__init(void)
 	__DEFMOD;
 	__REGMOD("Configuration", 0);
 /* BEGIN */
-	__MOVE("2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8.", Configuration_versionLong, 76);
+	__MOVE("2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8.", Configuration_versionLong, 76);
 	__ENDMOD;
 }

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Configuration.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Configuration__h
 #define Configuration__h

+ 197 - 0
data/bin/voc/bootstrap/unix-44/Errors.Txt

@@ -0,0 +1,197 @@
+The first line of this file is ignored.
+Any line not starting /^ *[0-9]/ is ignored.
+There should be only one space between the number and the message text.
+
+Compiler error messages
+  0 undeclared identifier
+  1 multiply defined identifier
+  2 illegal character in number
+  3 illegal character in string
+  4 identifier does not match procedure name
+  5 comment not closed
+
+  9 '=' expected
+
+ 12 type definition starts with incorrect symbol
+ 13 factor starts with incorrect symbol
+ 14 statement starts with incorrect symbol
+ 15 declaration followed by incorrect symbol
+ 16 MODULE expected
+
+ 18 '.' missing
+ 19 ',' missing
+ 20 ':' missing
+
+ 22 ')' missing
+ 23 ']' missing
+ 24 '}' missing
+ 25 OF missing
+ 26 THEN missing
+ 27 DO missing
+ 28 TO missing
+
+ 30 '(' missing
+
+ 34 ':=' missing
+ 35 ',' or OF expected
+
+ 38 identifier expected
+ 39 ';' missing
+
+ 41 END missing
+
+ 44 UNTIL missing
+
+ 46 EXIT not within loop statement
+ 47 illegally marked identifier
+
+ 50 expression should be constant
+ 51 constant not an integer
+ 52 identifier does not denote a type
+ 53 identifier does not denote a record type
+ 54 result type of procedure is not a basic type
+ 55 procedure call of a function
+ 56 assignment to non-variable
+ 57 pointer not bound to record or array type
+ 58 recursive type definition
+ 59 illegal open array parameter
+ 60 wrong type of case label
+ 61 inadmissible type of case label
+ 62 case label defined more than once
+ 63 illegal value of constant
+ 64 more actual than formal parameters
+ 65 fewer actual than formal parameters
+ 66 element types of actual array and formal open array differ
+ 67 actual parameter corresponding to open array is not an array
+ 68 control variable must be integer
+ 69 parameter must be an integer constant
+ 70 pointer or VAR record required as formal receiver
+ 71 pointer expected as actual receiver
+ 72 procedure must be bound to a record of the same scope
+ 73 procedure must have level 0
+ 74 procedure unknown in base type
+ 75 invalid call of base procedure
+ 76 this variable (field) is read only
+ 77 object is not a record
+ 78 dereferenced object is not a variable
+ 79 indexed object is not a variable
+ 80 index expression is not an integer
+ 81 index out of specified bounds
+ 82 indexed variable is not an array
+ 83 undefined record field
+ 84 dereferenced variable is not a pointer
+ 85 guard or test type is not an extension of variable type
+ 86 guard or testtype is not a pointer
+ 87 guarded or tested variable is neither a pointer nor a VAR-parameter record
+ 88 open array not allowed as variable, record field or array element
+
+ 92 operand of IN not an integer, or not a set
+ 93 set element type is not an integer
+ 94 operand of & is not of type BOOLEAN
+ 95 operand of OR is not of type BOOLEAN
+ 96 operand not applicable to (unary) +
+ 97 operand not applicable to (unary) -
+ 98 operand of ~ is not of type BOOLEAN
+ 99 ASSERT fault
+100 incompatible operands of dyadic operator
+101 operand type inapplicable to *
+102 operand type inapplicable to /
+103 operand type inapplicable to DIV
+104 operand type inapplicable to MOD
+105 operand type inapplicable to +
+106 operand type inapplicable to -
+107 operand type inapplicable to = or #
+108 operand type inapplicable to relation
+109 overriding method must be exported
+110 operand is not a type
+111 operand inapplicable to (this) function
+112 operand is not a variable
+113 incompatible assignment
+114 string too long to be assigned
+115 parameter doesn't match
+116 number of parameters doesn't match
+117 result type doesn't match
+118 export mark doesn't match with forward declaration
+119 redefinition textually precedes procedure bound to base type
+120 type of expression following IF, WHILE, UNTIL or ASSERT is not BOOLEAN
+121 called object is not a procedure (or is an interrupt procedure)
+122 actual VAR-parameter is not a variable
+123 type of actual parameter is not identical with that of formal VAR-parameter
+124 type of result expression differs from that of procedure
+125 type of case expression is neither INTEGER nor CHAR
+126 this expression cannot be a type or a procedure
+127 illegal use of object
+128 unsatisfied forward reference
+129 unsatisfied forward procedure
+130 WITH clause does not specify a variable
+131 LEN not applied to array
+132 dimension in LEN too large or negative
+135 SYSTEM not imported
+150 key inconsistency of imported module
+151 incorrect symbol file
+152 symbol file of imported module not found
+153 object or symbol file not opened (disk full?)
+154 recursive import not allowed
+155 generation of new symbol file not allowed
+156 parameter file not found
+157 syntax error in parameter file
+
+Limitations of implementation
+200 not yet implemented
+201 lower bound of set range greater than higher bound
+202 set element greater than MAX(SET) or less than 0
+203 number too large
+204 product too large
+205 division by zero
+206 sum too large
+207 difference too large
+208 overflow in arithmetic shift
+209 case range too large
+213 too many cases in case statement
+218 illegal value of parameter (0 <= p < 256)
+219 machine registers cannot be accessed
+220 illegal value of parameter
+221 too many pointers in a record
+222 too many global pointers
+223 too many record types
+224 too many pointer types
+225 address of pointer variable too large (move forward in text)
+226 too many exported procedures
+227 too many imported modules
+228 too many exported structures
+229 too many nested records for import
+230 too many constants (strings) in module
+231 too many link table entries (external procedures)
+232 too many commands in module
+233 record extension hierarchy too high
+234 export of recursive type not allowed
+240 identifier too long
+241 string too long
+242 address overflow
+244 cyclic type definition not allowed
+245 guarded pointer variable may be manipulated by non-local operations; use auxiliary pointer variable
+
+Compiler Warnings
+301 implicit type cast
+306 inappropriate symbol file ignored
+307 no ELSE symbol after CASE statement sequence may lead to trap
+308 SYSTEM.VAL result includes memory past end of source variable; use SYSTEM.GET
+309 you should name this parameter type, or else no actual parameter will match
+310 redefining standard predefined type
+
+Run-time Error Messages
+ -1 assertion failed, cf. SYSTEM_assert
+ -2 invalid array index
+ -3 function procedure without RETURN statement
+ -4 invalid case in CASE statement
+ -5 type guard failed
+ -6 implicit type guard in record assignment failed
+ -7 invalid case in WITH statement
+ -8 value out of range
+ -9 (delayed) interrupt
+-10 NIL access
+-11 alignment error
+-12 zero divide
+-13 arithmetic overflow/underflow
+-14 invalid function argument
+-15 internal error

+ 4 - 2
data/bin/voc/bootstrap/unix-44/Files.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -966,7 +966,9 @@ void Files_WriteSet (Files_Rider *R, ADDRESS *R__typ, UINT32 x)
 {
 	CHAR b[4];
 	INT32 i;
-	i = (INT32)x;
+	UINT64 y;
+	y = x;
+	i = __VAL(INT32, y);
 	b[0] = __CHR(i);
 	b[1] = __CHR(__ASHR(i, 8));
 	b[2] = __CHR(__ASHR(i, 16));

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Files.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Files__h
 #define Files__h

+ 68 - 70
data/bin/voc/bootstrap/unix-44/Heap.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -665,79 +665,77 @@ void Heap_GC (BOOLEAN markStack)
 	Heap_Module m;
 	INT32 i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23;
 	INT32 cand[10000];
-	if (Heap_lockdepth == 0 || (Heap_lockdepth == 1 && !markStack)) {
-		Heap_Lock();
-		m = (Heap_Module)(ADDRESS)Heap_modules;
-		while (m != NIL) {
-			if (m->enumPtrs != NIL) {
-				(*m->enumPtrs)(Heap_MarkP);
-			}
-			m = m->next;
+	Heap_Lock();
+	m = (Heap_Module)(ADDRESS)Heap_modules;
+	while (m != NIL) {
+		if (m->enumPtrs != NIL) {
+			(*m->enumPtrs)(Heap_MarkP);
 		}
-		if (markStack) {
-			i0 = -100;
-			i1 = -101;
-			i2 = -102;
-			i3 = -103;
-			i4 = -104;
-			i5 = -105;
-			i6 = -106;
-			i7 = -107;
-			i8 = 1;
-			i9 = 2;
-			i10 = 3;
-			i11 = 4;
-			i12 = 5;
-			i13 = 6;
-			i14 = 7;
-			i15 = 8;
-			i16 = 9;
-			i17 = 10;
-			i18 = 11;
-			i19 = 12;
-			i20 = 13;
-			i21 = 14;
-			i22 = 15;
-			i23 = 16;
-			for (;;) {
-				i0 += 1;
-				i1 += 2;
-				i2 += 3;
-				i3 += 4;
-				i4 += 5;
-				i5 += 6;
-				i6 += 7;
-				i7 += 8;
-				i8 += 9;
-				i9 += 10;
-				i10 += 11;
-				i11 += 12;
-				i12 += 13;
-				i13 += 14;
-				i14 += 15;
-				i15 += 16;
-				i16 += 17;
-				i17 += 18;
-				i18 += 19;
-				i19 += 20;
-				i20 += 21;
-				i21 += 22;
-				i22 += 23;
-				i23 += 24;
-				if ((i0 == -99 && i15 == 24)) {
-					Heap_MarkStack(32, (void*)cand, 10000);
-					break;
-				}
-			}
-			if (((((((((((((((((((((((i0 + i1) + i2) + i3) + i4) + i5) + i6) + i7) + i8) + i9) + i10) + i11) + i12) + i13) + i14) + i15) + i16) + i17) + i18) + i19) + i20) + i21) + i22) + i23 > 10000) {
-				return;
+		m = m->next;
+	}
+	if (markStack) {
+		i0 = -100;
+		i1 = -101;
+		i2 = -102;
+		i3 = -103;
+		i4 = -104;
+		i5 = -105;
+		i6 = -106;
+		i7 = -107;
+		i8 = 1;
+		i9 = 2;
+		i10 = 3;
+		i11 = 4;
+		i12 = 5;
+		i13 = 6;
+		i14 = 7;
+		i15 = 8;
+		i16 = 9;
+		i17 = 10;
+		i18 = 11;
+		i19 = 12;
+		i20 = 13;
+		i21 = 14;
+		i22 = 15;
+		i23 = 16;
+		for (;;) {
+			i0 += 1;
+			i1 += 2;
+			i2 += 3;
+			i3 += 4;
+			i4 += 5;
+			i5 += 6;
+			i6 += 7;
+			i7 += 8;
+			i8 += 9;
+			i9 += 10;
+			i10 += 11;
+			i11 += 12;
+			i12 += 13;
+			i13 += 14;
+			i14 += 15;
+			i15 += 16;
+			i16 += 17;
+			i17 += 18;
+			i18 += 19;
+			i19 += 20;
+			i20 += 21;
+			i21 += 22;
+			i22 += 23;
+			i23 += 24;
+			if ((i0 == -99 && i15 == 24)) {
+				Heap_MarkStack(32, (void*)cand, 10000);
+				break;
 			}
 		}
-		Heap_CheckFin();
-		Heap_Scan();
-		Heap_Finalize();
-		Heap_Unlock();
+		if (((((((((((((((((((((((i0 + i1) + i2) + i3) + i4) + i5) + i6) + i7) + i8) + i9) + i10) + i11) + i12) + i13) + i14) + i15) + i16) + i17) + i18) + i19) + i20) + i21) + i22) + i23 > 10000) {
+			return;
+		}
 	}
+	Heap_CheckFin();
+	Heap_Scan();
+	Heap_Finalize();
+	Heap_Unlock();
 }
 
 void Heap_RegisterFinalizer (SYSTEM_PTR obj, Heap_Finalizer finalize)

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Heap.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
 
 #ifndef Heap__h
 #define Heap__h

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Modules.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Modules.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Modules__h
 #define Modules__h

+ 11 - 1
data/bin/voc/bootstrap/unix-44/OPB.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -1738,6 +1738,16 @@ void OPB_StPar0 (OPT_Node *par0, INT16 fctno)
 			}
 			x->typ = OPT_linttyp;
 			break;
+		case -1: 
+			if (x->class == 8 || x->class == 9) {
+				OPB_err(126);
+			} else if (__IN(f, 0x60, 32)) {
+				OPB_Convert(&x, OPT_inttyp);
+			} else {
+				OPB_err(111);
+			}
+			x->typ = OPT_inttyp;
+			break;
 		case 6: 
 			OPB_MOp(23, &x);
 			break;

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPB.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPB__h
 #define OPB__h

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPC.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPC.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPC__h
 #define OPC__h

+ 7 - 3
data/bin/voc/bootstrap/unix-44/OPM.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -27,7 +27,7 @@ export INT16 OPM_AddressSize;
 static INT16 OPM_GlobalAlignment;
 export INT16 OPM_Alignment;
 export UINT32 OPM_GlobalOptions, OPM_Options;
-export INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize;
+export INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize, OPM_SetSize;
 export INT64 OPM_MaxIndex;
 export LONGREAL OPM_MinReal, OPM_MaxReal, OPM_MinLReal, OPM_MaxLReal;
 export BOOLEAN OPM_noerr;
@@ -338,7 +338,7 @@ BOOLEAN OPM_OpenPar (void)
 		OPM_LogWLn();
 		OPM_LogWStr((CHAR*)"    -O2   Original Oberon / Oberon-2:  8 bit SHORTINT, 16 bit INTEGER, 32 bit LONGINT and SET.", 95);
 		OPM_LogWLn();
-		OPM_LogWStr((CHAR*)"    -OC   Component Pascal:           16 bit SHORTINT, 32 bit INTEGER, 64 bit LONGINT and SET.", 95);
+		OPM_LogWStr((CHAR*)"    -OC   Component Pascal:           16 bit SHORTINT, 32 bit INTEGER and SET, 64 bit LONGINT.", 95);
 		OPM_LogWLn();
 		OPM_LogWStr((CHAR*)"    -OV   Alternate large model:       8 bit SHORTINT, 32 bit INTEGER, 64 bit LONGINT and SET.", 95);
 		OPM_LogWLn();
@@ -410,21 +410,25 @@ void OPM_InitOptions (void)
 			OPM_ShortintSize = 1;
 			OPM_IntegerSize = 2;
 			OPM_LongintSize = 4;
+			OPM_SetSize = 4;
 			break;
 		case 'C': 
 			OPM_ShortintSize = 2;
 			OPM_IntegerSize = 4;
 			OPM_LongintSize = 8;
+			OPM_SetSize = 4;
 			break;
 		case 'V': 
 			OPM_ShortintSize = 1;
 			OPM_IntegerSize = 4;
 			OPM_LongintSize = 8;
+			OPM_SetSize = 8;
 			break;
 		default: 
 			OPM_ShortintSize = 1;
 			OPM_IntegerSize = 2;
 			OPM_LongintSize = 4;
+			OPM_SetSize = 4;
 			break;
 	}
 	__MOVE(OPM_InstallDir, OPM_ResourceDir, 1024);

+ 2 - 2
data/bin/voc/bootstrap/unix-44/OPM.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPM__h
 #define OPM__h
@@ -9,7 +9,7 @@
 import CHAR OPM_Model[10];
 import INT16 OPM_AddressSize, OPM_Alignment;
 import UINT32 OPM_GlobalOptions, OPM_Options;
-import INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize;
+import INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize, OPM_SetSize;
 import INT64 OPM_MaxIndex;
 import LONGREAL OPM_MinReal, OPM_MaxReal, OPM_MinLReal, OPM_MaxLReal;
 import BOOLEAN OPM_noerr;

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPP.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPP.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPP__h
 #define OPP__h

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPS.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPS.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPS__h
 #define OPS__h

+ 2 - 1
data/bin/voc/bootstrap/unix-44/OPT.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -2131,6 +2131,7 @@ export void *OPT__init(void)
 	OPT_EnterProc((CHAR*)"CAP", 3);
 	OPT_EnterProc((CHAR*)"ORD", 4);
 	OPT_EnterProc((CHAR*)"ENTIER", 5);
+	OPT_EnterProc((CHAR*)"FLOOR", -1);
 	OPT_EnterProc((CHAR*)"ODD", 6);
 	OPT_EnterProc((CHAR*)"MIN", 7);
 	OPT_EnterProc((CHAR*)"MAX", 8);

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPT.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPT__h
 #define OPT__h

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPV.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/OPV.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPV__h
 #define OPV__h

+ 136 - 1
data/bin/voc/bootstrap/unix-44/Out.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -16,6 +16,8 @@ static INT16 Out_in;
 
 
 export void Out_Char (CHAR ch);
+export void Out_ConvertL (LONGREAL x, INT16 n, CHAR *d, ADDRESS d__len);
+export INT16 Out_Expo (REAL x);
 export void Out_Flush (void);
 export void Out_Hex (INT64 x, INT64 n);
 export void Out_Int (INT64 x, INT64 n);
@@ -24,6 +26,7 @@ export void Out_Ln (void);
 export void Out_LongReal (LONGREAL x, INT16 n);
 export void Out_Open (void);
 export void Out_Real (REAL x, INT16 n);
+export void Out_RealFix (REAL x, INT16 n, INT16 k);
 static void Out_RealP (LONGREAL x, INT16 n, BOOLEAN long_);
 export void Out_String (CHAR *str, ADDRESS str__len);
 export LONGREAL Out_Ten (INT16 e);
@@ -328,6 +331,138 @@ void Out_LongReal (LONGREAL x, INT16 n)
 	Out_RealP(x, n, 1);
 }
 
+void Out_ConvertL (LONGREAL x, INT16 n, CHAR *d, ADDRESS d__len)
+{
+	INT32 i, j, k;
+	if (x < (LONGREAL)0) {
+		x = -x;
+	}
+	k = 0;
+	if (n > 9) {
+		i = __SHORT(__ENTIER(x / (LONGREAL)(LONGREAL)1000000000), 2147483648LL);
+		j = __SHORT(__ENTIER(x - i * (LONGREAL)1000000000), 2147483648LL);
+		if (j < 0) {
+			j = 0;
+		}
+		while (k < 9) {
+			d[__X(k, d__len)] = __CHR((int)__MOD(j, 10) + 48);
+			j = __DIV(j, 10);
+			k += 1;
+		}
+	} else {
+		i = __SHORT(__ENTIER(x), 2147483648LL);
+	}
+	while (k < n) {
+		d[__X(k, d__len)] = __CHR((int)__MOD(i, 10) + 48);
+		i = __DIV(i, 10);
+		k += 1;
+	}
+}
+
+INT16 Out_Expo (REAL x)
+{
+	INT16 i;
+	__GET((ADDRESS)&x + 2, i, INT16);
+	return __MASK(__ASHR(i, 7), -256);
+}
+
+static struct RealFix__13 {
+	INT16 *i;
+	CHAR (*d)[9];
+	struct RealFix__13 *lnk;
+} *RealFix__13_s;
+
+static void dig__14 (INT16 n);
+static void seq__16 (CHAR ch, INT16 n);
+
+static void seq__16 (CHAR ch, INT16 n)
+{
+	while (n > 0) {
+		Out_Char(ch);
+		n -= 1;
+	}
+}
+
+static void dig__14 (INT16 n)
+{
+	while (n > 0) {
+		*RealFix__13_s->i -= 1;
+		Out_Char((*RealFix__13_s->d)[__X(*RealFix__13_s->i, 9)]);
+		n -= 1;
+	}
+}
+
+void Out_RealFix (REAL x, INT16 n, INT16 k)
+{
+	INT16 e, i;
+	CHAR sign;
+	REAL x0;
+	CHAR d[9];
+	struct RealFix__13 _s;
+	_s.i = &i;
+	_s.d = (void*)d;
+	_s.lnk = RealFix__13_s;
+	RealFix__13_s = &_s;
+	e = Out_Expo(x);
+	if (k < 0) {
+		k = 0;
+	}
+	if (e == 0) {
+		seq__16(' ', (n - k) - 2);
+		Out_Char('0');
+		seq__16(' ', k + 1);
+	} else if (e == 255) {
+		Out_String((CHAR*)" NaN", 5);
+		seq__16(' ', n - 4);
+	} else {
+		e = __ASHR((e - 127) * 77, 8);
+		if (x < (REAL)0) {
+			sign = '-';
+			x = -x;
+		} else {
+			sign = ' ';
+		}
+		if (e >= 0) {
+			x = (x / (LONGREAL)Out_Ten(e));
+		} else {
+			x = (Out_Ten(-e) * x);
+		}
+		if (x >= (REAL)10) {
+			x =   1.0000000e-001 * x;
+			e += 1;
+		}
+		if (k + e >= 8) {
+			k = 8 - e;
+		} else if (k + e < 0) {
+			k = -e;
+			x = (REAL)0;
+		}
+		x0 = Out_Ten(k + e);
+		x = x0 * x +   5.0000000e-001;
+		if (x >= (REAL)10 * x0) {
+			e += 1;
+		}
+		e += 1;
+		i = k + e;
+		Out_ConvertL(x, i, (void*)d, 9);
+		if (e > 0) {
+			seq__16(' ', ((n - e) - k) - 2);
+			Out_Char(sign);
+			dig__14(e);
+			Out_Char('.');
+			dig__14(k);
+		} else {
+			seq__16(' ', (n - k) - 3);
+			Out_Char(sign);
+			Out_Char('0');
+			Out_Char('.');
+			seq__16('0', -e);
+			dig__14(k + e);
+		}
+	}
+	RealFix__13_s = _s.lnk;
+}
+
 
 export void *Out__init(void)
 {

+ 4 - 1
data/bin/voc/bootstrap/unix-44/Out.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Out__h
 #define Out__h
@@ -10,6 +10,8 @@ import BOOLEAN Out_IsConsole;
 
 
 import void Out_Char (CHAR ch);
+import void Out_ConvertL (LONGREAL x, INT16 n, CHAR *d, ADDRESS d__len);
+import INT16 Out_Expo (REAL x);
 import void Out_Flush (void);
 import void Out_Hex (INT64 x, INT64 n);
 import void Out_Int (INT64 x, INT64 n);
@@ -17,6 +19,7 @@ import void Out_Ln (void);
 import void Out_LongReal (LONGREAL x, INT16 n);
 import void Out_Open (void);
 import void Out_Real (REAL x, INT16 n);
+import void Out_RealFix (REAL x, INT16 n, INT16 k);
 import void Out_String (CHAR *str, ADDRESS str__len);
 import LONGREAL Out_Ten (INT16 e);
 import void *Out__init(void);

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Platform.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Platform.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Platform__h
 #define Platform__h

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Reals.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Reals.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Reals__h
 #define Reals__h

+ 218 - 0
data/bin/voc/bootstrap/unix-44/SYSTEM.c

@@ -0,0 +1,218 @@
+/*
+*   The body prefix file of the voc(jet backend) runtime system, Version 1.0
+*
+*   Copyright (c) Software Templ, 1994, 1995
+*
+*   Module SYSTEM is subject to change any time without prior notification.
+*   Software Templ disclaims all warranties with regard to module SYSTEM,
+*   in particular shall Software Templ not be liable for any damage resulting
+*   from inappropriate use or modification of module SYSTEM.
+*
+*   Version 1.1  jt, 24.11.95  fixes for correct pointer arithmetic on Cray computers
+*   jt 31.1.2007  ANSI prototypes for malloc and exit in order to avoid cc warnings
+*
+*/
+
+#include "SYSTEM.h"
+#include "stdarg.h"
+#include <signal.h>
+
+
+// Procedure verions of SYSTEM.H versions used when a multiply accessed
+// parameter has side effects.
+
+
+
+
+INT64 SYSTEM_DIV(INT64 x, INT64 y)
+{
+  if (x == 0) return 0;
+  if (x >= 0)
+    if (y >= 0) {return x/y;}
+    else        {return -((x-y-1)/(-y));}
+  else
+    if (y >= 0) {return -((y-x-1)/y);}
+    else        {return (-x)/(-y);}
+}
+
+INT64 SYSTEM_MOD(INT64 x, INT64 y)
+{
+  if (x == 0) return 0;
+  if (x >= 0)
+    if (y >= 0) {return x % y;}
+    else        {return (y+1) + ((x-1) % (-y));}
+  else
+    if (y >= 0) {return (y-1) - ((-x-1) % y);}
+    else        {return -((-x) % (-y));}
+}
+
+INT64 SYSTEM_ENTIER(double x)
+{
+    INT64 y;
+    if (x >= 0)
+        return (INT64)x;
+    else {
+        y = (INT64)x;
+        if (y <= x) return y; else return y - 1;
+    }
+}
+
+
+
+void SYSTEM_INHERIT(ADDRESS *t, ADDRESS *t0)
+{
+    t -= __TPROC0OFF;
+    t0 -= __TPROC0OFF;
+    while (*t0 != __EOM) {*t = *t0; t--; t0--;}
+}
+
+
+void SYSTEM_ENUMP(void *adr, ADDRESS n, void (*P)())
+{
+    while (n > 0) {
+        P((ADDRESS)(*((void**)(adr))));
+        adr = ((void**)adr) + 1;
+        n--;
+    }
+}
+
+void SYSTEM_ENUMR(void *adr, ADDRESS *typ, ADDRESS size, ADDRESS n, void (*P)())
+{
+    ADDRESS *t, off;
+    typ++;
+    while (n > 0) {
+        t = typ;
+        off = *t;
+        while (off >= 0) {P(*(ADDRESS*)((char*)adr+off)); t++; off = *t;}
+        adr = ((char*)adr) + size;
+        n--;
+    }
+}
+
+extern void Heap_Lock();
+extern void Heap_Unlock();
+
+SYSTEM_PTR SYSTEM_NEWARR(ADDRESS *typ, ADDRESS elemsz, int elemalgn, int nofdim, int nofdyn, ...)
+{
+    ADDRESS nofelems, size, dataoff, n, nptr, *x, *p, nofptrs, i, *ptab, off;
+    va_list ap;
+    va_start(ap, nofdyn);
+    nofelems = 1;
+    while (nofdim > 0) {
+        nofelems = nofelems * va_arg(ap, ADDRESS); nofdim--;
+        if (nofelems <= 0) __HALT(-20);
+    }
+    va_end(ap);
+    dataoff = nofdyn * sizeof(ADDRESS);
+    if (elemalgn > sizeof(ADDRESS)) {
+        n = dataoff % elemalgn;
+        if (n != 0) dataoff += elemalgn - n;
+    }
+    size = dataoff + nofelems * elemsz;
+    Heap_Lock();
+    if (typ == NIL) {
+        /* element typ does not contain pointers */
+        x = Heap_NEWBLK(size);
+    }
+    else if (typ == (ADDRESS*)POINTER__typ) {
+        /* element type is a pointer */
+        x = Heap_NEWBLK(size + nofelems * sizeof(ADDRESS));
+        p = (ADDRESS*)(ADDRESS)x[-1];
+        p[-nofelems] = *p;  /* build new type desc in situ: 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */
+        p -= nofelems - 1; n = 1;   /* n =1 for skipping the size field */
+        while (n <= nofelems) {*p = n*sizeof(ADDRESS); p++; n++;}
+        *p = - (nofelems + 1) * sizeof(ADDRESS);    /* sentinel */
+        x[-1] -= nofelems * sizeof(ADDRESS);
+    }
+    else {
+        /* element type is a record that contains pointers */
+        ptab = typ + 1; nofptrs = 0;
+        while (ptab[nofptrs] >= 0) {nofptrs++;} /* number of pointers per element */
+        nptr = nofelems * nofptrs;  /* total number of pointers */
+        x = Heap_NEWBLK(size + nptr * sizeof(ADDRESS));
+        p = (ADDRESS*)(ADDRESS)x[- 1];
+        p[-nptr] = *p;  /* build new type desc in situ; 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */
+        p -= nptr - 1; n = 0; off = dataoff;
+        while (n < nofelems) {i = 0;
+            while (i < nofptrs) {*p = off + ptab[i]; p++; i++;}
+            off += elemsz; n++;
+        }
+        *p = - (nptr + 1) * sizeof(ADDRESS);    /* sentinel */
+        x[-1] -= nptr * sizeof(ADDRESS);
+    }
+    if (nofdyn != 0) {
+        /* setup len vector for index checks */
+        va_start(ap, nofdyn);
+        p = x;
+        while (nofdyn > 0) {*p = va_arg(ap, ADDRESS); p++, nofdyn--;}
+        va_end(ap);
+    }
+    Heap_Unlock();
+    return x;
+}
+
+
+
+
+typedef void (*SystemSignalHandler)(INT32); // = Platform_SignalHandler
+
+#ifndef _WIN32
+
+    SystemSignalHandler handler[3] = {0};
+
+    // Provide signal handling for Unix based systems
+    void signalHandler(int s) {
+        if (s >= 2  &&  s <= 4) handler[s-2](s);
+        // (Ignore other signals)
+    }
+
+    void SystemSetHandler(int s, ADDRESS h) {
+        if (s >= 2 && s <= 4) {
+            int needtosetsystemhandler = handler[s-2] == 0;
+            handler[s-2] = (SystemSignalHandler)h;
+            if (needtosetsystemhandler) {signal(s, signalHandler);}
+        }
+    }
+
+#else
+
+    // Provides Windows callback handlers for signal-like scenarios
+    #include "WindowsWrapper.h"
+
+    SystemSignalHandler SystemInterruptHandler = 0;
+    SystemSignalHandler SystemQuitHandler      = 0;
+    BOOL ConsoleCtrlHandlerSet = FALSE;
+
+    BOOL WINAPI SystemConsoleCtrlHandler(DWORD ctrlType) {
+        if ((ctrlType == CTRL_C_EVENT) || (ctrlType == CTRL_BREAK_EVENT)) {
+            if (SystemInterruptHandler) {
+                SystemInterruptHandler(2); // SIGINT
+                return TRUE;
+            }
+        } else { // Close, logoff or shutdown
+            if (SystemQuitHandler) {
+                SystemQuitHandler(3); // SIGQUIT
+                return TRUE;
+            }
+        }
+        return FALSE;
+    }
+
+    void EnsureConsoleCtrlHandler() {
+        if (!ConsoleCtrlHandlerSet) {
+        SetConsoleCtrlHandler(SystemConsoleCtrlHandler, TRUE);
+            ConsoleCtrlHandlerSet = TRUE;
+        }
+    }
+
+    void SystemSetInterruptHandler(ADDRESS h) {
+        EnsureConsoleCtrlHandler();
+        SystemInterruptHandler = (SystemSignalHandler)h;
+    }
+
+    void SystemSetQuitHandler(ADDRESS h) {
+        EnsureConsoleCtrlHandler();
+        SystemQuitHandler = (SystemSignalHandler)h;
+    }
+
+#endif

+ 330 - 0
data/bin/voc/bootstrap/unix-44/SYSTEM.h

@@ -0,0 +1,330 @@
+#ifndef SYSTEM__h
+#define SYSTEM__h
+
+
+// 64 bit system detection
+
+#if (__SIZEOF_POINTER__ == 8) || defined (_LP64) || defined(__LP64__) || defined(_WIN64)
+  #define o__64
+#endif
+
+
+// Declare memcpy in a way compatible with C compilers intrinsic
+// built in implementations.
+
+#if defined (o__64)
+  #if defined(_WIN64)
+    typedef unsigned long long size_t;
+  #else
+    typedef unsigned long      size_t;
+  #endif
+#else
+  #if defined(__OpenBSD__)
+    typedef unsigned long      size_t;
+  #else
+    typedef unsigned int       size_t;
+  #endif
+#endif
+
+#define _SIZE_T_DECLARED // For FreeBSD
+#define _SIZE_T_DEFINED_ // For OpenBSD
+
+void *memcpy(void *dest, const void *source, size_t size);
+#if defined _MSC_VER
+#define alloca _alloca
+#endif
+void *alloca(size_t size);
+
+
+// Declare fixed size versions of basic intger types
+
+#if defined (o__64) && !defined(_WIN64)
+  // LP64
+  typedef long               INT64;
+  typedef unsigned long      UINT64;
+#else
+  // ILP32 or LLP64
+  typedef long long          INT64;
+  typedef unsigned long long UINT64;
+#endif
+
+typedef int                  INT32;
+typedef unsigned int         UINT32;
+
+typedef short int            INT16;
+typedef unsigned short int   UINT16;
+
+typedef signed char          INT8;
+typedef unsigned char        UINT8;
+
+
+// The compiler uses 'import' and 'export' which translate to 'extern' and
+// nothing respectively.
+
+#define import extern
+#define export
+
+
+
+// Known constants
+
+#define NIL          ((void*)0)
+#define __MAXEXT     16
+#define POINTER__typ ((ADDRESS*)(1))  // not NIL and not a valid type
+
+
+// Oberon types
+
+typedef INT8   BOOLEAN;
+typedef INT8   SYSTEM_BYTE;
+typedef UINT8  CHAR;
+typedef float  REAL;
+typedef double LONGREAL;
+typedef void*  SYSTEM_PTR;
+
+
+
+// 'ADDRESS' is a synonym for an integer of pointer size
+
+#if defined (o__64)
+  #define ADDRESS INT64
+#else
+  #define ADDRESS INT32
+#endif
+
+
+
+// ----------------------------------------------------------------------
+// ----------------------------------------------------------------------
+
+
+
+// OS Memory allocation interfaces are in PlatformXXX.Mod
+
+extern ADDRESS Platform_OSAllocate (ADDRESS size);
+extern void    Platform_OSFree     (ADDRESS addr);
+
+
+// Assertions and Halts
+
+extern void Modules_Halt(INT32 x);
+extern void Modules_AssertFail(INT32 x);
+
+#define __HALT(x)         Modules_Halt((INT32)(x))
+#define __ASSERT(cond, x) if (!(cond)) Modules_AssertFail((INT32)(x))
+
+
+// Index checking
+
+static inline INT64 __XF(UINT64 i, UINT64 ub) {if (i >= ub) {__HALT(-2);} return i;}
+#define __X(i, ub) (((i)<(ub))?i:(__HALT(-2),0))
+
+
+// Range checking, and checked SHORT and CHR functions
+
+static inline INT64 __RF(UINT64 i, UINT64 ub) {if (i >= ub) {__HALT(-8);} return i;}
+#define __R(i, ub)      (((i)<(ub))?i:(__HALT(-8),0))
+#define __SHORT(x, ub)  ((int)((UINT64)(x)+(ub)<(ub)+(ub)?(x):(__HALT(-8),0)))
+#define __SHORTF(x, ub) ((int)(__RF((x)+(ub),(ub)+(ub))-(ub)))
+#define __CHR(x)        ((CHAR)__R(x, 256))
+#define __CHRF(x)       ((CHAR)__RF(x, 256))
+
+
+
+// Signal handling in SYSTEM.c
+
+#ifndef _WIN32
+  extern void SystemSetHandler(int s, ADDRESS h);
+#else
+  extern void SystemSetInterruptHandler(ADDRESS h);
+  extern void SystemSetQuitHandler     (ADDRESS h);
+#endif
+
+
+
+// String comparison
+
+static inline int __str_cmp(CHAR *x, CHAR *y){
+  INT64 i = 0;
+  CHAR ch1, ch2;
+  do {ch1 = x[i]; ch2 = y[i]; i++;
+    if (!ch1) return -(int)ch2;
+  } while (ch1==ch2);
+  return (int)ch1 - (int)ch2;
+}
+#define __STRCMP(a,b) __str_cmp((CHAR*)(a), (CHAR*)(b))
+
+
+
+// Inline string, record and array copy
+
+#define __COPY(s, d, n) {char*_a=(void*)s,*_b=(void*)d; LONGINT _i=0,_t=n-1; \
+                         while(_i<_t&&((_b[_i]=_a[_i])!=0)){_i++;};_b[_i]=0;}
+#define __DUPARR(v, t)  v=(void*)memcpy(v##__copy,v,sizeof(t))
+#define __DUP(x, l, t)  x=(void*)memcpy(alloca(l*sizeof(t)),x,l*sizeof(t))
+#define __DEL(x)
+
+
+/* SYSTEM ops */
+
+#define __VAL(t, x)     (*(t*)&(x))
+
+#define __GET(a, x, t)  x=*(t*)(ADDRESS)(a)
+#define __PUT(a, x, t)  *(t*)(ADDRESS)(a)=x
+
+#define __LSHL(x, n, s) ((INT##s)((UINT##s)(x)<<(n)))
+#define __LSHR(x, n, s) ((INT##s)((UINT##s)(x)>>(n)))
+#define __LSH(x, n, s)  ((n)>=0? __LSHL(x, n, s): __LSHR(x, -(n), s))
+
+#define __ROTL(x, n, s) ((INT##s)((UINT##s)(x)<<(n)|(UINT##s)(x)>>(s-(n))))
+#define __ROTR(x, n, s) ((INT##s)((UINT##s)(x)>>(n)|(UINT##s)(x)<<(s-(n))))
+#define __ROT(x, n, s)  ((n)>=0? __ROTL(x, n, s): __ROTR(x, -(n), s))
+
+#define __ASHL(x, n)    ((INT64)(x)<<(n))
+#define __ASHR(x, n)    ((INT64)(x)>>(n))
+#define __ASH(x, n)     ((n)>=0?__ASHL(x,n):__ASHR(x,-(n)))
+static inline INT64 SYSTEM_ASH(INT64 x, INT64 n) {return __ASH(x,n);}
+#define __ASHF(x, n)    SYSTEM_ASH((INT64)(x), (INT64)(n))
+
+#define __MOVE(s, d, n) memcpy((char*)(ADDRESS)(d),(char*)(ADDRESS)(s),n)
+
+
+extern INT64 SYSTEM_DIV(INT64 x, INT64 y);
+#define __DIVF(x, y) SYSTEM_DIV(x, y)
+#define __DIV(x, y) (((x)>0 && (y)>0) ? (x)/(y) : __DIVF(x, y))
+
+
+extern INT64 SYSTEM_MOD(INT64 x, INT64 y);
+#define __MODF(x, y) SYSTEM_MOD(x, y)
+#define __MOD(x, y) (((x)>0 && (y)>0) ? (x)%(y) : __MODF(x, y))
+
+
+extern INT64 SYSTEM_ENTIER (double x);
+#define __ENTIER(x) SYSTEM_ENTIER(x)
+
+
+#define __ABS(x) (((x)<0)?-(x):(x))
+
+static inline INT32 SYSTEM_ABS64(INT64 i) {return i >= 0 ? i : -i;}
+static inline INT64 SYSTEM_ABS32(INT32 i) {return i >= 0 ? i : -i;}
+#define __ABSF(x) ((sizeof(x) <= 4) ? SYSTEM_ABS32(x) : SYSTEM_ABS64(x))
+
+static inline double SYSTEM_ABSD(double i) {return i >= 0.0 ? i : -i;}
+#define __ABSFD(x) SYSTEM_ABSD(x)
+
+#define __CAP(ch)       ((CHAR)((ch)&0x5f))
+#define __ODD(x)        ((x)&1)
+
+#define __IN(x, s, size)     (((unsigned int)(x))<size && ((((UINT##size)(s))>>(x))&1))
+// todo tested versions of SETOF and SETRNG: check that x, l and h fit size
+#define __SETOF(x, size)     ((UINT##size)1<<(x))
+#define __SETRNG(l, h, size) ((~(UINT##size)0<<(l))&~(UINT##size)0>>(size-1-(h)))
+
+#define __MASK(x, m) ((x)&~(m))
+#define __BIT(x, n)  (*(UINT64*)(x)>>(n)&1)
+
+
+
+// Runtime checks
+
+#define __RETCHK     __retchk: __HALT(-3); return 0;
+#define __CASECHK    __HALT(-4)
+#define __WITHCHK    __HALT(-7)
+
+
+#define __IS(tag, typ, level) (*(tag-(__BASEOFF-level))==(ADDRESS)typ##__typ)
+#define  __TYPEOF(p)          (*(((ADDRESS**)(p))-1))
+#define __ISP(p, typ, level)  __IS(__TYPEOF(p),typ,level)
+
+
+#define __GUARDP(p, typ, level)    ((typ*)(__ISP(p,typ,level)?p:(__HALT(-5),p)))
+#define __GUARDR(r, typ, level)    (*((typ*)(__IS(r##__typ,typ,level)?r:(__HALT(-5),r))))
+#define __GUARDA(p, typ, level)    ((struct typ*)(__IS(__TYPEOF(p),typ,level)?p:(__HALT(-5),p)))
+#define __GUARDEQR(p, dyntyp, typ) if(dyntyp!=typ##__typ) __HALT(-6);*(p)
+#define __GUARDEQP(p, typ)         if(__TYPEOF(p)!=typ##__typ)__HALT(-6);*((typ*)p)
+
+
+
+// Module entry/registration/exit
+
+extern void       Heap_REGCMD();
+extern SYSTEM_PTR Heap_REGMOD();
+extern void       Heap_REGTYP();
+extern void       Heap_INCREF();
+
+#define __DEFMOD              static void *m; if (m!=0) {return m;}
+#define __REGCMD(name, cmd)   Heap_REGCMD(m, (CHAR*)name, cmd)
+#define __REGMOD(name, enum)  if (m==0) {m = Heap_REGMOD((CHAR*)name,enum);}
+#define __ENDMOD              return m
+#define __MODULE_IMPORT(name) Heap_INCREF(name##__init())
+
+
+
+// Main module initialisation, registration and finalisation
+
+extern void Modules_Init(INT32 argc, ADDRESS argv);
+extern void Heap_FINALL();
+
+#define __INIT(argc, argv)    static void *m; Modules_Init(argc, (ADDRESS)&argv);
+#define __REGMAIN(name, enum) m = Heap_REGMOD((CHAR*)name,enum)
+#define __FINI                Heap_FINALL(); return 0
+
+
+// Memory allocation
+
+extern SYSTEM_PTR Heap_NEWBLK (ADDRESS size);
+extern SYSTEM_PTR Heap_NEWREC (ADDRESS tag);
+extern SYSTEM_PTR SYSTEM_NEWARR(ADDRESS*, ADDRESS, int, int, int, ...);
+
+#define __SYSNEW(p, len) p = Heap_NEWBLK((ADDRESS)(len))
+#define __NEW(p, t)      p = Heap_NEWREC((ADDRESS)t##__typ)
+#define __NEWARR         SYSTEM_NEWARR
+
+
+
+/* Type handling */
+
+extern void SYSTEM_INHERIT(ADDRESS *t, ADDRESS *t0);
+extern void SYSTEM_ENUMP  (void *adr, ADDRESS n, void (*P)());
+extern void SYSTEM_ENUMR  (void *adr, ADDRESS *typ, ADDRESS size, ADDRESS n, void (*P)());
+
+
+#define __TDESC(t, m, n)                                                \
+  static struct t##__desc {                                             \
+    ADDRESS  tproc[m];         /* Proc for each ptr field            */ \
+    ADDRESS  tag;                                                       \
+    ADDRESS  next;             /* Module table type list points here */ \
+    ADDRESS  level;                                                     \
+    ADDRESS  module;                                                    \
+    char     name[24];                                                  \
+    ADDRESS  basep[__MAXEXT];  /* List of bases this extends         */ \
+    ADDRESS  reserved;                                                  \
+    ADDRESS  blksz;            /* xxx_typ points here                */ \
+    ADDRESS  ptr[n+1];         /* Offsets of ptrs up to -ve sentinel */ \
+  } t##__desc
+
+#define __BASEOFF   (__MAXEXT+1)                           // blksz as index to base.
+#define __TPROC0OFF (__BASEOFF+24/sizeof(ADDRESS)+5)       // blksz as index to tproc IFF m=1.
+#define __EOM 1
+#define __TDFLDS(name, size)          {__EOM}, 1, 0, 0, 0, name, {0}, 0, size
+#define __ENUMP(adr, n, P)            SYSTEM_ENUMP(adr, (ADDRESS)(n), P)
+#define __ENUMR(adr, typ, size, n, P) SYSTEM_ENUMR(adr, typ, (ADDRESS)(size), (ADDRESS)(n), P)
+
+#define __INITYP(t, t0, level) \
+  t##__typ               = (ADDRESS*)&t##__desc.blksz;                                                    \
+  memcpy(t##__desc.basep, t0##__typ - __BASEOFF, level*sizeof(ADDRESS));                                  \
+  t##__desc.basep[level] = (ADDRESS)t##__typ;                                                             \
+  t##__desc.module       = (ADDRESS)m;                                                                    \
+  if(t##__desc.blksz!=sizeof(struct t)) __HALT(-15);                                                      \
+  t##__desc.blksz        = (t##__desc.blksz+5*sizeof(ADDRESS)-1)/(4*sizeof(ADDRESS))*(4*sizeof(ADDRESS)); \
+  Heap_REGTYP(m, (ADDRESS)&t##__desc.next);                                                               \
+  SYSTEM_INHERIT(t##__typ, t0##__typ)
+
+// Oberon-2 type bound procedures support
+#define __INITBP(t, proc, num)            *(t##__typ-(__TPROC0OFF+num))=(ADDRESS)proc
+#define __SEND(typ, num, funtyp, parlist) ((funtyp)((ADDRESS)*(typ-(__TPROC0OFF+num))))parlist
+
+
+
+
+#endif

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Strings.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Strings.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Strings__h
 #define Strings__h

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Texts.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/Texts.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Texts__h
 #define Texts__h

+ 1 - 1
data/bin/voc/bootstrap/unix-44/VT100.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/VT100.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef VT100__h
 #define VT100__h

+ 10 - 0
data/bin/voc/bootstrap/unix-44/WindowsWrapper.h

@@ -0,0 +1,10 @@
+// WindowsWrapper.h
+//
+// Includes Windows.h while avoiding conflicts with Oberon types.
+
+
+#define BOOLEAN _BOOLEAN
+#define CHAR    _CHAR
+#include <windows.h>
+#undef BOOLEAN
+#undef CHAR

+ 1 - 1
data/bin/voc/bootstrap/unix-44/extTools.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-44/extTools.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef extTools__h
 #define extTools__h

+ 2 - 2
data/bin/voc/bootstrap/unix-48/Compiler.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspamS */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspamS */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -89,7 +89,7 @@ static void Compiler_PropagateElementaryTypeSizes (void)
 	OPT_sintobj->typ = OPT_sinttyp;
 	OPT_intobj->typ = OPT_inttyp;
 	OPT_lintobj->typ = OPT_linttyp;
-	switch (OPM_LongintSize) {
+	switch (OPM_SetSize) {
 		case 4: 
 			OPT_settyp = OPT_set32typ;
 			break;

+ 2 - 2
data/bin/voc/bootstrap/unix-48/Configuration.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -19,6 +19,6 @@ export void *Configuration__init(void)
 	__DEFMOD;
 	__REGMOD("Configuration", 0);
 /* BEGIN */
-	__MOVE("2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8.", Configuration_versionLong, 76);
+	__MOVE("2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8.", Configuration_versionLong, 76);
 	__ENDMOD;
 }

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Configuration.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Configuration__h
 #define Configuration__h

+ 197 - 0
data/bin/voc/bootstrap/unix-48/Errors.Txt

@@ -0,0 +1,197 @@
+The first line of this file is ignored.
+Any line not starting /^ *[0-9]/ is ignored.
+There should be only one space between the number and the message text.
+
+Compiler error messages
+  0 undeclared identifier
+  1 multiply defined identifier
+  2 illegal character in number
+  3 illegal character in string
+  4 identifier does not match procedure name
+  5 comment not closed
+
+  9 '=' expected
+
+ 12 type definition starts with incorrect symbol
+ 13 factor starts with incorrect symbol
+ 14 statement starts with incorrect symbol
+ 15 declaration followed by incorrect symbol
+ 16 MODULE expected
+
+ 18 '.' missing
+ 19 ',' missing
+ 20 ':' missing
+
+ 22 ')' missing
+ 23 ']' missing
+ 24 '}' missing
+ 25 OF missing
+ 26 THEN missing
+ 27 DO missing
+ 28 TO missing
+
+ 30 '(' missing
+
+ 34 ':=' missing
+ 35 ',' or OF expected
+
+ 38 identifier expected
+ 39 ';' missing
+
+ 41 END missing
+
+ 44 UNTIL missing
+
+ 46 EXIT not within loop statement
+ 47 illegally marked identifier
+
+ 50 expression should be constant
+ 51 constant not an integer
+ 52 identifier does not denote a type
+ 53 identifier does not denote a record type
+ 54 result type of procedure is not a basic type
+ 55 procedure call of a function
+ 56 assignment to non-variable
+ 57 pointer not bound to record or array type
+ 58 recursive type definition
+ 59 illegal open array parameter
+ 60 wrong type of case label
+ 61 inadmissible type of case label
+ 62 case label defined more than once
+ 63 illegal value of constant
+ 64 more actual than formal parameters
+ 65 fewer actual than formal parameters
+ 66 element types of actual array and formal open array differ
+ 67 actual parameter corresponding to open array is not an array
+ 68 control variable must be integer
+ 69 parameter must be an integer constant
+ 70 pointer or VAR record required as formal receiver
+ 71 pointer expected as actual receiver
+ 72 procedure must be bound to a record of the same scope
+ 73 procedure must have level 0
+ 74 procedure unknown in base type
+ 75 invalid call of base procedure
+ 76 this variable (field) is read only
+ 77 object is not a record
+ 78 dereferenced object is not a variable
+ 79 indexed object is not a variable
+ 80 index expression is not an integer
+ 81 index out of specified bounds
+ 82 indexed variable is not an array
+ 83 undefined record field
+ 84 dereferenced variable is not a pointer
+ 85 guard or test type is not an extension of variable type
+ 86 guard or testtype is not a pointer
+ 87 guarded or tested variable is neither a pointer nor a VAR-parameter record
+ 88 open array not allowed as variable, record field or array element
+
+ 92 operand of IN not an integer, or not a set
+ 93 set element type is not an integer
+ 94 operand of & is not of type BOOLEAN
+ 95 operand of OR is not of type BOOLEAN
+ 96 operand not applicable to (unary) +
+ 97 operand not applicable to (unary) -
+ 98 operand of ~ is not of type BOOLEAN
+ 99 ASSERT fault
+100 incompatible operands of dyadic operator
+101 operand type inapplicable to *
+102 operand type inapplicable to /
+103 operand type inapplicable to DIV
+104 operand type inapplicable to MOD
+105 operand type inapplicable to +
+106 operand type inapplicable to -
+107 operand type inapplicable to = or #
+108 operand type inapplicable to relation
+109 overriding method must be exported
+110 operand is not a type
+111 operand inapplicable to (this) function
+112 operand is not a variable
+113 incompatible assignment
+114 string too long to be assigned
+115 parameter doesn't match
+116 number of parameters doesn't match
+117 result type doesn't match
+118 export mark doesn't match with forward declaration
+119 redefinition textually precedes procedure bound to base type
+120 type of expression following IF, WHILE, UNTIL or ASSERT is not BOOLEAN
+121 called object is not a procedure (or is an interrupt procedure)
+122 actual VAR-parameter is not a variable
+123 type of actual parameter is not identical with that of formal VAR-parameter
+124 type of result expression differs from that of procedure
+125 type of case expression is neither INTEGER nor CHAR
+126 this expression cannot be a type or a procedure
+127 illegal use of object
+128 unsatisfied forward reference
+129 unsatisfied forward procedure
+130 WITH clause does not specify a variable
+131 LEN not applied to array
+132 dimension in LEN too large or negative
+135 SYSTEM not imported
+150 key inconsistency of imported module
+151 incorrect symbol file
+152 symbol file of imported module not found
+153 object or symbol file not opened (disk full?)
+154 recursive import not allowed
+155 generation of new symbol file not allowed
+156 parameter file not found
+157 syntax error in parameter file
+
+Limitations of implementation
+200 not yet implemented
+201 lower bound of set range greater than higher bound
+202 set element greater than MAX(SET) or less than 0
+203 number too large
+204 product too large
+205 division by zero
+206 sum too large
+207 difference too large
+208 overflow in arithmetic shift
+209 case range too large
+213 too many cases in case statement
+218 illegal value of parameter (0 <= p < 256)
+219 machine registers cannot be accessed
+220 illegal value of parameter
+221 too many pointers in a record
+222 too many global pointers
+223 too many record types
+224 too many pointer types
+225 address of pointer variable too large (move forward in text)
+226 too many exported procedures
+227 too many imported modules
+228 too many exported structures
+229 too many nested records for import
+230 too many constants (strings) in module
+231 too many link table entries (external procedures)
+232 too many commands in module
+233 record extension hierarchy too high
+234 export of recursive type not allowed
+240 identifier too long
+241 string too long
+242 address overflow
+244 cyclic type definition not allowed
+245 guarded pointer variable may be manipulated by non-local operations; use auxiliary pointer variable
+
+Compiler Warnings
+301 implicit type cast
+306 inappropriate symbol file ignored
+307 no ELSE symbol after CASE statement sequence may lead to trap
+308 SYSTEM.VAL result includes memory past end of source variable; use SYSTEM.GET
+309 you should name this parameter type, or else no actual parameter will match
+310 redefining standard predefined type
+
+Run-time Error Messages
+ -1 assertion failed, cf. SYSTEM_assert
+ -2 invalid array index
+ -3 function procedure without RETURN statement
+ -4 invalid case in CASE statement
+ -5 type guard failed
+ -6 implicit type guard in record assignment failed
+ -7 invalid case in WITH statement
+ -8 value out of range
+ -9 (delayed) interrupt
+-10 NIL access
+-11 alignment error
+-12 zero divide
+-13 arithmetic overflow/underflow
+-14 invalid function argument
+-15 internal error

+ 4 - 2
data/bin/voc/bootstrap/unix-48/Files.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -966,7 +966,9 @@ void Files_WriteSet (Files_Rider *R, ADDRESS *R__typ, UINT32 x)
 {
 	CHAR b[4];
 	INT32 i;
-	i = (INT32)x;
+	UINT64 y;
+	y = x;
+	i = __VAL(INT32, y);
 	b[0] = __CHR(i);
 	b[1] = __CHR(__ASHR(i, 8));
 	b[2] = __CHR(__ASHR(i, 16));

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Files.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Files__h
 #define Files__h

+ 68 - 70
data/bin/voc/bootstrap/unix-48/Heap.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -665,79 +665,77 @@ void Heap_GC (BOOLEAN markStack)
 	Heap_Module m;
 	INT32 i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23;
 	INT32 cand[10000];
-	if (Heap_lockdepth == 0 || (Heap_lockdepth == 1 && !markStack)) {
-		Heap_Lock();
-		m = (Heap_Module)(ADDRESS)Heap_modules;
-		while (m != NIL) {
-			if (m->enumPtrs != NIL) {
-				(*m->enumPtrs)(Heap_MarkP);
-			}
-			m = m->next;
+	Heap_Lock();
+	m = (Heap_Module)(ADDRESS)Heap_modules;
+	while (m != NIL) {
+		if (m->enumPtrs != NIL) {
+			(*m->enumPtrs)(Heap_MarkP);
 		}
-		if (markStack) {
-			i0 = -100;
-			i1 = -101;
-			i2 = -102;
-			i3 = -103;
-			i4 = -104;
-			i5 = -105;
-			i6 = -106;
-			i7 = -107;
-			i8 = 1;
-			i9 = 2;
-			i10 = 3;
-			i11 = 4;
-			i12 = 5;
-			i13 = 6;
-			i14 = 7;
-			i15 = 8;
-			i16 = 9;
-			i17 = 10;
-			i18 = 11;
-			i19 = 12;
-			i20 = 13;
-			i21 = 14;
-			i22 = 15;
-			i23 = 16;
-			for (;;) {
-				i0 += 1;
-				i1 += 2;
-				i2 += 3;
-				i3 += 4;
-				i4 += 5;
-				i5 += 6;
-				i6 += 7;
-				i7 += 8;
-				i8 += 9;
-				i9 += 10;
-				i10 += 11;
-				i11 += 12;
-				i12 += 13;
-				i13 += 14;
-				i14 += 15;
-				i15 += 16;
-				i16 += 17;
-				i17 += 18;
-				i18 += 19;
-				i19 += 20;
-				i20 += 21;
-				i21 += 22;
-				i22 += 23;
-				i23 += 24;
-				if ((i0 == -99 && i15 == 24)) {
-					Heap_MarkStack(32, (void*)cand, 10000);
-					break;
-				}
-			}
-			if (((((((((((((((((((((((i0 + i1) + i2) + i3) + i4) + i5) + i6) + i7) + i8) + i9) + i10) + i11) + i12) + i13) + i14) + i15) + i16) + i17) + i18) + i19) + i20) + i21) + i22) + i23 > 10000) {
-				return;
+		m = m->next;
+	}
+	if (markStack) {
+		i0 = -100;
+		i1 = -101;
+		i2 = -102;
+		i3 = -103;
+		i4 = -104;
+		i5 = -105;
+		i6 = -106;
+		i7 = -107;
+		i8 = 1;
+		i9 = 2;
+		i10 = 3;
+		i11 = 4;
+		i12 = 5;
+		i13 = 6;
+		i14 = 7;
+		i15 = 8;
+		i16 = 9;
+		i17 = 10;
+		i18 = 11;
+		i19 = 12;
+		i20 = 13;
+		i21 = 14;
+		i22 = 15;
+		i23 = 16;
+		for (;;) {
+			i0 += 1;
+			i1 += 2;
+			i2 += 3;
+			i3 += 4;
+			i4 += 5;
+			i5 += 6;
+			i6 += 7;
+			i7 += 8;
+			i8 += 9;
+			i9 += 10;
+			i10 += 11;
+			i11 += 12;
+			i12 += 13;
+			i13 += 14;
+			i14 += 15;
+			i15 += 16;
+			i16 += 17;
+			i17 += 18;
+			i18 += 19;
+			i19 += 20;
+			i20 += 21;
+			i21 += 22;
+			i22 += 23;
+			i23 += 24;
+			if ((i0 == -99 && i15 == 24)) {
+				Heap_MarkStack(32, (void*)cand, 10000);
+				break;
 			}
 		}
-		Heap_CheckFin();
-		Heap_Scan();
-		Heap_Finalize();
-		Heap_Unlock();
+		if (((((((((((((((((((((((i0 + i1) + i2) + i3) + i4) + i5) + i6) + i7) + i8) + i9) + i10) + i11) + i12) + i13) + i14) + i15) + i16) + i17) + i18) + i19) + i20) + i21) + i22) + i23 > 10000) {
+			return;
+		}
 	}
+	Heap_CheckFin();
+	Heap_Scan();
+	Heap_Finalize();
+	Heap_Unlock();
 }
 
 void Heap_RegisterFinalizer (SYSTEM_PTR obj, Heap_Finalizer finalize)

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Heap.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
 
 #ifndef Heap__h
 #define Heap__h

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Modules.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Modules.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Modules__h
 #define Modules__h

+ 11 - 1
data/bin/voc/bootstrap/unix-48/OPB.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -1738,6 +1738,16 @@ void OPB_StPar0 (OPT_Node *par0, INT16 fctno)
 			}
 			x->typ = OPT_linttyp;
 			break;
+		case -1: 
+			if (x->class == 8 || x->class == 9) {
+				OPB_err(126);
+			} else if (__IN(f, 0x60, 32)) {
+				OPB_Convert(&x, OPT_inttyp);
+			} else {
+				OPB_err(111);
+			}
+			x->typ = OPT_inttyp;
+			break;
 		case 6: 
 			OPB_MOp(23, &x);
 			break;

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPB.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPB__h
 #define OPB__h

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPC.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPC.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPC__h
 #define OPC__h

+ 7 - 3
data/bin/voc/bootstrap/unix-48/OPM.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -27,7 +27,7 @@ export INT16 OPM_AddressSize;
 static INT16 OPM_GlobalAlignment;
 export INT16 OPM_Alignment;
 export UINT32 OPM_GlobalOptions, OPM_Options;
-export INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize;
+export INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize, OPM_SetSize;
 export INT64 OPM_MaxIndex;
 export LONGREAL OPM_MinReal, OPM_MaxReal, OPM_MinLReal, OPM_MaxLReal;
 export BOOLEAN OPM_noerr;
@@ -338,7 +338,7 @@ BOOLEAN OPM_OpenPar (void)
 		OPM_LogWLn();
 		OPM_LogWStr((CHAR*)"    -O2   Original Oberon / Oberon-2:  8 bit SHORTINT, 16 bit INTEGER, 32 bit LONGINT and SET.", 95);
 		OPM_LogWLn();
-		OPM_LogWStr((CHAR*)"    -OC   Component Pascal:           16 bit SHORTINT, 32 bit INTEGER, 64 bit LONGINT and SET.", 95);
+		OPM_LogWStr((CHAR*)"    -OC   Component Pascal:           16 bit SHORTINT, 32 bit INTEGER and SET, 64 bit LONGINT.", 95);
 		OPM_LogWLn();
 		OPM_LogWStr((CHAR*)"    -OV   Alternate large model:       8 bit SHORTINT, 32 bit INTEGER, 64 bit LONGINT and SET.", 95);
 		OPM_LogWLn();
@@ -410,21 +410,25 @@ void OPM_InitOptions (void)
 			OPM_ShortintSize = 1;
 			OPM_IntegerSize = 2;
 			OPM_LongintSize = 4;
+			OPM_SetSize = 4;
 			break;
 		case 'C': 
 			OPM_ShortintSize = 2;
 			OPM_IntegerSize = 4;
 			OPM_LongintSize = 8;
+			OPM_SetSize = 4;
 			break;
 		case 'V': 
 			OPM_ShortintSize = 1;
 			OPM_IntegerSize = 4;
 			OPM_LongintSize = 8;
+			OPM_SetSize = 8;
 			break;
 		default: 
 			OPM_ShortintSize = 1;
 			OPM_IntegerSize = 2;
 			OPM_LongintSize = 4;
+			OPM_SetSize = 4;
 			break;
 	}
 	__MOVE(OPM_InstallDir, OPM_ResourceDir, 1024);

+ 2 - 2
data/bin/voc/bootstrap/unix-48/OPM.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPM__h
 #define OPM__h
@@ -9,7 +9,7 @@
 import CHAR OPM_Model[10];
 import INT16 OPM_AddressSize, OPM_Alignment;
 import UINT32 OPM_GlobalOptions, OPM_Options;
-import INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize;
+import INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize, OPM_SetSize;
 import INT64 OPM_MaxIndex;
 import LONGREAL OPM_MinReal, OPM_MaxReal, OPM_MinLReal, OPM_MaxLReal;
 import BOOLEAN OPM_noerr;

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPP.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPP.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPP__h
 #define OPP__h

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPS.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPS.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPS__h
 #define OPS__h

+ 2 - 1
data/bin/voc/bootstrap/unix-48/OPT.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -2131,6 +2131,7 @@ export void *OPT__init(void)
 	OPT_EnterProc((CHAR*)"CAP", 3);
 	OPT_EnterProc((CHAR*)"ORD", 4);
 	OPT_EnterProc((CHAR*)"ENTIER", 5);
+	OPT_EnterProc((CHAR*)"FLOOR", -1);
 	OPT_EnterProc((CHAR*)"ODD", 6);
 	OPT_EnterProc((CHAR*)"MIN", 7);
 	OPT_EnterProc((CHAR*)"MAX", 8);

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPT.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPT__h
 #define OPT__h

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPV.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/OPV.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPV__h
 #define OPV__h

+ 136 - 1
data/bin/voc/bootstrap/unix-48/Out.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -16,6 +16,8 @@ static INT16 Out_in;
 
 
 export void Out_Char (CHAR ch);
+export void Out_ConvertL (LONGREAL x, INT16 n, CHAR *d, ADDRESS d__len);
+export INT16 Out_Expo (REAL x);
 export void Out_Flush (void);
 export void Out_Hex (INT64 x, INT64 n);
 export void Out_Int (INT64 x, INT64 n);
@@ -24,6 +26,7 @@ export void Out_Ln (void);
 export void Out_LongReal (LONGREAL x, INT16 n);
 export void Out_Open (void);
 export void Out_Real (REAL x, INT16 n);
+export void Out_RealFix (REAL x, INT16 n, INT16 k);
 static void Out_RealP (LONGREAL x, INT16 n, BOOLEAN long_);
 export void Out_String (CHAR *str, ADDRESS str__len);
 export LONGREAL Out_Ten (INT16 e);
@@ -328,6 +331,138 @@ void Out_LongReal (LONGREAL x, INT16 n)
 	Out_RealP(x, n, 1);
 }
 
+void Out_ConvertL (LONGREAL x, INT16 n, CHAR *d, ADDRESS d__len)
+{
+	INT32 i, j, k;
+	if (x < (LONGREAL)0) {
+		x = -x;
+	}
+	k = 0;
+	if (n > 9) {
+		i = __SHORT(__ENTIER(x / (LONGREAL)(LONGREAL)1000000000), 2147483648LL);
+		j = __SHORT(__ENTIER(x - i * (LONGREAL)1000000000), 2147483648LL);
+		if (j < 0) {
+			j = 0;
+		}
+		while (k < 9) {
+			d[__X(k, d__len)] = __CHR((int)__MOD(j, 10) + 48);
+			j = __DIV(j, 10);
+			k += 1;
+		}
+	} else {
+		i = __SHORT(__ENTIER(x), 2147483648LL);
+	}
+	while (k < n) {
+		d[__X(k, d__len)] = __CHR((int)__MOD(i, 10) + 48);
+		i = __DIV(i, 10);
+		k += 1;
+	}
+}
+
+INT16 Out_Expo (REAL x)
+{
+	INT16 i;
+	__GET((ADDRESS)&x + 2, i, INT16);
+	return __MASK(__ASHR(i, 7), -256);
+}
+
+static struct RealFix__13 {
+	INT16 *i;
+	CHAR (*d)[9];
+	struct RealFix__13 *lnk;
+} *RealFix__13_s;
+
+static void dig__14 (INT16 n);
+static void seq__16 (CHAR ch, INT16 n);
+
+static void seq__16 (CHAR ch, INT16 n)
+{
+	while (n > 0) {
+		Out_Char(ch);
+		n -= 1;
+	}
+}
+
+static void dig__14 (INT16 n)
+{
+	while (n > 0) {
+		*RealFix__13_s->i -= 1;
+		Out_Char((*RealFix__13_s->d)[__X(*RealFix__13_s->i, 9)]);
+		n -= 1;
+	}
+}
+
+void Out_RealFix (REAL x, INT16 n, INT16 k)
+{
+	INT16 e, i;
+	CHAR sign;
+	REAL x0;
+	CHAR d[9];
+	struct RealFix__13 _s;
+	_s.i = &i;
+	_s.d = (void*)d;
+	_s.lnk = RealFix__13_s;
+	RealFix__13_s = &_s;
+	e = Out_Expo(x);
+	if (k < 0) {
+		k = 0;
+	}
+	if (e == 0) {
+		seq__16(' ', (n - k) - 2);
+		Out_Char('0');
+		seq__16(' ', k + 1);
+	} else if (e == 255) {
+		Out_String((CHAR*)" NaN", 5);
+		seq__16(' ', n - 4);
+	} else {
+		e = __ASHR((e - 127) * 77, 8);
+		if (x < (REAL)0) {
+			sign = '-';
+			x = -x;
+		} else {
+			sign = ' ';
+		}
+		if (e >= 0) {
+			x = (x / (LONGREAL)Out_Ten(e));
+		} else {
+			x = (Out_Ten(-e) * x);
+		}
+		if (x >= (REAL)10) {
+			x =   1.0000000e-001 * x;
+			e += 1;
+		}
+		if (k + e >= 8) {
+			k = 8 - e;
+		} else if (k + e < 0) {
+			k = -e;
+			x = (REAL)0;
+		}
+		x0 = Out_Ten(k + e);
+		x = x0 * x +   5.0000000e-001;
+		if (x >= (REAL)10 * x0) {
+			e += 1;
+		}
+		e += 1;
+		i = k + e;
+		Out_ConvertL(x, i, (void*)d, 9);
+		if (e > 0) {
+			seq__16(' ', ((n - e) - k) - 2);
+			Out_Char(sign);
+			dig__14(e);
+			Out_Char('.');
+			dig__14(k);
+		} else {
+			seq__16(' ', (n - k) - 3);
+			Out_Char(sign);
+			Out_Char('0');
+			Out_Char('.');
+			seq__16('0', -e);
+			dig__14(k + e);
+		}
+	}
+	RealFix__13_s = _s.lnk;
+}
+
 
 export void *Out__init(void)
 {

+ 4 - 1
data/bin/voc/bootstrap/unix-48/Out.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Out__h
 #define Out__h
@@ -10,6 +10,8 @@ import BOOLEAN Out_IsConsole;
 
 
 import void Out_Char (CHAR ch);
+import void Out_ConvertL (LONGREAL x, INT16 n, CHAR *d, ADDRESS d__len);
+import INT16 Out_Expo (REAL x);
 import void Out_Flush (void);
 import void Out_Hex (INT64 x, INT64 n);
 import void Out_Int (INT64 x, INT64 n);
@@ -17,6 +19,7 @@ import void Out_Ln (void);
 import void Out_LongReal (LONGREAL x, INT16 n);
 import void Out_Open (void);
 import void Out_Real (REAL x, INT16 n);
+import void Out_RealFix (REAL x, INT16 n, INT16 k);
 import void Out_String (CHAR *str, ADDRESS str__len);
 import LONGREAL Out_Ten (INT16 e);
 import void *Out__init(void);

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Platform.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Platform.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Platform__h
 #define Platform__h

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Reals.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Reals.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Reals__h
 #define Reals__h

+ 218 - 0
data/bin/voc/bootstrap/unix-48/SYSTEM.c

@@ -0,0 +1,218 @@
+/*
+*   The body prefix file of the voc(jet backend) runtime system, Version 1.0
+*
+*   Copyright (c) Software Templ, 1994, 1995
+*
+*   Module SYSTEM is subject to change any time without prior notification.
+*   Software Templ disclaims all warranties with regard to module SYSTEM,
+*   in particular shall Software Templ not be liable for any damage resulting
+*   from inappropriate use or modification of module SYSTEM.
+*
+*   Version 1.1  jt, 24.11.95  fixes for correct pointer arithmetic on Cray computers
+*   jt 31.1.2007  ANSI prototypes for malloc and exit in order to avoid cc warnings
+*
+*/
+
+#include "SYSTEM.h"
+#include "stdarg.h"
+#include <signal.h>
+
+
+// Procedure verions of SYSTEM.H versions used when a multiply accessed
+// parameter has side effects.
+
+
+
+
+INT64 SYSTEM_DIV(INT64 x, INT64 y)
+{
+  if (x == 0) return 0;
+  if (x >= 0)
+    if (y >= 0) {return x/y;}
+    else        {return -((x-y-1)/(-y));}
+  else
+    if (y >= 0) {return -((y-x-1)/y);}
+    else        {return (-x)/(-y);}
+}
+
+INT64 SYSTEM_MOD(INT64 x, INT64 y)
+{
+  if (x == 0) return 0;
+  if (x >= 0)
+    if (y >= 0) {return x % y;}
+    else        {return (y+1) + ((x-1) % (-y));}
+  else
+    if (y >= 0) {return (y-1) - ((-x-1) % y);}
+    else        {return -((-x) % (-y));}
+}
+
+INT64 SYSTEM_ENTIER(double x)
+{
+    INT64 y;
+    if (x >= 0)
+        return (INT64)x;
+    else {
+        y = (INT64)x;
+        if (y <= x) return y; else return y - 1;
+    }
+}
+
+
+
+void SYSTEM_INHERIT(ADDRESS *t, ADDRESS *t0)
+{
+    t -= __TPROC0OFF;
+    t0 -= __TPROC0OFF;
+    while (*t0 != __EOM) {*t = *t0; t--; t0--;}
+}
+
+
+void SYSTEM_ENUMP(void *adr, ADDRESS n, void (*P)())
+{
+    while (n > 0) {
+        P((ADDRESS)(*((void**)(adr))));
+        adr = ((void**)adr) + 1;
+        n--;
+    }
+}
+
+void SYSTEM_ENUMR(void *adr, ADDRESS *typ, ADDRESS size, ADDRESS n, void (*P)())
+{
+    ADDRESS *t, off;
+    typ++;
+    while (n > 0) {
+        t = typ;
+        off = *t;
+        while (off >= 0) {P(*(ADDRESS*)((char*)adr+off)); t++; off = *t;}
+        adr = ((char*)adr) + size;
+        n--;
+    }
+}
+
+extern void Heap_Lock();
+extern void Heap_Unlock();
+
+SYSTEM_PTR SYSTEM_NEWARR(ADDRESS *typ, ADDRESS elemsz, int elemalgn, int nofdim, int nofdyn, ...)
+{
+    ADDRESS nofelems, size, dataoff, n, nptr, *x, *p, nofptrs, i, *ptab, off;
+    va_list ap;
+    va_start(ap, nofdyn);
+    nofelems = 1;
+    while (nofdim > 0) {
+        nofelems = nofelems * va_arg(ap, ADDRESS); nofdim--;
+        if (nofelems <= 0) __HALT(-20);
+    }
+    va_end(ap);
+    dataoff = nofdyn * sizeof(ADDRESS);
+    if (elemalgn > sizeof(ADDRESS)) {
+        n = dataoff % elemalgn;
+        if (n != 0) dataoff += elemalgn - n;
+    }
+    size = dataoff + nofelems * elemsz;
+    Heap_Lock();
+    if (typ == NIL) {
+        /* element typ does not contain pointers */
+        x = Heap_NEWBLK(size);
+    }
+    else if (typ == (ADDRESS*)POINTER__typ) {
+        /* element type is a pointer */
+        x = Heap_NEWBLK(size + nofelems * sizeof(ADDRESS));
+        p = (ADDRESS*)(ADDRESS)x[-1];
+        p[-nofelems] = *p;  /* build new type desc in situ: 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */
+        p -= nofelems - 1; n = 1;   /* n =1 for skipping the size field */
+        while (n <= nofelems) {*p = n*sizeof(ADDRESS); p++; n++;}
+        *p = - (nofelems + 1) * sizeof(ADDRESS);    /* sentinel */
+        x[-1] -= nofelems * sizeof(ADDRESS);
+    }
+    else {
+        /* element type is a record that contains pointers */
+        ptab = typ + 1; nofptrs = 0;
+        while (ptab[nofptrs] >= 0) {nofptrs++;} /* number of pointers per element */
+        nptr = nofelems * nofptrs;  /* total number of pointers */
+        x = Heap_NEWBLK(size + nptr * sizeof(ADDRESS));
+        p = (ADDRESS*)(ADDRESS)x[- 1];
+        p[-nptr] = *p;  /* build new type desc in situ; 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */
+        p -= nptr - 1; n = 0; off = dataoff;
+        while (n < nofelems) {i = 0;
+            while (i < nofptrs) {*p = off + ptab[i]; p++; i++;}
+            off += elemsz; n++;
+        }
+        *p = - (nptr + 1) * sizeof(ADDRESS);    /* sentinel */
+        x[-1] -= nptr * sizeof(ADDRESS);
+    }
+    if (nofdyn != 0) {
+        /* setup len vector for index checks */
+        va_start(ap, nofdyn);
+        p = x;
+        while (nofdyn > 0) {*p = va_arg(ap, ADDRESS); p++, nofdyn--;}
+        va_end(ap);
+    }
+    Heap_Unlock();
+    return x;
+}
+
+
+
+
+typedef void (*SystemSignalHandler)(INT32); // = Platform_SignalHandler
+
+#ifndef _WIN32
+
+    SystemSignalHandler handler[3] = {0};
+
+    // Provide signal handling for Unix based systems
+    void signalHandler(int s) {
+        if (s >= 2  &&  s <= 4) handler[s-2](s);
+        // (Ignore other signals)
+    }
+
+    void SystemSetHandler(int s, ADDRESS h) {
+        if (s >= 2 && s <= 4) {
+            int needtosetsystemhandler = handler[s-2] == 0;
+            handler[s-2] = (SystemSignalHandler)h;
+            if (needtosetsystemhandler) {signal(s, signalHandler);}
+        }
+    }
+
+#else
+
+    // Provides Windows callback handlers for signal-like scenarios
+    #include "WindowsWrapper.h"
+
+    SystemSignalHandler SystemInterruptHandler = 0;
+    SystemSignalHandler SystemQuitHandler      = 0;
+    BOOL ConsoleCtrlHandlerSet = FALSE;
+
+    BOOL WINAPI SystemConsoleCtrlHandler(DWORD ctrlType) {
+        if ((ctrlType == CTRL_C_EVENT) || (ctrlType == CTRL_BREAK_EVENT)) {
+            if (SystemInterruptHandler) {
+                SystemInterruptHandler(2); // SIGINT
+                return TRUE;
+            }
+        } else { // Close, logoff or shutdown
+            if (SystemQuitHandler) {
+                SystemQuitHandler(3); // SIGQUIT
+                return TRUE;
+            }
+        }
+        return FALSE;
+    }
+
+    void EnsureConsoleCtrlHandler() {
+        if (!ConsoleCtrlHandlerSet) {
+        SetConsoleCtrlHandler(SystemConsoleCtrlHandler, TRUE);
+            ConsoleCtrlHandlerSet = TRUE;
+        }
+    }
+
+    void SystemSetInterruptHandler(ADDRESS h) {
+        EnsureConsoleCtrlHandler();
+        SystemInterruptHandler = (SystemSignalHandler)h;
+    }
+
+    void SystemSetQuitHandler(ADDRESS h) {
+        EnsureConsoleCtrlHandler();
+        SystemQuitHandler = (SystemSignalHandler)h;
+    }
+
+#endif

+ 330 - 0
data/bin/voc/bootstrap/unix-48/SYSTEM.h

@@ -0,0 +1,330 @@
+#ifndef SYSTEM__h
+#define SYSTEM__h
+
+
+// 64 bit system detection
+
+#if (__SIZEOF_POINTER__ == 8) || defined (_LP64) || defined(__LP64__) || defined(_WIN64)
+  #define o__64
+#endif
+
+
+// Declare memcpy in a way compatible with C compilers intrinsic
+// built in implementations.
+
+#if defined (o__64)
+  #if defined(_WIN64)
+    typedef unsigned long long size_t;
+  #else
+    typedef unsigned long      size_t;
+  #endif
+#else
+  #if defined(__OpenBSD__)
+    typedef unsigned long      size_t;
+  #else
+    typedef unsigned int       size_t;
+  #endif
+#endif
+
+#define _SIZE_T_DECLARED // For FreeBSD
+#define _SIZE_T_DEFINED_ // For OpenBSD
+
+void *memcpy(void *dest, const void *source, size_t size);
+#if defined _MSC_VER
+#define alloca _alloca
+#endif
+void *alloca(size_t size);
+
+
+// Declare fixed size versions of basic intger types
+
+#if defined (o__64) && !defined(_WIN64)
+  // LP64
+  typedef long               INT64;
+  typedef unsigned long      UINT64;
+#else
+  // ILP32 or LLP64
+  typedef long long          INT64;
+  typedef unsigned long long UINT64;
+#endif
+
+typedef int                  INT32;
+typedef unsigned int         UINT32;
+
+typedef short int            INT16;
+typedef unsigned short int   UINT16;
+
+typedef signed char          INT8;
+typedef unsigned char        UINT8;
+
+
+// The compiler uses 'import' and 'export' which translate to 'extern' and
+// nothing respectively.
+
+#define import extern
+#define export
+
+
+
+// Known constants
+
+#define NIL          ((void*)0)
+#define __MAXEXT     16
+#define POINTER__typ ((ADDRESS*)(1))  // not NIL and not a valid type
+
+
+// Oberon types
+
+typedef INT8   BOOLEAN;
+typedef INT8   SYSTEM_BYTE;
+typedef UINT8  CHAR;
+typedef float  REAL;
+typedef double LONGREAL;
+typedef void*  SYSTEM_PTR;
+
+
+
+// 'ADDRESS' is a synonym for an integer of pointer size
+
+#if defined (o__64)
+  #define ADDRESS INT64
+#else
+  #define ADDRESS INT32
+#endif
+
+
+
+// ----------------------------------------------------------------------
+// ----------------------------------------------------------------------
+
+
+
+// OS Memory allocation interfaces are in PlatformXXX.Mod
+
+extern ADDRESS Platform_OSAllocate (ADDRESS size);
+extern void    Platform_OSFree     (ADDRESS addr);
+
+
+// Assertions and Halts
+
+extern void Modules_Halt(INT32 x);
+extern void Modules_AssertFail(INT32 x);
+
+#define __HALT(x)         Modules_Halt((INT32)(x))
+#define __ASSERT(cond, x) if (!(cond)) Modules_AssertFail((INT32)(x))
+
+
+// Index checking
+
+static inline INT64 __XF(UINT64 i, UINT64 ub) {if (i >= ub) {__HALT(-2);} return i;}
+#define __X(i, ub) (((i)<(ub))?i:(__HALT(-2),0))
+
+
+// Range checking, and checked SHORT and CHR functions
+
+static inline INT64 __RF(UINT64 i, UINT64 ub) {if (i >= ub) {__HALT(-8);} return i;}
+#define __R(i, ub)      (((i)<(ub))?i:(__HALT(-8),0))
+#define __SHORT(x, ub)  ((int)((UINT64)(x)+(ub)<(ub)+(ub)?(x):(__HALT(-8),0)))
+#define __SHORTF(x, ub) ((int)(__RF((x)+(ub),(ub)+(ub))-(ub)))
+#define __CHR(x)        ((CHAR)__R(x, 256))
+#define __CHRF(x)       ((CHAR)__RF(x, 256))
+
+
+
+// Signal handling in SYSTEM.c
+
+#ifndef _WIN32
+  extern void SystemSetHandler(int s, ADDRESS h);
+#else
+  extern void SystemSetInterruptHandler(ADDRESS h);
+  extern void SystemSetQuitHandler     (ADDRESS h);
+#endif
+
+
+
+// String comparison
+
+static inline int __str_cmp(CHAR *x, CHAR *y){
+  INT64 i = 0;
+  CHAR ch1, ch2;
+  do {ch1 = x[i]; ch2 = y[i]; i++;
+    if (!ch1) return -(int)ch2;
+  } while (ch1==ch2);
+  return (int)ch1 - (int)ch2;
+}
+#define __STRCMP(a,b) __str_cmp((CHAR*)(a), (CHAR*)(b))
+
+
+
+// Inline string, record and array copy
+
+#define __COPY(s, d, n) {char*_a=(void*)s,*_b=(void*)d; LONGINT _i=0,_t=n-1; \
+                         while(_i<_t&&((_b[_i]=_a[_i])!=0)){_i++;};_b[_i]=0;}
+#define __DUPARR(v, t)  v=(void*)memcpy(v##__copy,v,sizeof(t))
+#define __DUP(x, l, t)  x=(void*)memcpy(alloca(l*sizeof(t)),x,l*sizeof(t))
+#define __DEL(x)
+
+
+/* SYSTEM ops */
+
+#define __VAL(t, x)     (*(t*)&(x))
+
+#define __GET(a, x, t)  x=*(t*)(ADDRESS)(a)
+#define __PUT(a, x, t)  *(t*)(ADDRESS)(a)=x
+
+#define __LSHL(x, n, s) ((INT##s)((UINT##s)(x)<<(n)))
+#define __LSHR(x, n, s) ((INT##s)((UINT##s)(x)>>(n)))
+#define __LSH(x, n, s)  ((n)>=0? __LSHL(x, n, s): __LSHR(x, -(n), s))
+
+#define __ROTL(x, n, s) ((INT##s)((UINT##s)(x)<<(n)|(UINT##s)(x)>>(s-(n))))
+#define __ROTR(x, n, s) ((INT##s)((UINT##s)(x)>>(n)|(UINT##s)(x)<<(s-(n))))
+#define __ROT(x, n, s)  ((n)>=0? __ROTL(x, n, s): __ROTR(x, -(n), s))
+
+#define __ASHL(x, n)    ((INT64)(x)<<(n))
+#define __ASHR(x, n)    ((INT64)(x)>>(n))
+#define __ASH(x, n)     ((n)>=0?__ASHL(x,n):__ASHR(x,-(n)))
+static inline INT64 SYSTEM_ASH(INT64 x, INT64 n) {return __ASH(x,n);}
+#define __ASHF(x, n)    SYSTEM_ASH((INT64)(x), (INT64)(n))
+
+#define __MOVE(s, d, n) memcpy((char*)(ADDRESS)(d),(char*)(ADDRESS)(s),n)
+
+
+extern INT64 SYSTEM_DIV(INT64 x, INT64 y);
+#define __DIVF(x, y) SYSTEM_DIV(x, y)
+#define __DIV(x, y) (((x)>0 && (y)>0) ? (x)/(y) : __DIVF(x, y))
+
+
+extern INT64 SYSTEM_MOD(INT64 x, INT64 y);
+#define __MODF(x, y) SYSTEM_MOD(x, y)
+#define __MOD(x, y) (((x)>0 && (y)>0) ? (x)%(y) : __MODF(x, y))
+
+
+extern INT64 SYSTEM_ENTIER (double x);
+#define __ENTIER(x) SYSTEM_ENTIER(x)
+
+
+#define __ABS(x) (((x)<0)?-(x):(x))
+
+static inline INT32 SYSTEM_ABS64(INT64 i) {return i >= 0 ? i : -i;}
+static inline INT64 SYSTEM_ABS32(INT32 i) {return i >= 0 ? i : -i;}
+#define __ABSF(x) ((sizeof(x) <= 4) ? SYSTEM_ABS32(x) : SYSTEM_ABS64(x))
+
+static inline double SYSTEM_ABSD(double i) {return i >= 0.0 ? i : -i;}
+#define __ABSFD(x) SYSTEM_ABSD(x)
+
+#define __CAP(ch)       ((CHAR)((ch)&0x5f))
+#define __ODD(x)        ((x)&1)
+
+#define __IN(x, s, size)     (((unsigned int)(x))<size && ((((UINT##size)(s))>>(x))&1))
+// todo tested versions of SETOF and SETRNG: check that x, l and h fit size
+#define __SETOF(x, size)     ((UINT##size)1<<(x))
+#define __SETRNG(l, h, size) ((~(UINT##size)0<<(l))&~(UINT##size)0>>(size-1-(h)))
+
+#define __MASK(x, m) ((x)&~(m))
+#define __BIT(x, n)  (*(UINT64*)(x)>>(n)&1)
+
+
+
+// Runtime checks
+
+#define __RETCHK     __retchk: __HALT(-3); return 0;
+#define __CASECHK    __HALT(-4)
+#define __WITHCHK    __HALT(-7)
+
+
+#define __IS(tag, typ, level) (*(tag-(__BASEOFF-level))==(ADDRESS)typ##__typ)
+#define  __TYPEOF(p)          (*(((ADDRESS**)(p))-1))
+#define __ISP(p, typ, level)  __IS(__TYPEOF(p),typ,level)
+
+
+#define __GUARDP(p, typ, level)    ((typ*)(__ISP(p,typ,level)?p:(__HALT(-5),p)))
+#define __GUARDR(r, typ, level)    (*((typ*)(__IS(r##__typ,typ,level)?r:(__HALT(-5),r))))
+#define __GUARDA(p, typ, level)    ((struct typ*)(__IS(__TYPEOF(p),typ,level)?p:(__HALT(-5),p)))
+#define __GUARDEQR(p, dyntyp, typ) if(dyntyp!=typ##__typ) __HALT(-6);*(p)
+#define __GUARDEQP(p, typ)         if(__TYPEOF(p)!=typ##__typ)__HALT(-6);*((typ*)p)
+
+
+
+// Module entry/registration/exit
+
+extern void       Heap_REGCMD();
+extern SYSTEM_PTR Heap_REGMOD();
+extern void       Heap_REGTYP();
+extern void       Heap_INCREF();
+
+#define __DEFMOD              static void *m; if (m!=0) {return m;}
+#define __REGCMD(name, cmd)   Heap_REGCMD(m, (CHAR*)name, cmd)
+#define __REGMOD(name, enum)  if (m==0) {m = Heap_REGMOD((CHAR*)name,enum);}
+#define __ENDMOD              return m
+#define __MODULE_IMPORT(name) Heap_INCREF(name##__init())
+
+
+
+// Main module initialisation, registration and finalisation
+
+extern void Modules_Init(INT32 argc, ADDRESS argv);
+extern void Heap_FINALL();
+
+#define __INIT(argc, argv)    static void *m; Modules_Init(argc, (ADDRESS)&argv);
+#define __REGMAIN(name, enum) m = Heap_REGMOD((CHAR*)name,enum)
+#define __FINI                Heap_FINALL(); return 0
+
+
+// Memory allocation
+
+extern SYSTEM_PTR Heap_NEWBLK (ADDRESS size);
+extern SYSTEM_PTR Heap_NEWREC (ADDRESS tag);
+extern SYSTEM_PTR SYSTEM_NEWARR(ADDRESS*, ADDRESS, int, int, int, ...);
+
+#define __SYSNEW(p, len) p = Heap_NEWBLK((ADDRESS)(len))
+#define __NEW(p, t)      p = Heap_NEWREC((ADDRESS)t##__typ)
+#define __NEWARR         SYSTEM_NEWARR
+
+
+
+/* Type handling */
+
+extern void SYSTEM_INHERIT(ADDRESS *t, ADDRESS *t0);
+extern void SYSTEM_ENUMP  (void *adr, ADDRESS n, void (*P)());
+extern void SYSTEM_ENUMR  (void *adr, ADDRESS *typ, ADDRESS size, ADDRESS n, void (*P)());
+
+
+#define __TDESC(t, m, n)                                                \
+  static struct t##__desc {                                             \
+    ADDRESS  tproc[m];         /* Proc for each ptr field            */ \
+    ADDRESS  tag;                                                       \
+    ADDRESS  next;             /* Module table type list points here */ \
+    ADDRESS  level;                                                     \
+    ADDRESS  module;                                                    \
+    char     name[24];                                                  \
+    ADDRESS  basep[__MAXEXT];  /* List of bases this extends         */ \
+    ADDRESS  reserved;                                                  \
+    ADDRESS  blksz;            /* xxx_typ points here                */ \
+    ADDRESS  ptr[n+1];         /* Offsets of ptrs up to -ve sentinel */ \
+  } t##__desc
+
+#define __BASEOFF   (__MAXEXT+1)                           // blksz as index to base.
+#define __TPROC0OFF (__BASEOFF+24/sizeof(ADDRESS)+5)       // blksz as index to tproc IFF m=1.
+#define __EOM 1
+#define __TDFLDS(name, size)          {__EOM}, 1, 0, 0, 0, name, {0}, 0, size
+#define __ENUMP(adr, n, P)            SYSTEM_ENUMP(adr, (ADDRESS)(n), P)
+#define __ENUMR(adr, typ, size, n, P) SYSTEM_ENUMR(adr, typ, (ADDRESS)(size), (ADDRESS)(n), P)
+
+#define __INITYP(t, t0, level) \
+  t##__typ               = (ADDRESS*)&t##__desc.blksz;                                                    \
+  memcpy(t##__desc.basep, t0##__typ - __BASEOFF, level*sizeof(ADDRESS));                                  \
+  t##__desc.basep[level] = (ADDRESS)t##__typ;                                                             \
+  t##__desc.module       = (ADDRESS)m;                                                                    \
+  if(t##__desc.blksz!=sizeof(struct t)) __HALT(-15);                                                      \
+  t##__desc.blksz        = (t##__desc.blksz+5*sizeof(ADDRESS)-1)/(4*sizeof(ADDRESS))*(4*sizeof(ADDRESS)); \
+  Heap_REGTYP(m, (ADDRESS)&t##__desc.next);                                                               \
+  SYSTEM_INHERIT(t##__typ, t0##__typ)
+
+// Oberon-2 type bound procedures support
+#define __INITBP(t, proc, num)            *(t##__typ-(__TPROC0OFF+num))=(ADDRESS)proc
+#define __SEND(typ, num, funtyp, parlist) ((funtyp)((ADDRESS)*(typ-(__TPROC0OFF+num))))parlist
+
+
+
+
+#endif

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Strings.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Strings.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Strings__h
 #define Strings__h

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Texts.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/Texts.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Texts__h
 #define Texts__h

+ 1 - 1
data/bin/voc/bootstrap/unix-48/VT100.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/VT100.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef VT100__h
 #define VT100__h

+ 10 - 0
data/bin/voc/bootstrap/unix-48/WindowsWrapper.h

@@ -0,0 +1,10 @@
+// WindowsWrapper.h
+//
+// Includes Windows.h while avoiding conflicts with Oberon types.
+
+
+#define BOOLEAN _BOOLEAN
+#define CHAR    _CHAR
+#include <windows.h>
+#undef BOOLEAN
+#undef CHAR

+ 1 - 1
data/bin/voc/bootstrap/unix-48/extTools.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-48/extTools.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef extTools__h
 #define extTools__h

+ 2 - 2
data/bin/voc/bootstrap/unix-88/Compiler.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspamS */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspamS */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -89,7 +89,7 @@ static void Compiler_PropagateElementaryTypeSizes (void)
 	OPT_sintobj->typ = OPT_sinttyp;
 	OPT_intobj->typ = OPT_inttyp;
 	OPT_lintobj->typ = OPT_linttyp;
-	switch (OPM_LongintSize) {
+	switch (OPM_SetSize) {
 		case 4: 
 			OPT_settyp = OPT_set32typ;
 			break;

+ 2 - 2
data/bin/voc/bootstrap/unix-88/Configuration.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -19,6 +19,6 @@ export void *Configuration__init(void)
 	__DEFMOD;
 	__REGMOD("Configuration", 0);
 /* BEGIN */
-	__MOVE("2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8.", Configuration_versionLong, 76);
+	__MOVE("2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8.", Configuration_versionLong, 76);
 	__ENDMOD;
 }

+ 1 - 1
data/bin/voc/bootstrap/unix-88/Configuration.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Configuration__h
 #define Configuration__h

+ 197 - 0
data/bin/voc/bootstrap/unix-88/Errors.Txt

@@ -0,0 +1,197 @@
+The first line of this file is ignored.
+Any line not starting /^ *[0-9]/ is ignored.
+There should be only one space between the number and the message text.
+
+Compiler error messages
+  0 undeclared identifier
+  1 multiply defined identifier
+  2 illegal character in number
+  3 illegal character in string
+  4 identifier does not match procedure name
+  5 comment not closed
+
+  9 '=' expected
+
+ 12 type definition starts with incorrect symbol
+ 13 factor starts with incorrect symbol
+ 14 statement starts with incorrect symbol
+ 15 declaration followed by incorrect symbol
+ 16 MODULE expected
+
+ 18 '.' missing
+ 19 ',' missing
+ 20 ':' missing
+
+ 22 ')' missing
+ 23 ']' missing
+ 24 '}' missing
+ 25 OF missing
+ 26 THEN missing
+ 27 DO missing
+ 28 TO missing
+
+ 30 '(' missing
+
+ 34 ':=' missing
+ 35 ',' or OF expected
+
+ 38 identifier expected
+ 39 ';' missing
+
+ 41 END missing
+
+ 44 UNTIL missing
+
+ 46 EXIT not within loop statement
+ 47 illegally marked identifier
+
+ 50 expression should be constant
+ 51 constant not an integer
+ 52 identifier does not denote a type
+ 53 identifier does not denote a record type
+ 54 result type of procedure is not a basic type
+ 55 procedure call of a function
+ 56 assignment to non-variable
+ 57 pointer not bound to record or array type
+ 58 recursive type definition
+ 59 illegal open array parameter
+ 60 wrong type of case label
+ 61 inadmissible type of case label
+ 62 case label defined more than once
+ 63 illegal value of constant
+ 64 more actual than formal parameters
+ 65 fewer actual than formal parameters
+ 66 element types of actual array and formal open array differ
+ 67 actual parameter corresponding to open array is not an array
+ 68 control variable must be integer
+ 69 parameter must be an integer constant
+ 70 pointer or VAR record required as formal receiver
+ 71 pointer expected as actual receiver
+ 72 procedure must be bound to a record of the same scope
+ 73 procedure must have level 0
+ 74 procedure unknown in base type
+ 75 invalid call of base procedure
+ 76 this variable (field) is read only
+ 77 object is not a record
+ 78 dereferenced object is not a variable
+ 79 indexed object is not a variable
+ 80 index expression is not an integer
+ 81 index out of specified bounds
+ 82 indexed variable is not an array
+ 83 undefined record field
+ 84 dereferenced variable is not a pointer
+ 85 guard or test type is not an extension of variable type
+ 86 guard or testtype is not a pointer
+ 87 guarded or tested variable is neither a pointer nor a VAR-parameter record
+ 88 open array not allowed as variable, record field or array element
+
+ 92 operand of IN not an integer, or not a set
+ 93 set element type is not an integer
+ 94 operand of & is not of type BOOLEAN
+ 95 operand of OR is not of type BOOLEAN
+ 96 operand not applicable to (unary) +
+ 97 operand not applicable to (unary) -
+ 98 operand of ~ is not of type BOOLEAN
+ 99 ASSERT fault
+100 incompatible operands of dyadic operator
+101 operand type inapplicable to *
+102 operand type inapplicable to /
+103 operand type inapplicable to DIV
+104 operand type inapplicable to MOD
+105 operand type inapplicable to +
+106 operand type inapplicable to -
+107 operand type inapplicable to = or #
+108 operand type inapplicable to relation
+109 overriding method must be exported
+110 operand is not a type
+111 operand inapplicable to (this) function
+112 operand is not a variable
+113 incompatible assignment
+114 string too long to be assigned
+115 parameter doesn't match
+116 number of parameters doesn't match
+117 result type doesn't match
+118 export mark doesn't match with forward declaration
+119 redefinition textually precedes procedure bound to base type
+120 type of expression following IF, WHILE, UNTIL or ASSERT is not BOOLEAN
+121 called object is not a procedure (or is an interrupt procedure)
+122 actual VAR-parameter is not a variable
+123 type of actual parameter is not identical with that of formal VAR-parameter
+124 type of result expression differs from that of procedure
+125 type of case expression is neither INTEGER nor CHAR
+126 this expression cannot be a type or a procedure
+127 illegal use of object
+128 unsatisfied forward reference
+129 unsatisfied forward procedure
+130 WITH clause does not specify a variable
+131 LEN not applied to array
+132 dimension in LEN too large or negative
+135 SYSTEM not imported
+150 key inconsistency of imported module
+151 incorrect symbol file
+152 symbol file of imported module not found
+153 object or symbol file not opened (disk full?)
+154 recursive import not allowed
+155 generation of new symbol file not allowed
+156 parameter file not found
+157 syntax error in parameter file
+
+Limitations of implementation
+200 not yet implemented
+201 lower bound of set range greater than higher bound
+202 set element greater than MAX(SET) or less than 0
+203 number too large
+204 product too large
+205 division by zero
+206 sum too large
+207 difference too large
+208 overflow in arithmetic shift
+209 case range too large
+213 too many cases in case statement
+218 illegal value of parameter (0 <= p < 256)
+219 machine registers cannot be accessed
+220 illegal value of parameter
+221 too many pointers in a record
+222 too many global pointers
+223 too many record types
+224 too many pointer types
+225 address of pointer variable too large (move forward in text)
+226 too many exported procedures
+227 too many imported modules
+228 too many exported structures
+229 too many nested records for import
+230 too many constants (strings) in module
+231 too many link table entries (external procedures)
+232 too many commands in module
+233 record extension hierarchy too high
+234 export of recursive type not allowed
+240 identifier too long
+241 string too long
+242 address overflow
+244 cyclic type definition not allowed
+245 guarded pointer variable may be manipulated by non-local operations; use auxiliary pointer variable
+
+Compiler Warnings
+301 implicit type cast
+306 inappropriate symbol file ignored
+307 no ELSE symbol after CASE statement sequence may lead to trap
+308 SYSTEM.VAL result includes memory past end of source variable; use SYSTEM.GET
+309 you should name this parameter type, or else no actual parameter will match
+310 redefining standard predefined type
+
+Run-time Error Messages
+ -1 assertion failed, cf. SYSTEM_assert
+ -2 invalid array index
+ -3 function procedure without RETURN statement
+ -4 invalid case in CASE statement
+ -5 type guard failed
+ -6 implicit type guard in record assignment failed
+ -7 invalid case in WITH statement
+ -8 value out of range
+ -9 (delayed) interrupt
+-10 NIL access
+-11 alignment error
+-12 zero divide
+-13 arithmetic overflow/underflow
+-14 invalid function argument
+-15 internal error

+ 4 - 2
data/bin/voc/bootstrap/unix-88/Files.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -966,7 +966,9 @@ void Files_WriteSet (Files_Rider *R, ADDRESS *R__typ, UINT32 x)
 {
 	CHAR b[4];
 	INT32 i;
-	i = (INT32)x;
+	UINT64 y;
+	y = x;
+	i = __VAL(INT32, y);
 	b[0] = __CHR(i);
 	b[1] = __CHR(__ASHR(i, 8));
 	b[2] = __CHR(__ASHR(i, 16));

+ 1 - 1
data/bin/voc/bootstrap/unix-88/Files.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Files__h
 #define Files__h

+ 68 - 70
data/bin/voc/bootstrap/unix-88/Heap.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -665,79 +665,77 @@ void Heap_GC (BOOLEAN markStack)
 	Heap_Module m;
 	INT64 i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23;
 	INT64 cand[10000];
-	if (Heap_lockdepth == 0 || (Heap_lockdepth == 1 && !markStack)) {
-		Heap_Lock();
-		m = (Heap_Module)(ADDRESS)Heap_modules;
-		while (m != NIL) {
-			if (m->enumPtrs != NIL) {
-				(*m->enumPtrs)(Heap_MarkP);
-			}
-			m = m->next;
+	Heap_Lock();
+	m = (Heap_Module)(ADDRESS)Heap_modules;
+	while (m != NIL) {
+		if (m->enumPtrs != NIL) {
+			(*m->enumPtrs)(Heap_MarkP);
 		}
-		if (markStack) {
-			i0 = -100;
-			i1 = -101;
-			i2 = -102;
-			i3 = -103;
-			i4 = -104;
-			i5 = -105;
-			i6 = -106;
-			i7 = -107;
-			i8 = 1;
-			i9 = 2;
-			i10 = 3;
-			i11 = 4;
-			i12 = 5;
-			i13 = 6;
-			i14 = 7;
-			i15 = 8;
-			i16 = 9;
-			i17 = 10;
-			i18 = 11;
-			i19 = 12;
-			i20 = 13;
-			i21 = 14;
-			i22 = 15;
-			i23 = 16;
-			for (;;) {
-				i0 += 1;
-				i1 += 2;
-				i2 += 3;
-				i3 += 4;
-				i4 += 5;
-				i5 += 6;
-				i6 += 7;
-				i7 += 8;
-				i8 += 9;
-				i9 += 10;
-				i10 += 11;
-				i11 += 12;
-				i12 += 13;
-				i13 += 14;
-				i14 += 15;
-				i15 += 16;
-				i16 += 17;
-				i17 += 18;
-				i18 += 19;
-				i19 += 20;
-				i20 += 21;
-				i21 += 22;
-				i22 += 23;
-				i23 += 24;
-				if ((i0 == -99 && i15 == 24)) {
-					Heap_MarkStack(32, (void*)cand, 10000);
-					break;
-				}
-			}
-			if (((((((((((((((((((((((i0 + i1) + i2) + i3) + i4) + i5) + i6) + i7) + i8) + i9) + i10) + i11) + i12) + i13) + i14) + i15) + i16) + i17) + i18) + i19) + i20) + i21) + i22) + i23 > 10000) {
-				return;
+		m = m->next;
+	}
+	if (markStack) {
+		i0 = -100;
+		i1 = -101;
+		i2 = -102;
+		i3 = -103;
+		i4 = -104;
+		i5 = -105;
+		i6 = -106;
+		i7 = -107;
+		i8 = 1;
+		i9 = 2;
+		i10 = 3;
+		i11 = 4;
+		i12 = 5;
+		i13 = 6;
+		i14 = 7;
+		i15 = 8;
+		i16 = 9;
+		i17 = 10;
+		i18 = 11;
+		i19 = 12;
+		i20 = 13;
+		i21 = 14;
+		i22 = 15;
+		i23 = 16;
+		for (;;) {
+			i0 += 1;
+			i1 += 2;
+			i2 += 3;
+			i3 += 4;
+			i4 += 5;
+			i5 += 6;
+			i6 += 7;
+			i7 += 8;
+			i8 += 9;
+			i9 += 10;
+			i10 += 11;
+			i11 += 12;
+			i12 += 13;
+			i13 += 14;
+			i14 += 15;
+			i15 += 16;
+			i16 += 17;
+			i17 += 18;
+			i18 += 19;
+			i19 += 20;
+			i20 += 21;
+			i21 += 22;
+			i22 += 23;
+			i23 += 24;
+			if ((i0 == -99 && i15 == 24)) {
+				Heap_MarkStack(32, (void*)cand, 10000);
+				break;
 			}
 		}
-		Heap_CheckFin();
-		Heap_Scan();
-		Heap_Finalize();
-		Heap_Unlock();
+		if (((((((((((((((((((((((i0 + i1) + i2) + i3) + i4) + i5) + i6) + i7) + i8) + i9) + i10) + i11) + i12) + i13) + i14) + i15) + i16) + i17) + i18) + i19) + i20) + i21) + i22) + i23 > 10000) {
+			return;
+		}
 	}
+	Heap_CheckFin();
+	Heap_Scan();
+	Heap_Finalize();
+	Heap_Unlock();
 }
 
 void Heap_RegisterFinalizer (SYSTEM_PTR obj, Heap_Finalizer finalize)

+ 1 - 1
data/bin/voc/bootstrap/unix-88/Heap.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. rtsSF */
 
 #ifndef Heap__h
 #define Heap__h

+ 1 - 1
data/bin/voc/bootstrap/unix-88/Modules.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-88/Modules.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef Modules__h
 #define Modules__h

+ 11 - 1
data/bin/voc/bootstrap/unix-88/OPB.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -1738,6 +1738,16 @@ void OPB_StPar0 (OPT_Node *par0, INT16 fctno)
 			}
 			x->typ = OPT_linttyp;
 			break;
+		case -1: 
+			if (x->class == 8 || x->class == 9) {
+				OPB_err(126);
+			} else if (__IN(f, 0x60, 32)) {
+				OPB_Convert(&x, OPT_inttyp);
+			} else {
+				OPB_err(111);
+			}
+			x->typ = OPT_inttyp;
+			break;
 		case 6: 
 			OPB_MOp(23, &x);
 			break;

+ 1 - 1
data/bin/voc/bootstrap/unix-88/OPB.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPB__h
 #define OPB__h

+ 1 - 1
data/bin/voc/bootstrap/unix-88/OPC.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-88/OPC.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPC__h
 #define OPC__h

+ 7 - 3
data/bin/voc/bootstrap/unix-88/OPM.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16
@@ -27,7 +27,7 @@ export INT16 OPM_AddressSize;
 static INT16 OPM_GlobalAlignment;
 export INT16 OPM_Alignment;
 export UINT32 OPM_GlobalOptions, OPM_Options;
-export INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize;
+export INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize, OPM_SetSize;
 export INT64 OPM_MaxIndex;
 export LONGREAL OPM_MinReal, OPM_MaxReal, OPM_MinLReal, OPM_MaxLReal;
 export BOOLEAN OPM_noerr;
@@ -338,7 +338,7 @@ BOOLEAN OPM_OpenPar (void)
 		OPM_LogWLn();
 		OPM_LogWStr((CHAR*)"    -O2   Original Oberon / Oberon-2:  8 bit SHORTINT, 16 bit INTEGER, 32 bit LONGINT and SET.", 95);
 		OPM_LogWLn();
-		OPM_LogWStr((CHAR*)"    -OC   Component Pascal:           16 bit SHORTINT, 32 bit INTEGER, 64 bit LONGINT and SET.", 95);
+		OPM_LogWStr((CHAR*)"    -OC   Component Pascal:           16 bit SHORTINT, 32 bit INTEGER and SET, 64 bit LONGINT.", 95);
 		OPM_LogWLn();
 		OPM_LogWStr((CHAR*)"    -OV   Alternate large model:       8 bit SHORTINT, 32 bit INTEGER, 64 bit LONGINT and SET.", 95);
 		OPM_LogWLn();
@@ -410,21 +410,25 @@ void OPM_InitOptions (void)
 			OPM_ShortintSize = 1;
 			OPM_IntegerSize = 2;
 			OPM_LongintSize = 4;
+			OPM_SetSize = 4;
 			break;
 		case 'C': 
 			OPM_ShortintSize = 2;
 			OPM_IntegerSize = 4;
 			OPM_LongintSize = 8;
+			OPM_SetSize = 4;
 			break;
 		case 'V': 
 			OPM_ShortintSize = 1;
 			OPM_IntegerSize = 4;
 			OPM_LongintSize = 8;
+			OPM_SetSize = 8;
 			break;
 		default: 
 			OPM_ShortintSize = 1;
 			OPM_IntegerSize = 2;
 			OPM_LongintSize = 4;
+			OPM_SetSize = 4;
 			break;
 	}
 	__MOVE(OPM_InstallDir, OPM_ResourceDir, 1024);

+ 2 - 2
data/bin/voc/bootstrap/unix-88/OPM.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPM__h
 #define OPM__h
@@ -9,7 +9,7 @@
 import CHAR OPM_Model[10];
 import INT16 OPM_AddressSize, OPM_Alignment;
 import UINT32 OPM_GlobalOptions, OPM_Options;
-import INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize;
+import INT16 OPM_ShortintSize, OPM_IntegerSize, OPM_LongintSize, OPM_SetSize;
 import INT64 OPM_MaxIndex;
 import LONGREAL OPM_MinReal, OPM_MaxReal, OPM_MinLReal, OPM_MaxLReal;
 import BOOLEAN OPM_noerr;

+ 1 - 1
data/bin/voc/bootstrap/unix-88/OPP.c

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #define SHORTINT INT8
 #define INTEGER  INT16

+ 1 - 1
data/bin/voc/bootstrap/unix-88/OPP.h

@@ -1,4 +1,4 @@
-/* voc 2.1.0 [2019/11/01]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
+/* voc 2.1.0 [2021/07/05]. Bootstrapping compiler for address size 8, alignment 8. xrtspaSF */
 
 #ifndef OPP__h
 #define OPP__h

Some files were not shown because too many files changed in this diff