DataMuseum.dk

Presents historical artifacts from the history of:

DANOSI

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DANOSI

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦b85984eec⟧ TextFile

    Length: 61312 (0xef80)
    Types: TextFile
    Names: »SYSTEST2.RTP«

Derivation

└─⟦289818552⟧ Bits:30010516 DVBS1.SW2114.src.2.7-3 SW2114 3/4 Real Time Pascal 2.7
    └─⟦this⟧ »RTP\SYSTEST2.RTP« 
└─⟦783187a02⟧ Bits:30010525 DVBS1.SW2114.src.2.6-3 RTP compiler source SW2104+SW2114 Disk#3 30/1-92 HHA
    └─⟦this⟧ »RTP\SYSTEST2.RTP« 
└─⟦ca921ce75⟧ Bits:30010528 DVBS1.SW2114.src.2.6-6 RTP Compiler Source SW2104+SW2114 Disk 3 92.02.03 HEJ HHA
    └─⟦this⟧ »RTP\SYSTEST2.RTP« 
└─⟦d5707feda⟧ Bits:30010512 DVBS1.SW2114.src.2.14-3 SW2114 REAL #3/4 TIME PASCAL SOURCE REL 2.14 92.09.01
    └─⟦this⟧ »RTP\SYSTEST2.RTP« 

TextFile

\r
$listoff\r
  (* This file contains routines that tests familie *)\r
  (* The routines are called from systemtest *)\r
\r
systest2env;\r
const nul = ' ';\r
procedure writename(Var z : inoutZone; Inspect name : String); EXTERNAL;\r
.\r
(*******************************************************************)\r
(*******************************************************************)\r
(****************** TEST 6 FAMILIE *********************************)\r
(*******************************************************************)\r
(*******************************************************************)\r
\r
\r
PROCEDURE TEST6FAM(VAR OK : Boolean; VAR ZoneVAR : inoutZone);\r
\r
\r
VAR \r
  TEST6OK : Boolean;\r
\r
\r
TYPE\r
  DynSubr( n : integer) = 1..n;\r
\r
   (********************** 6A *******************)\r
   (* var declaration: dynamic subrange *)\r
   PROCEDURE TestFam6A;\r
   var high : integer;\r
   procedure p;\r
   var\r
   d : DynSubr(High);\r
   begin\r
   d := 2;\r
   PrintInteger(ZoneVar, d );  (* 2 *)\r
   IF d = 2 THEN Test6OK := True\r
            ELSE Test6OK := false;\r
   end;\r
   \r
   begin\r
   WriteName(ZoneVar,"TestFam6A");\r
   high := 4;\r
   p;\r
   end;\r
   \r
\r
  (************************* 6AA **********************)\r
   (* dynamic subrange type declare  *)\r
   PROCEDURE TestFam6aa;\r
   var high, low : integer;\r
   procedure p;\r
   type\r
   t(n : integer) = low .. high;\r
   var\r
   d : t(1);\r
   begin\r
   d := 1;\r
   PrintInteger(ZoneVar, d ); (* 1 *)\r
   IF d = 1 THEN Test6OK := True\r
            ELSE Test6OK := false;\r
   \r
   end;\r
   \r
   \r
   begin\r
   WriteName(ZoneVar,"TestFam6AA");\r
    high := 1;\r
    low := - 1;\r
    p;\r
   end;\r
   \r
\r
\r
   (**************************** 6AB ************************)\r
   (* simple dynamic subrange expressions *)\r
   PROCEDURE TestFam6ab;\r
   \r
   var high , low : integer;\r
   \r
   TYPE\r
     T1(l,h : integer) = -1110 + l..h;\r
     T2(l : integer) = -30 + l..37;   \r
\r
   procedure P;\r
   var\r
   a,c : T1(low,high) := 7;\r
   b : T2(Low) := - 30;\r
   begin\r
   TEST6OK := false;\r
   PrintInteger(ZoneVar,a);  (* 7 *)\r
   IF a <> 7 THEN EXIT;\r
   PrintInteger(ZoneVar,b);   (* -30 *)\r
   IF b <> - 30 THEN EXIT;\r
   b:= - b;\r
   PrintInteger(ZoneVar,b);   (* 30 *)\r
   IF b <> 30 THEN EXIT;\r
   b := a + b;\r
   PrintInteger(ZoneVar,b);    (* 37 *)\r
   IF b <> 37 THEN EXIT;\r
   a :=  a - b;\r
   PrintInteger(ZoneVar,a);     (* -30 *)\r
   IF a <> -30 THEN EXIT;\r
   a := a * b;\r
   PrintInteger(ZoneVar,a);    (* -1110 *)\r
   IF a <> -1110 THEN EXIT;\r
   a := a div b;\r
   PrintInteger(ZoneVar,a);    (* -30 *)\r
   IF a <> -30 THEN EXIT;\r
   a := b mod a;\r
   PrintInteger(ZoneVar,a);    (* 7 *)\r
   IF a <> 7 THEN EXIT;\r
   PrintInteger(ZoneVar,- (b - a));   (* -30 *)\r
   PrintInteger(ZoneVar,- (a div b));   (* 0 *)\r
   PrintInteger(ZoneVar,- (b * a));   (* -259 *)\r
   TEST6OK := true;\r
   end;\r
   \r
   begin\r
   WriteName(ZoneVar,"TestFam6AB");\r
   high := 7;\r
   low := 0;\r
   p;\r
   end;\r
   \r
\r
   (*************************** 6AC *********************)\r
   (* simple dynamic Subrange expressions *)\r
   PROCEDURE TestFam6ac;\r
   Type T(x : integer) = x..x;\r
   VAR\r
     limit : integer := 7;\r
   a : T(Limit);\r
   b : integer;\r
   begin\r
   WriteName(ZoneVar,"TestFam6AC");\r
   TEST6OK := false;\r
   a:= 7;\r
   PrintInteger(ZoneVar,a);  (* 7 *)\r
   IF a <> 7 THEN EXIT;\r
   b:= - 30;\r
   PrintInteger(ZoneVar,b);   (* -30 *)\r
   IF b <> -30 THEN EXIT;\r
   b:= - b + (( b - 2) + (( a div 4) * b) mod a +( 4 + ( ( a*b) DIV (b div a)) +\r
        3) );\r
   PrintInteger(ZoneVar,b);   (* 55 *)\r
   IF b <> 55 THEN EXIT;\r
   b := b * a MOD (- a) + 4;\r
   PrintInteger(ZoneVar,b);   (* 4 *)\r
   IF b <> 4 THEN EXIT;\r
   a := (30079 div b) * b + (30079 mod b) - 30072;\r
   PrintInteger(ZoneVar,a);   (* 7 *)\r
   IF a = 7 THEN Test6OK := True;\r
   end;\r
   \r
   \r
\r
\r
   (************************** 6AD ************************)\r
   (* simple integer and char Subrange expressions *)\r
   PROCEDURE TestFam6ad;\r
   \r
   type\r
     scalar = (a0,a1,a2,a3,a4);\r
   var \r
     limit : integer;\r
     ch1,ch2 : char;\r
     varscalar : scalar;\r
   procedure p;\r
   Type\r
     T(n : integer) = n.. abs(7);\r
     CharSubr(c1 : char; c2 : char) = c1..c2;\r
     ScalarSubr(a : Scalar) = a1 .. a;\r
   var\r
   a : T(limit);\r
   ch : char;\r
   chsubrange : CharSubr(ch1,ch2);\r
   subscalar : ScalarSubr(varscalar);\r
   begin\r
   TEST6OK := false;\r
   a:= 7;\r
   PrintInteger(ZoneVar,a);  (* 7 *)\r
   IF a <> 7 THEN EXIT;\r
   chsubrange := 'a';\r
   WriteChar(ZoneVar,chsubrange);   (* H61 *)\r
   IF chsubrange <> 'a' THEN EXIT;\r
   ch := 'b';\r
   WriteChar(ZoneVar,ch);   (* H62 *)\r
   IF ch <> 'b' THEN EXIT;\r
   IF chsubrange <= Ch THEN chsubrange := ch\r
                       ELSE chsubrange := 'c';\r
   WriteChar(ZoneVar,chsubrange);   (* H62 *)\r
   IF chSubrange <> 'b' THEN EXIT;\r
   subscalar := a2;\r
   PrintInteger(ZoneVar,ord(subscalar));   (* 2 *)\r
   IF Subscalar = a2 THEN TEST6Ok := true;\r
   end;\r
   \r
   begin\r
     WriteName(ZoneVar,"TestFam6AD");\r
     limit := 7;\r
     ch1 := 'a';\r
     ch2 := 'c';\r
     varscalar := a2;\r
     p;\r
   end;\r
   \r
   \r
\r
\r
\r
\r
\r
\r
\r
\r
\r
BEGIN\r
WriteName(ZoneVar,"TESTFAM6");\r
   \r
TestFam6a;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TestFam6aa;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TestFam6ab;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TestFam6ac;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TestFam6ad;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
\r
writeChar(ZoneVar,' ');\r
writeChar(ZoneVar,'O');\r
writeChar(ZoneVar,'K');\r
OK := true;\r
exit;\r
EXITError:\r
OK := false;\r
writeChar(ZoneVar,' ');\r
writeChar(ZoneVar,'N');\r
writeChar(ZoneVar,'O');\r
writeChar(ZoneVar,'T');\r
writeChar(ZoneVar,' ');\r
writeChar(ZoneVar,'O');\r
writeChar(ZoneVar,'K');\r
\r
\r
\r
End;\r
\r
  (********************* TEST7FAM *************************)\r
  (* Test Familie Type . Array and subrange type *)\r
\r
(********************************************************************)\r
(********************* TEST  7 Familie*******************************)\r
(********************************************************************)\r
\r
\r
PROCEDURE TEST7FAM(VAR OK : Boolean; VAR ZoneVar : inoutZone);\r
\r
Var \r
  Test7Ok : boolean;\r
\r
\r
    (********************* 7A **************************)\r
    PROCEDURE Test7Fama;\r
    (* subrange and 1-dim dynamic array type *)\r
    (* simple element type *)\r
    const\r
    ni = 9;\r
    var\r
     low1,low,high,high2 : integer;\r
    Procedure p;\r
    type\r
    t(low1 : integer) = Low1..4;\r
    data = array( t(Low1) ) of integer;\r
    data1(high2 : integer)  = array(0..high2) of boolean;\r
    data2(Low, High : integer) = array(Low..High) of integer;\r
    \r
    var\r
    a,c : integer;\r
    d : data;\r
    d1: data1(High2);\r
    d2: data2(Low,High);\r
    \r
    begin\r
    Test7OK := false;\r
\r
    a:= 2;\r
    d(2):= a;\r
    c:= d(a) + ni;\r
    PrintInteger(ZoneVar, c );   (* 11 *)\r
    IF c <> 11 THEN EXIT;\r
    \r
    for i := 0 to d(a) do\r
    begin\r
    d1(i) := d(2) + i = a;\r
    end;\r
    PrintBoolean(ZoneVar,d1(0));     (* true *)\r
    PrintBoolean(ZoneVar,d1(1));     (*  false *)\r
    PrintBoolean(ZoneVar,d1(2));     (* false *)\r
    IF (d1(0) <> true)  OR d1(1) OR d1(2) THEN EXIT;\r
    \r
    d2(0) := 0;\r
    for i := 1 to 10 do\r
    begin\r
    d2(i) := i;\r
    d2(-i) := i;\r
    d2(0) := (d2(d2(-i)) + d2(-i)) + d2(0);\r
    end;\r
    c := 9;\r
    PrintInteger(ZoneVar,d2(d2(10) - d2(c) - 1));    (* 110 *)\r
    IF d2(0) <> 110 THEN EXIT;\r
    \r
    PrintInteger(ZoneVar,d2(-7)); (* 7*)\r
    IF d2(-7) = 7 THEN Test7OK := true;\r
    \r
    end;  (* p *)\r
    BEGIN\r
     WriteName(ZoneVar,"Test7FamA");\r
     low := -10;\r
     high := 10;\r
     high2 := 2;\r
     low1 := 1;\r
     \r
     p;\r
    end;\r
     \r
    \r
    \r
    \r
    (****************************** 7AA *******************************)\r
    PROCEDURE Test7Famaa;\r
    (* subrange and 2-dim dynamic array type *)\r
    const\r
    ni = 9;\r
    var\r
     low : integer := 1;\r
     high : integer := 34;\r
     low1 : low .. high := 1;\r
    procedure p(var low,high : integer; low1 : integer); \r
    type\r
    tt(low1 : integer) = low1..4;\r
    t = tt(low1);\r
    data(Low,High : integer) = array( 0..high ) of array(low..8) of integer;\r
    \r
    \r
    var\r
    a,c : integer;\r
    d : data(Low,High);\r
    d1: array(t,t) of boolean;\r
    \r
    procedure p(var a : integer);\r
    begin\r
    a:= 2;\r
    d(2)(a):= a;\r
    d(1,8) := 6;\r
    d(a+1,8) := 16;\r
    d(2,4*a) := - 3;\r
    d(a)(3 + a) := d(a - 1)(a+3*a) + d(3)(a+3*a) + d(a)(a+3*a);\r
    c:= d(a)(2) + ni;\r
    PrintInteger(ZoneVar, c );   (* 11 *)\r
    end;\r
    Begin\r
    Test7OK := false;\r
    p(d(4,4));\r
    If c <> 11 THEN EXIT;\r
    a := 4;\r
    d1(3,3) := d(a,a) = 2;\r
    a := 3;\r
    PrintBoolean(ZoneVar,d1(a,a));      (* true *)\r
    IF d1(a,a) <> true THEN EXIT;\r
    \r
    PrintInteger(ZoneVar,d(2,5));  (* 19 *)\r
    IF d(2,5) = 19 THEN Test7OK := true;\r
    end;\r
    \r
    begin\r
     WriteName(ZoneVar,"Test7FamAA");\r
    p(low,high,low1);\r
    end;\r
   \r
    \r
    (*************************** 7AB ***************************)\r
    PROCEDURE Test7Famab; \r
    (* dynamic array with dimension > 2 *)\r
    const\r
    c = 100;\r
    var low : integer := 90;\r
        high : integer := 100;\r
    type\r
$code\r
    ttt(Low,High : integer) = Low..High;\r
    tt(Low : integer) = ttt(Low,c);\r
    t = tt(Low);\r
    arr(Low : integer)\r
          = array(low..100, t, t, 99..100) of array(low - 89..2) of t;\r
    \r
    var\r
    a1: arr(Low);\r
$nocode\r
    y1,y2 : integer;\r
    x1, x100 : integer;\r
    \r
    begin\r
     WriteName(ZoneVar,"Test7FamAB");\r
    for  i := 92 to high - 3 do\r
    begin\r
    a1(i, i, i, 100,1) := i;\r
    end;\r
    y1 := 92;\r
    y2 := 93;\r
    x1 := 1;\r
    x100 := 100;\r
    PrintInteger(ZoneVar,a1(y1, y1, y1,x100,x1)); (* 92*)\r
    PrintInteger(ZoneVar,a1(93, y2, 93, 100,1));  (* 93 *) \r
    PrintInteger(ZoneVar,a1(y2 + 1, 94, 94, x100,x1));  (* 94 *) \r
    PrintInteger(ZoneVar,a1(95, 95, 95, 100,1));  (* 95 *)\r
    PrintInteger(ZoneVar,a1(96, y2 + 3, 96, x100,1));  (* 96 *)\r
    PrintInteger(ZoneVar,a1(97, 97, 97, x100,x1));  (* 97 *)\r
    \r
    IF (a1(y1,y1,y1,x100,x1) = 92) AND\r
       (a1(93,y2,93,100,1)   = 93) AND\r
       (a1(y2 + 1, 94, 94, x100,x1) = 94 ) AND\r
       (a1(95, 95, 95, 100,1) = 95 ) AND\r
       (a1(96, y2 + 3, 96, x100,1) = 96 ) AND\r
       (a1(97, 97, 97, x100,x1) = 97 ) THEN\r
         TEST7OK := true\r
       ELSE\r
         TEST7OK := false;\r
    end;\r
    \r
    \r
    \r
     (**************************** 7AD ************************)\r
     PROCEDURE Test7Famad;\r
    (* Integer ARRAY - expressions *)\r
    Type\r
      ArrType(l : integer) = Array(1..5,l..5) of integer;\r
\r
    var\r
    \r
    limit : integer := 3;\r
    a : array(0..2) of integer;\r
    b : arrType(Limit);\r
    i1,i3,i4 : integer;\r
    \r
    \r
    begin\r
     WriteName(ZoneVar,"Test7FamAD");\r
    TEST7OK := false;\r
    i1 := 1;\r
    i3 := 3;\r
    i4:= 4;\r
    a(1):= 7;\r
    PrintInteger(ZoneVar,a(i1));  (* 7 *)\r
    IF a(i1) <> 7 THEN EXIT;\r
    b(3,4):= - 30;\r
    PrintInteger(ZoneVar,b(i3,i4));   (* -30 *)\r
    IF b(i3,i4) <> -30 THEN EXIT;\r
    b(i3,4) := a(i4 - i3) + (( (a(i1) + 60) DIV b(i3,i4)) +\r
           ((  (a(i1) + 30) MOD b(i3,i4) ) DIV (( a(i1) + 342 - 758)\r
          + ((23 + a(i4 - i3)) + (( a(i1) MOD b(i4 - i1,i1 + (i1 + (i1 + 1)) )) -\r
          (( 303 + a(i4 -(i1 + ( i1 + i1))  ) - 300)\r
          * ((b(i3,i4) + a(i1 + ( a(1) - a(i1)) )) + ((200 + (b(i3,i4) \r
          - 230))  mod ( a(i1) + b(3,i4)) ))))))));\r
    PrintInteger(ZoneVar,b(3,i4)); (* 2 *)\r
    IF b(3,i4) = 2  THEN TEST7OK := True;\r
    end;\r
     \r
    \r
    \r
      (***************************** 7AE ******************************)\r
    \r
    PROCEDURE Test7Famae;\r
    (* ARRAY - byte expressions *)\r
    Type\r
    Arr1(l : integer) = array(l..3) of byte;\r
    Arr2(l : integer) = Array(l..2) of Byte;\r
    var\r
    low : integer := -1;\r
    limit : integer := 2;\r
    a : arr1(limit);\r
    b : arr2(Low);\r
    i1,i2 : integer;\r
    Type\r
      Arr3(p1,p2,p3,p4 : integer) = Array(p1..p2) OF p3..p4;\r
    VAR\r
      ai : Arr3(1,2,low,2);\r
    \r
    \r
    begin\r
     WriteName(ZoneVar,"Test7FamAE");\r
    TEST7OK := False;\r
    b(-1) :=#d0;\r
    a(2) := #H18;\r
    \r
    i1 := -1;\r
    i2 := 2;\r
    ai(1) := -1;\r
    ai(2) := 2;\r
    \r
    b(ai(ai(2) - 1)):= (a(ai(1) + 3) AND ( b(i1) or ( a(i2) xor \r
                  ( not b(ai(1)) and ( a(ai(2)) or b(ai(ai(ai(1) + 3) - 1)))\r
             xor a(i2)))));\r
    PrintByte(ZoneVar,b(i1));  (* 18   *)\r
    IF b(i1) <> #H18 THEN EXIT;\r
    b(ai(1)) := (not a(ai(1) + 3)) and #HFF;\r
    PrintByte(ZoneVar,b(ai(ai(2) - 1)));  (* E7 *)\r
    IF b(ai(1)) <> #HE7 THEN EXIT;\r
    b(-1) := ( a(2) xor b(ai(ai(2) - 1))) xor ((a(i2) and\r
             b(ai(ai(2) - 1))) or ((a(ai(2)) xor b(i1)) \r
             and (a(ai(1) + 3) and (b(i1) or a(i2)))));\r
    PrintByte(ZoneVar,b(ai(1)));   (* E7 *)\r
    IF b(-1) <> #HE7 THEN EXIT; \r
    (*\r
    b(i1):=  b(ai(ai(2) - 1)) + (( b(i1) - #h02) + (( a(ai(1) + 3) div #H04)\r
           * b(ai(ai(2) - 1))) \r
             mod a(ai(1) + 3) +( #h04 +\r
     ( ( a(2)*b(-1)) DIV (b(i1) div a(i2))) +#H03) );\r
*)\r
    b(i1) := #HEF;\r
    PrintByte(ZoneVar,b(i1));   (* EF *)\r
    IF b(i1) <> #HEF THEN EXIT;\r
    (*\r
    b(ai(1)) := b(i1) * a(ai(2)) MOD ( a(ai(1) + 3)) ;\r
    *)\r
    b(ai(1)) := 8;\r
    PrintByte(ZoneVar,b(i1));   (* 8 *)\r
    IF b(i1) <> #H08 THEN EXIT;\r
    b(ai(1)) := (#Hc7 div b(i1)) * b(i1) + (#Hc7 mod b(-1));\r
    PrintByte(ZoneVar,b(i1));   (* C7 *)\r
    IF b(i1) <> #Hc7 THEN EXIT;\r
    (*\r
    b(-1) := (a(i2) div (#H20 + b(i1))) xor (b(ai(1)) and (#He7 * (b(-1)+ #H3)));\r
    *)\r
    b(-1) := #H46;\r
    PrintByte(ZoneVar,b(i1));   (* 46 *)\r
    IF b(i1) = #H46 THEN Test7OK := true;\r
    \r
    end;\r
\r
\r
\r
  (***************************** 7AG *************************)    \r
  PROCEDURE Test7Famag;\r
  (* compare arrays in complicated expression *)\r
  \r
  \r
  var low : integer := -1;\r
      high : integer := 10;\r
      low1 : integer := 1;\r
      high1 : integer := 3;\r
  type\r
    ar(low : integer; high : integer; low1 : integer; high1 : integer) =\r
     array(low..high) Of array(low1..high1) of record\r
                                                  i : integer;\r
                                                  j1 : integer;\r
                                                  b : boolean;\r
                                                end;\r
  \r
  \r
  var  a1,a2 : ar(Low,High,Low1,High1);\r
       i : integer;  \r
       b : boolean;\r
  \r
  function IncI : integer;\r
   begin\r
     i := 1 + i;\r
     Inci := i;\r
   end;\r
  \r
  BEGIN\r
     WriteName(ZoneVar,"Test7FamAG");\r
    for i := low to 10 do\r
      for j := low1 to 3 do \r
        with a1(i,j) do\r
          begin\r
            i := 23;\r
            j1 := 46;\r
            b := true;\r
          end;\r
    a2 := a1;\r
  a2(5,1).i := 24;\r
  \r
  Test7OK := false;\r
\r
  i := 4;\r
  b := a1(i) = a2((i - i) + ( ( i-i) + ( (i-i)  + ( (i-i) * (i + i)  + i) )));\r
  PrintBoolean(ZoneVar,b); (*true *) \r
  IF b <> true THEN EXIT;\r
  i := 5;\r
  b := a1(i) = a2((i - i) + ( ( i-i) + ( (i-i)  + ( (i-i) * (i + i)  + i) )));\r
  PrintBoolean(ZoneVar,b);  (* false *)\r
  IF b THEN EXIT;\r
       \r
  b := a1(i) = a2(incI);\r
  PrintBoolean(ZoneVar,b); (* true *)\r
  IF b = false THEN EXIT;\r
  i := 4;\r
  b :=  a1(i) = a2(Inci);\r
  PrintBoolean(ZoneVar,b);  (* false *)\r
  IF b = false THEN Test7OK := true;\r
  \r
  \r
  end;\r
  \r
    (****************************** 7C **************************)\r
    PROCEDURE Test7Famc;\r
    (* array of records *)\r
    var high : integer;\r
    \r
    procedure p;\r
    type\r
    ix_type(high : integer)  = 0..high;\r
    rectype = record\r
               f1: ix_type(high);\r
               f2: boolean;\r
              end;\r
    \r
    artype(High : integer) = array(ix_type(High)) of rectype;\r
    \r
    var\r
    step: ix_type(high);\r
    ar1: artype(high);\r
    \r
    begin\r
     WriteName(ZoneVar,"Test7FamC");\r
    for step := 0 to high do\r
    begin\r
    ar1(step).f1 := step;\r
    ar1(step).f2 := true;\r
    end;\r
    \r
    TEST7OK := false;\r
\r
    for step := 0 to high do\r
    with ar1(step) do\r
    begin\r
    PrintInteger(ZoneVar,f1);     (* 0 , 1, ...,10 *)\r
    IF f1 <> Step THEN EXIT;\r
    PrintBoolean(ZoneVar,f2);   (* 11 * true *)\r
    IF f2 <> true THEN EXIT;\r
    end;\r
    \r
    TEST7OK := true;\r
    end;\r
    \r
    begin\r
     high := 10;\r
     p;\r
    end;\r
    \r
    \r
      (******************************* 7CC ************************)\r
      PROCEDURE Test7Famcc;\r
    (* assignment and exchange on records and dynamic array types *)\r
    var high : integer := 10;\r
    type\r
    ix_type = 0..10;\r
    rectype = record\r
               f1: integer;\r
               f2: boolean;\r
               f3: array(ix_type) of 0..210;\r
               \r
              end;\r
    \r
    artype(high : integer) = array(0..high) of rectype;\r
    \r
    \r
    var\r
    ar1,ar2: artype(high);\r
    \r
    begin\r
     WriteName(ZoneVar,"Test7FamCC");\r
    Test7OK := false;\r
    for step := 0 to 10 do\r
    begin\r
    ar1(step).f1 := step;\r
    ar1(step).f2 := true;\r
    with ar1(step) do for s := 0 to 10 do f3(s) := step + 100;\r
    end;\r
    \r
    ar2 := ar1;\r
    \r
    for step := 0 to 10 do\r
    with ar2(step) do\r
    begin\r
    PrintInteger(ZoneVar,f1);     (* 0 , 1, ...,10 *)\r
    IF f1 <> Step THEN EXIT;\r
    PrintBoolean(ZoneVar,f2);   (* 11 * true *)\r
    IF f2  <> true THEN EXIT;\r
    PrintInteger(ZoneVar,f3(1));  (* 100, 101, .....110 *)\r
     IF (100 + step) <> f3(1) THEN EXIT;\r
    end; \r
    \r
    \r
    for step := 0 to 10 do\r
    begin\r
    ar1(step).f1 := step * 2;\r
    ar1(step).f2 := false;\r
    with ar1(step) do for s := 0 to 10 do f3(s) := step + 200;\r
    end;\r
    \r
    \r
    ar2 :=: ar1;\r
    \r
    for step := 0 to 10 do\r
    with ar1(step) do\r
    begin\r
    PrintInteger(ZoneVar,f1);     (* 0 , 1, ...,10 *)\r
    IF  f1 <> step THEN EXIT;\r
    PrintBoolean(ZoneVar,f2);   (* 11 * true *)\r
    IF f2 <> true THEN EXIT;\r
    PrintInteger(ZoneVar,f3(9));  (* 100, 101, .....110 *)\r
    IF f3(9) <> (100 + step) THEN EXIT;\r
    end; \r
    \r
    for step := 0 to 10 do\r
    with ar2(step) do\r
    begin\r
    PrintInteger(ZoneVar,f1);     (* 0 , 2, 4,...20*)\r
    IF f1 <> (step * 2) THEN EXIT;\r
    PrintBoolean(ZoneVar,f2);   (* 11 * false*)\r
    IF f2 THEN EXIT;\r
    PrintInteger(ZoneVar,f3(1));  (* 200, 201, .....210 *)\r
    IF f3(1) <> (200 + Step) THEN EXIT;\r
    end; \r
    \r
    TEST7OK := true;\r
    end;\r
    \r
    \r
\r
\r
  (********************************* 7CD **************************)\r
  PROCEDURE Test7Famcd;\r
  (* compare on array and record type *)\r
  var high : integer := 100;\r
  \r
  type\r
  indextype = 1.. high;\r
  arr(l,High : integer) = array(l..high ) of indextype;\r
  rec = record\r
          i : integer;\r
          i2 : boolean;\r
          i3 : integer;\r
        end;\r
  arr1(high : integer) = array(100..high) of Rec;  \r
  var\r
  arraya,arrayb: arr(1,High);\r
  recorda,recordb : arr1(High);\r
  bool : boolean;\r
  \r
  \r
 \r
  procedure comparearraysandrecord(a : arr;b : arr;var avar: arr;var bvar :arr;\r
                          var arec : arr1(100); brec : arr1);\r
  \r
  \r
  \r
  \r
  \r
  \r
  \r
        procedure comparerecord(var r1 : arr1; var r2 : arr1);\r
        begin\r
        \r
        bool := false;\r
        IF r1 = r2 THEN\r
            bool := true;\r
        \r
        PrintBoolean(ZoneVar,bool);  (* true *)\r
        IF Bool = false THEN EXIT;\r
        brec(100).i := 11;\r
        IF r1 <> brec THEN \r
          bool := false;\r
        \r
        brec(100).i := 5;\r
        PrintBoolean(ZoneVar,Bool);  (* false *)\r
        IF Bool THEN EXIT;\r
        IF  ((bool xor bool) xor (arec = brec)) THEN\r
          bool := true;\r
        \r
        PrintBoolean(ZoneVar,bool);  (* true *)\r
        IF Bool THEN TEST7OK := true;\r
            \r
        end;\r
  \r
  \r
     begin\r
      \r
     bool := false;\r
     IF arrayb = avar THEN\r
         bool := true;\r
     \r
     PrintBoolean(ZoneVar,bool);  (* true *)\r
     IF bool = false THEN EXIT;\r
     b(11) := 10;\r
     IF bvar <> b THEN\r
       bool := false;\r
     PrintBoolean(ZoneVar,Bool);  (* false *)\r
     IF Bool THEN EXIT;\r
     \r
     b(11) := 11;\r
     IF (bool or bool) xor ((bool xor bool) xor (avar = bvar)) THEN\r
       bool := true;\r
     \r
     PrintBoolean(ZoneVar,bool);  (* true *)\r
     IF Bool = false THEN EXIT;\r
         \r
     comparerecord(arec,brec);\r
     \r
     end;\r
     \r
  begin\r
     WriteName(ZoneVar,"Test7FamCD");\r
  Test7OK := false;\r
\r
\r
  for i := 1 to 100 do arraya(i) := i;\r
  arrayb := arraya;\r
  \r
  bool := false;\r
  IF arrayb = arraya THEN\r
      bool := true;\r
  \r
  PrintBoolean(ZoneVar,bool);  (* true *)\r
  IF Bool = false THEN EXIT;\r
  arrayb(11) := 10;\r
  IF arraya <> arrayb THEN\r
    bool := false;\r
  PrintBoolean(ZoneVar,Bool);  (* false *)\r
  IF Bool THEN EXIT;  \r
  arrayb(11) := 11;\r
  IF (bool or bool) xor ((bool xor bool) xor (Arraya = Arrayb)) THEN\r
    bool := true;\r
  \r
  PrintBoolean(ZoneVar,bool);  (* true *)\r
  IF Bool = false THEN EXIT;\r
      \r
     \r
  recorda(100).i := 5;\r
  recorda(100).i2 := true;\r
  recorda(100).i3 := -120;\r
  recordb := recorda;\r
  \r
  bool := false;\r
  IF recordb = recorda THEN\r
      bool := true;\r
  \r
  PrintBoolean(ZoneVar,bool);  (* true *)\r
  IF Bool = false THEN EXIT;\r
  IF recorda <> recordb THEN ELSE\r
    bool := false;\r
  \r
  PrintBoolean(ZoneVar,Bool);  (* false *)\r
  IF Bool THEN EXIT;\r
  IF  ((bool xor bool) xor (recorda = recordb)) THEN\r
    bool := true;\r
  \r
  PrintBoolean(ZoneVar,bool);  (* true *)\r
  IF Bool = false  THEN EXIT;\r
      \r
  comparearraysandrecord(arraya,arrayb,arraya,arrayb,recorda,recordb);\r
  \r
end;\r
\r
\r
\r
\r
\r
\r
(**************************** 7HB *************************)\r
\r
  (* dynamic arrays mixed with scalar type *)\r
  PROCEDURE Test7Famhb;\r
  \r
  type\r
  dag = (man, tir, ons, tor, fre, lqr, sqn);\r
  var\r
   high : dag := fre;\r
  type\r
  arbdag(high : dag) = man..high;\r
  \r
  tarbtid(high : dag) = array(arbdag(high)) of record\r
                                                start,slut : 0..24;\r
                                             end;\r
\r
  VAR\r
   ArbTid : TArbTid(High);\r
  fritid : array(dag) of record\r
                           ialt: 0..24;\r
                          end;\r
  \r
  \r
  \r
  fri,arbejde : integer;\r
  \r
  begin\r
     WriteName(ZoneVar,"Test7FamHB");\r
  for i:= man to fre do\r
    with arbtid(i) do begin\r
                      start := 8;\r
                      slut := 16;\r
                      end;\r
     \r
  arbtid(tir).start := 11;\r
  arbtid(fre).slut := 19;\r
  \r
  for i:= man to sqn do\r
    with fritid(i) do begin\r
                         if i <= fre then ialt := 24 - (arbtid(i).slut -\r
                                                                 arbtid(i).start)\r
                         else ialt := 24;\r
                      end;\r
     \r
  \r
  \r
  \r
  arbejde := 0;\r
  for i := man to sqn do\r
    begin\r
      if i >= lqr THEN \r
      else arbejde := arbejde + (Arbtid(i).slut - Arbtid(i).Start);\r
    end;\r
  \r
  fri := 0; \r
  for i := man to sqn do fri := fri + fritid(i).ialt;\r
     \r
  PrintInteger(ZoneVar,arbejde);   (* 40 *)\r
   PrintInteger(ZoneVar,fri);       (* 128 *)\r
   IF (Arbejde = 40) AND (Fri = 128) THEN Test7OK := True\r
                                     ELSE Test7OK := false;\r
  \r
  \r
  end;\r
  \r
  \r
  \r
\r
BEGIN\r
     WriteName(ZoneVar,"Test7Fam");\r
\r
Test7Fama;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
\r
Test7Famaa;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
Test7Famab;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
Test7Famad;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
Test7Famae;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
Test7Famag;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
Test7Famc;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
Test7Famcc;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
Test7Famcd;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
Test7Famhb;\r
IF Test7OK <> true THEN GOTO EXITError;\r
\r
writechar(ZoneVar,' ');\r
writechar(ZoneVar,'O');\r
writechar(ZoneVar,'K');\r
writechar(ZoneVar,'7');\r
writechar(ZoneVar,' ');\r
OK := true;\r
Exit;\r
\r
ExitError:\r
OK := false;\r
writechar(ZoneVar,'N');\r
writechar(ZoneVar,'O');\r
writechar(ZoneVar,'T');\r
writechar(ZoneVar,' ');\r
writechar(ZoneVar,'O');\r
writechar(ZoneVar,'K');\r
writechar(ZoneVar,'7');\r
\r
END;\r
\r
\r
   (**************************** TEST7L ***********************)\r
PROCEDURE TEST7L(VAR OK : boolean ; VAR ZoneVar : inoutZone);\r
type\r
  strTab(length : integer; StrLength : integer) =\r
     array(1..length) of string(strLength);\r
  recordwithstring =\r
           Record length : integer;\r
                  s : string(2);\r
           end;\r
\r
VAR \r
  str,str1 : string(10);\r
  str12 : string(12)  := "TEST STRINGS"; \r
  str15 : String(15);\r
  InitString : String(7) := "1";\r
  InitString1 : String(3) := "123456789";\r
  BB : Boolean;\r
  arrayofstring : strtab(10,4);\r
  strRec :  recordwithstring;\r
  i : integer;\r
  HelpString : String(25);\r
  HelpStringIndex : integer;\r
  helpstr12 : string(12);\r
  helpstr7 : string(7);\r
Function EqString(Inspect s1 : String; Inspect S2 : String) : boolean;\r
\r
Begin\r
  eqString := true;\r
  IF s1!Length = s2!Length THEN\r
    BEGIN\r
      for i := 1 TO s1!Length do IF s1(i) <> s2(i) THEN eqString := false;\r
    end\r
  else\r
    eqString := false;\r
end;\r
\r
Procedure writeString(ss : String);\r
Begin\r
  for i := 1 to ss!Length do writechar(ZoneVar,ss(i));\r
  writechar(ZoneVar,' ');\r
End;\r
\r
begin\r
WriteName(ZoneVar,"Test7L");\r
OK := False;\r
WriteString(Str12); (* TEST STRINGS" *)\r
IF not eqString(Str12,"TEST STRINGS") THEN EXIT;\r
for i := 1 to 10 do str(i) := chr(ord('A') + i - 1);\r
WriteString(Str); (* ABCDEFGHIJ *)\r
IF not eqString(Str,"ABCDEFGHIJ") THEN EXIT;\r
IF "ABCDEFGHIJ" = "ABCDEFGHIJ" THEN bb := true\r
                               ELSE bb := false;\r
PrintBoolean(ZoneVar,bb);\r
if bb = false then exit;\r
str15 := Str12;\r
str1 := str12;\r
WriteString(str1); (* TEST STRIN *)\r
IF not eqString(Str1,"TEST STRIN") THEN EXIT;\r
\r
str12 := "maa ikke udskrives";\r
str12 := "";\r
writeString(Str12);  (* *)\r
helpstr12 := string(12)(:12***nul:);\r
IF not eqString(Str12, helpstr12) THEN EXIT;\r
\r
\r
str12 := str;\r
WriteString(Str12);  (* ABCDEFGHIJ   *)\r
IF not eqString(Str12,"ABCDEFGHIJ"&"  ") THEN EXIT;\r
\r
 \r
WriteString(str15); (* TEST STRINGS  *)\r
IF not eqString(Str15,"TEST STRINGS"&" " & " " &" ") THEN EXIT;\r
\r
 IF str15 <> "TEST STRINGS              " THEN BB := True\r
                                          ELSE BB := false;\r
PrintBoolean(ZoneVar,BB);  (* false *)\r
if BB = True THEN EXIT;\r
\r
bb := "TEST STRINGS"& " " & " " & " " & " " & " " = str15;\r
PrintBoolean(ZoneVar,BB);  (* true *)\r
IF BB = false THEN EXIT;\r
str1 := "ABCD";\r
str12 := "abcdefghijlmnop";\r
str1 :=: str12;\r
WriteString(Str1); (* abcdefghij *)\r
IF not eqString(Str1,"abcdefghij") THEN EXIT;\r
\r
WriteString(str12); (* ABCD *)\r
helpstr12 := string(12) (:'A','B','C','D',8***nul:);\r
IF not eqString(Str12,helpStr12) THEN EXIT;\r
str12 :=: str1;\r
WriteString(Str12); (* abcdefghij *)\r
IF not eqString(Str12,"abcdefghij"&" " &" ") THEN EXIT;\r
\r
WriteString(str1); (* ABCD *)\r
IF not eqString(Str1,"ABCD"&" " &" " &" " &" " &" " &" ") THEN EXIT;\r
\r
bb := str1 <= "ABCD";\r
PrintBoolean(ZoneVar,bb); (* true *)\r
IF bb = false THEN EXIT;\r
bb := str1 <= "ABASSS";\r
PrintBoolean(ZoneVar,bb); (* false *)\r
IF bb THEN EXIT;\r
\r
bb := str1 < "ABCD";\r
PrintBoolean(ZoneVar,bb); (* false *)\r
IF bb THEN EXIT;\r
bb := str1 < "ABASSS";\r
PrintBoolean(ZoneVar,bb); (* false *)\r
IF bb  THEN EXIT;\r
\r
bb := str1 >= "ABCD";\r
PrintBoolean(ZoneVar,bb); (* true *)\r
IF bb <> true THEN EXIT;\r
bb := str1 >= "ABASSS";\r
PrintBoolean(ZoneVar,bb); (* true *)\r
IF bb <> true THEN EXIT;\r
\r
bb := str1 > "ABCD";\r
PrintBoolean(ZoneVar,bb); (* false *)\r
IF bb <> false THEN EXIT;\r
bb := str1 > "ABASSS";\r
PrintBoolean(ZoneVar,bb); (* true *)\r
IF bb <> true THEN EXIT;\r
\r
i := 1;\r
while (str1 <= "EEEEE") OR ( "EEEEEE" = str1) do\r
 begin\r
   str1(i) :='E';\r
   i := i + 1;\r
  end; \r
 \r
Writestring(Str1); (* EEEEEEE *)\r
IF not eqString(Str1,"EEEEEEE" & " " & " " & " ") THEN EXIT;\r
$IF target=rc3502\r
 arrayofString(1) := "ABC1";\r
 arrayofString(2) := "ABC22";\r
 arrayofString(3) := str1;\r
 arrayofString(4) := "A";\r
 arrayofString(5) := "A";\r
 arrayofString(6) := "A";\r
 arrayofString(7) := "BB";\r
 arrayofString(8) := "BB";\r
 arrayofString(9) := "CCC";\r
 arrayofString(10) := "CCC";\r
$ELSE\r
arrayOfString:= StrTab(10,4)(:"ABC1","ABC22", Str1,3***"A",2***"BB",2***"CCC":);\r
$ENDIF\r
helpstringindex := 1;\r
for i := 1 to 10 do \r
\r
with arrayOfString(i) as x do\r
  begin\r
   writestring(x); (* ABC1 ABC2 EEEE A A A BB BB CCC CCC *) \r
   for i := 1 to x!length do\r
     begin\r
       IF x(i) <> Nul THEN\r
         BEGIN\r
           helpstring(helpStringIndex) := x(i);\r
           HelpStringIndex := HelpStringIndex + 1;\r
         END;\r
     end;\r
  end;\r
writestring(HelpString);\r
IF not eqString(HelpString,"ABC1ABC2EEEEAAABBBBCCCCCC") THEN EXIT;\r
\r
strrec := RecordWithString(:2,"SA":);\r
PrintInteger(ZoneVar,StrRec.Length);  (* 2 *)\r
IF strRec.Length <> 2 THEN EXIT;\r
WriteString(StrRec.s); (* SA *)\r
IF not eqString(StrRec.s,"SA") THEN EXIT;\r
 \r
writeString(InitString);  (* 1 *)\r
helpstr7 := String(7)(:'1',6***nul:);\r
IF not EqString(InitString,helpstr7) THEN EXIT;\r
writeString(InitString1);   (*123*)\r
IF not EQString(InitString1,"123") THEN EXIT;\r
\r
OK := true;\r
end;\r
\r
  (***************************Test8Fam *****************************)\r
(********************************************************************)\r
(********************* TEST  8 Familie*******************************)\r
(********************************************************************)\r
\r
\r
PROCEDURE Test8Fam(Var OK : Boolean; VAR ZoneVar : inoutZone);\r
\r
Var\r
  Test8Ok : boolean;\r
\r
\r
\r
\r
(*********************** 8A *********************)\r
(* dynamic  record with subtypes and dot-notation *)\r
PROCEDURE Test8Fama;\r
const\r
ni = 9;\r
var high : integer:= 3;\r
   high1 : integer := 11;\r
type\r
rec(high,high1 : integer) = record\r
r1,r2: integer;\r
r5 : array(1..high) of integer;\r
r3 : record\r
f1,f2,f3 : integer;\r
end;\r
r4 : array(1..high1) of 0..255;\r
b1,b2:boolean;\r
end;\r
var\r
a : rec(High,High1);\r
begin\r
WriteName(ZoneVar,"TEST8FAMA");\r
\r
a.r1:= 17;\r
a.r2:= ni;\r
a.r5(a.r2 - 8) := 6;\r
a.r3.f2:= 110;\r
a.r4(7):= 1;\r
a.b1:= true;\r
a.b2:= a.r2 > 8;\r
\r
PrintInteger(ZoneVar,a.r1);   (* 17 *)\r
PrintInteger(ZoneVar,a.r2);   (* 9 *)\r
PrintInteger(ZoneVar,a.r5(1));  (* 6 *)\r
\r
PrintInteger(ZoneVar,a.r3.f2);   (* 110 *)\r
PrintInteger(ZoneVar,a.r4(7));   (* 1 *)\r
PrintBoolean(ZoneVar,a.b1);  (* true *)\r
PrintBoolean(ZoneVar,a.b2);  (* true *)\r
Test8OK := (a.r1 = 17) AND\r
           (a.r2 = 9 ) AND\r
           (a.r5(1) = 6) AND\r
           (a.r3.f2 = 110) AND\r
           (a.r4(7) = 1) AND\r
           (a.b1 AND a.b2);\r
end;\r
 \r
\r
\r
(************************ 8C **********************)\r
PROCEDURE Test8Famc;\r
(* array of records *)\r
var high : integer := 10;\r
type\r
ix_type(high : integer) = 0..high; \r
rectype(high : integer)   \r
        = record\r
           f1: ix_type(high);\r
           f2: boolean;\r
          end;\r
\r
\r
artype1(h : integer) = array(ix_type(h)) of rectype(h);\r
artype2(h : integer) = array(11..h) of integer;\r
\r
dynrectype(hi : integer) \r
           = record\r
               dummy : artype2(hi);\r
               i : integer;\r
               ar1 : artype1(hi);\r
             end;\r
             \r
var\r
step: ix_type(high);\r
dynrec : dynrectype(high) ;\r
\r
begin\r
WriteName(ZoneVar,"TEST8FAMC");\r
Test8OK := false;\r
for step := 0 to 10 do\r
begin\r
dynrec.ar1(step).f1 := step;\r
dynrec.ar1(step).f2 := true;\r
end;\r
\r
for step := 0 to 10 do\r
with dynrec.ar1(step) do\r
begin\r
PrintInteger(ZoneVar,f1);     (* 0 , 1, ...,10 *)\r
IF f1 <> step THEN EXIT;\r
PrintBoolean(ZoneVar,f2);   (* 11 * true *)\r
if f2 <> true THEN EXIT;\r
end;\r
\r
Test8OK := true;\r
end;\r
\r
\r
(************************** 8CA ***********************)\r
PROCEDURE Test8Famca;\r
(* array-type renamed to recordtype *)\r
Var \r
  high : integer := 4;\r
type\r
rect(h : integer)\r
      = record\r
         f1 : integer;\r
         f2 : array(1..h) of integer;\r
         f3, f4: integer;\r
       end;\r
\r
var\r
x: integer;\r
a: array(1..7) of integer;   \r
\r
\r
begin\r
WriteName(ZoneVar,"TEST8FAMCA");\r
TEST8OK := false;\r
\r
for i := 1 to 7 do\r
begin\r
  a(i) := 100 + i;\r
  x := a(i);\r
  PrintInteger(ZoneVar,x);    (* 101 - 102 - 103 - 104 - 105 - 106 - 107 *)\r
  IF x <> (100 + i) THEN EXIT;\r
end;\r
\r
with a as r: rect(high) do with r do\r
begin\r
  PrintInteger(ZoneVar,f1);     (* 101 *)\r
  IF f1 <> 101 THEN EXIT;\r
  for i := 1 to high do\r
   BEGIN\r
    PrintInteger(ZoneVar,f2(i));     (* 102 - 103 - 104  105*)\r
    IF f2(i) <> (102 + i - 1) THEN EXIT;\r
   END;\r
  PrintInteger(ZoneVar,f3);     (* 106 *)\r
  IF f3 <> 106 THEN EXIT;\r
  PrintInteger(ZoneVar,f4);     (* 107 *)\r
  IF f4 = 107 THEN Test8OK := true;\r
end;\r
\r
end;\r
\r
\r
\r
(******************************** 8CC *******************)\r
\r
Procedure Test8Famcc;\r
(* assignment and exchange on dynamic record types *)\r
var high : integer := 4;\r
type\r
ix_type = 0..high;\r
rectype(h : ix_type) = record\r
           f2: boolean;\r
           f3: array(0..h) of 0..210;\r
           f4 : integer;\r
           f1: integer;\r
        \r
           \r
          end;\r
\r
\r
\r
var\r
rec1,rec2: rectype(high);\r
\r
begin\r
WriteName(ZoneVar,"TEST8FAMCC");\r
TEST8OK := false;\r
rec1.f1 := 1;\r
rec1.f2 := true;\r
for i := 0 to high do rec1.f3(i) := i + 100;\r
rec1.f4 := 4;\r
\r
rec2 := rec1;\r
\r
with rec2 do\r
begin\r
PrintInteger(ZoneVar,f1);     (* 1 *)\r
IF f1 <> 1 THEN EXIT;\r
PrintBoolean(ZoneVar,f2);   (*  true *)\r
IF f2 <> true THEN EXIT;\r
for i := 0 to high do\r
  BEGIN\r
   PrintInteger(ZoneVar,f3(i));  (* 100, 101, .....104 *)\r
   IF f3(i) <> (i + 100) THEN EXIT;\r
  END;\r
PrintInteger(ZoneVar,f4);  (* 4 *)\r
IF f4 <> 4 THEN EXIT;\r
\r
end; \r
\r
rec1.f1 := 10;\r
rec1.f2 := false;\r
for i := 0 to high do rec1.f3(i) := i + 200;\r
rec1.f4 := 40;\r
\r
\r
\r
rec2 :=: rec1;\r
\r
with rec2 do\r
begin\r
PrintInteger(ZoneVar,f1);     (* 10 *)\r
IF f1 <> 10 THEN EXIT;\r
PrintBoolean(ZoneVar,f2);   (*  false *)\r
IF f2 <> false THEN EXIT;\r
for i := 0 to high do\r
  BEGIN\r
    PrintInteger(ZoneVar,f3(i));  (* 200, 201, .....204 *)\r
    IF f3(i) <> (200 + i) THEN EXIT;\r
  END;\r
PrintInteger(ZoneVar,f4);  (* 40 *)\r
IF f4 <> 40 THEN EXIT;\r
\r
end; \r
\r
with rec1 do\r
begin\r
PrintInteger(ZoneVar,f1);     (* 1 *)\r
IF f1 <> 1 THEN EXIT;\r
PrintBoolean(ZoneVar,f2);   (*  true *)\r
IF f2 <> true THEN EXIT;\r
for i := 0 to high do\r
  BEGIN\r
   PrintInteger(ZoneVar,f3(i));  (* 100, 101, .....104 *)\r
   IF f3(i) <> (100 + i) THEN EXIT;\r
  END;\r
PrintInteger(ZoneVar,f4);  (* 4 *)\r
IF f4 = 4 THEN Test8OK := true;\r
\r
end; \r
\r
end;\r
\r
\r
(*********************** 8CD **********************)\r
PROCEDURE Test8Famcd;\r
(* compare on dynamic array and record type *)\r
\r
var high : integer := 5;\r
type\r
arr(low,high : integer) = array(Low..high ) of Low..high;\r
rec(low, high : integer)\r
      = record\r
        i : integer;\r
        i1 : arr(low,high);\r
        i2 : boolean;\r
        i3 : integer;\r
      end;\r
\r
var\r
recorda,recordb : rec(high - 4,high);\r
bool : boolean;\r
\r
\r
\r
procedure compare( var arec : rec; brec : rec(1,5));\r
\r
\r
\r
\r
\r
\r
\r
      procedure comparerecord(var r1: rec;var r2 : rec);\r
      begin\r
      \r
      bool := false;\r
      IF r1 = r2 THEN\r
          bool := true;\r
      \r
      PrintBoolean(ZoneVar,bool);  (* true *)\r
      IF Bool <> true THEN EXIT;\r
      brec.i3 := 11;\r
      IF r1 <> brec THEN \r
        bool := false;\r
      \r
      brec.i3 := -120;\r
      PrintBoolean(ZoneVar,Bool);  (* false *)\r
      IF Bool THEN EXIT;\r
      IF  ((bool xor bool) xor (arec = brec)) THEN\r
        bool := true;\r
      \r
      PrintBoolean(ZoneVar,bool);  (* true *)\r
      IF Bool THEN Test8OK :=true\r
              ELSE Test8OK := false;\r
          \r
      end;\r
\r
\r
   begin\r
    \r
   bool :=  (recorda = recorda) AND\r
           ( (recordb = Recorda) AND\r
           ( (Recorda = arec) AND\r
           ( (recorda = bRec) and\r
           ( (recordb = recordb) AND\r
           ( (recordb = arec) AND\r
           ( (recordb = bRec) AND\r
           ( (arec = aRec) AND\r
           ( (aRec = Brec) AND\r
            (brec = Brec)  ) ) ) ) ) ) ) );\r
   \r
   \r
   PrintBoolean(ZoneVar,bool);  (* true *)\r
   IF bool <> true THEN EXIT;\r
       \r
   comparerecord(arec,brec);\r
   \r
   end;\r
   \r
begin\r
WriteName(ZoneVar,"TEST8FAMCD");\r
TEST8OK := false;   \r
\r
recorda.i := 5;\r
recorda.i2 := true;\r
recorda.i3 := -120;\r
for i:= 1 to high do recorda.i1(i) := i ;\r
\r
recordb := recorda;\r
bool := recorda.i3 = recordb.i3;\r
PrintBoolean(ZoneVar,bool);  (* true *)\r
IF bool = false THEN EXIT;\r
\r
bool := false;\r
IF recordb = recorda THEN\r
    bool := true;\r
\r
PrintBoolean(ZoneVar,bool);  (* true *)\r
IF bool <> true THEN EXIT;\r
IF recorda <> recordb THEN ELSE\r
  bool := false;\r
\r
PrintBoolean(ZoneVar,Bool);  (* false *)\r
IF Bool <> false THEN EXIT;\r
IF  ((bool xor bool) xor (recorda = recordb)) THEN\r
  bool := true;\r
\r
PrintBoolean(ZoneVar,bool);  (* true *)\r
IF Bool <> true THEN EXIT;\r
    \r
compare(recorda,recordb);\r
\r
end;\r
BEGIN\r
WriteName(ZoneVar,"TEST8FAM");\r
\r
Test8Fama;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8Famc;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8Famca;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8Famcc;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8Famcd;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
OK := true;\r
writechar(ZoneVar,' ');\r
writechar(ZoneVar,'O');\r
writechar(ZoneVar,'K');\r
writechar(ZoneVar,'8');\r
writechar(ZoneVar,' ');\r
\r
Exit;\r
\r
ExitError:\r
OK := false;\r
writechar(ZoneVar,'N');\r
writechar(ZoneVar,'O');\r
writechar(ZoneVar,'T');\r
writechar(ZoneVar,' ');\r
writechar(ZoneVar,'O');\r
writechar(ZoneVar,'K');\r
writechar(ZoneVar,'8');\r
\r
END;\r
\r
 (************************* TEST8JA ***********************)\r
 (************ TEST Packed type ****************************)\r
\r
 PROCEDURE TEST8JA(VAR OK : Boolean; VAR ZoneVar : inoutZone);\r
\r
\r
TYPE\r
  Subr0_31Type = 0..31;\r
  Subr0_3Type = 0..3;\r
  aType =  packed array(1..26) of 0..1;\r
  arrType = packed array(1..34) of subr0_31Type;\r
  signtype =  packed array(1..7) of -1024..1023;\r
  PackedRecordType =\r
              packed record\r
                 i : integer;\r
                 i1 : 0..1; (* 1 bit *)\r
                 i2 : -2..1; (* 2 bit *)\r
                 i3 : 0..7; (* 3 bit *)\r
                 i4 : -8..4; (* 4 bit *)\r
                 i5 : Subr0_31Type; (* 5 Bit *)\r
                 i6 : - 23 ..31; (* 6 bit *)\r
                 i7 : 0 ..127; (* 7 *)\r
                 i8 : -128..64; (* 8 bit *)\r
                 iinteger : integer;\r
                 i9 : 0..511; (* 9 bit *)\r
                 i10 : -500..500; (* 10 bit *)\r
                 i11 : 1..2047; (* 11 bit *)\r
                 i12 : -2000..2000; (* 12 bit *)\r
                END;\r
\r
    packedtype =\r
       packed array(-1..8) of\r
          packed record\r
                    i : 0..1;\r
                    p : packed record\r
                         b : boolean;\r
                         a : packed array(1..2) of boolean;\r
                        end;\r
                    s : -2..1;\r
                    a : packed array(1..3) of -2..0;\r
                    j : 0..4;\r
                    f : 0..1650;\r
                    iinteger : integer;\r
                 end;\r
\r
\r
                \r
var a : atype;\r
    aa : packed array(1..34) of Subr0_3Type;\r
    aaa :  packed array(1..30) of -1..1;\r
    sign : signtype;\r
\r
    notpacked : packed array(1..6) of -1..8888;\r
    packedarr : packed array(1..4) of 0..15;\r
    sum : integer;\r
    subr0_31 : Subr0_31Type;\r
    subr0_3 : Subr0_3Type;\r
\r
    b1 : packed record\r
                 i : 1..2;\r
                 j : 0..10;\r
                 b : boolean;\r
                 s : 0..100;\r
                 t : -1..9\r
               end;\r
    bb,bbb : packedrecordtype;\r
$test(pass1=256)\r
$test(pass1=1)\r
$test(pass2=256)\r
$test(pass2=15)\r
    pack : packedtype;\r
$test(pass1=0)\r
$test(pass2=512)\r
$test(pass1=512)\r
$test(pass2=0)\r
    Arr : ArrType;\r
 PROCEDURE ExchangePackedElement(VAR Arr : ArrType; VAR Rec : PackedRecordType);\r
   VAR i : integer := 10;\r
   BEGIN\r
     Rec.i5  :=: arr(i);\r
     Arr(i) :=: Arr(i-1);\r
     Arr(i-1) :=: Arr(8);\r
   END;\r
begin\r
Writename(ZoneVar,"TEST8JA");\r
OK := false;\r
sum := 0;\r
for i := 1 to 26 do a(i) := (i mod 2);\r
for i := 1 to 34 do aa(i) := (i mod 3);\r
for i := 1 to 30 do aaa(i) := (i mod 3) - 1;\r
for i := 1 to 7 do sign(i) := -1000 - i; \r
for i := 1 to 6 do notpacked(i) := i; \r
for i := 1 to 26 do sum := a(i) + sum;\r
for i := 1 to 4 do packedarr(i) := i;\r
PrintInteger(ZoneVar,Sum); (* 13 *)\r
IF Sum <> 13 THEN EXIT;\r
sum := 0;\r
for i := 1 to 34 do sum := sum + aa(i);\r
PrintInteger(ZoneVar,Sum); (* 34 *)\r
IF Sum <> 34 THEN EXIT;\r
sum := 0;\r
for i := 1 to 30 do sum := sum + aaa(i);\r
\r
PrintInteger(ZoneVar,Sum); (* 0 *)\r
IF Sum <> 0 THEN EXIT;\r
Printinteger(ZoneVar,a(3)); (* 1 *)\r
IF a(3) <> 1 THEN EXIT;\r
Printinteger(ZoneVar,aa(5)); (* 2 *)\r
IF aa(5) <> 2 THEN EXIT;\r
Printinteger(ZoneVar,aaa(3)); (* -1 *)\r
IF aaa(3) <> -1 THEN EXIT;\r
$IF target <> rc3502\r
with aa as xx : packed array(1..34) of -1..1 do\r
begin\r
  PrintInteger(ZoneVar,xx(1));  (* 1 *)\r
  IF  xx(1) <> 1 THEN EXIT;\r
   \r
  PrintInteger(ZoneVar,xx(2));  (* -2 *)\r
  IF xx(2) <> -2 THEN EXIT;\r
  PrintInteger(ZoneVar,xx(3));  (* 0 *)\r
  IF xx(3) <> 0 THEN EXIT;\r
end;\r
$ENDIF\r
sum := 0;\r
for i := 1 to 7 do\r
BEGIN\r
 sum := sum + sign(i);\r
END;\r
printinteger(ZoneVar,Sum); (* -7028 *)\r
IF Sum <> -7028 THEN EXIT;\r
sum := 0;\r
with notpacked as xxx : array(1..6) of int16 do \r
  for i := 1 to 6 do sum := sum + xxx(i);\r
printinteger(zonevar,sum); (* 21 *)\r
IF Sum <> 21 THEN EXIT;\r
\r
with packedarr as w : record\r
                        b1, b2: byte;\r
                      end do\r
begin\r
  printbyte(zonevar,w.b1);\r
  printbyte(zonevar,w.b2); (* 4321 *)\r
end;\r
$nocode\r
aa(11) := 3;\r
PrintInteger(ZoneVar,aa(aa(11) + 8));  (* 3 *)\r
IF aa(aa(11) + 8) <> 3 THEN EXIT;\r
with b1 do\r
  begin\r
     i := 2;\r
     j := 6;\r
     b := true;\r
     s := 100;    \r
     t := -1;\r
  END;\r
with bb do\r
  begin\r
    i := 65;\r
    i1 := 1;\r
    i2 := -1;\r
    i3 := 7;\r
    i4 := -7;\r
    i5 := 20;\r
    i6 := -20;\r
    i7 := 120;\r
    i8 := -120;\r
    i9 := 500;\r
    i10 := -500;\r
    i11 := 2000;\r
    i12 := -2000;\r
    iinteger := 4; \r
   end;\r
\r
bbb := bb;\r
b1.b := bb = bbb;\r
with b1 do\r
 sum := (i + (j + ( s + ( t + ord(b)))));\r
PrintInteger(ZoneVar,Sum); (* 108 *)\r
IF Sum <> 108 THEN EXIT;\r
with bbb do\r
 sum := i + i1 + ( i2 + ( i3 + ( i4 + i5 +( i6 + ( i7 + i8 + i9 + ( i10 + \r
           (i11 + i12))))))) + iinteger; (* 69 *)\r
PrintInteger(ZoneVar,Sum);\r
IF Sum <> 69 THEN EXIT;\r
\r
subr0_31 := 10;\r
bbb.i5 :=: subr0_31;\r
PrintInteger(ZoneVar,subr0_31);  (* 20 *)\r
IF Subr0_31 <> 20 THEN EXIT;\r
PrintInteger(ZoneVar,bbb.i5); (* 10 *)\r
IF bbb.i5 <> 10 THEN EXIT;\r
\r
subr0_31 := 5;\r
bbb.i5 := 26;\r
subr0_31 :=: bbb.i5;\r
PrintInteger(ZoneVar,subr0_31);  (* 26 *)\r
IF Subr0_31 <> 26 THEN EXIT;\r
PrintInteger(ZoneVar,bbb.i5); (* 5 *)\r
IF bbb.i5 <> 5 THEN EXIT;\r
\r
subr0_3 := 1;\r
aa(34) := 2;\r
aa(34) :=: subr0_3;\r
PrintInteger(ZoneVar,aa(34));  (* 1 *)\r
IF aa(34) <> 1 THEN EXIT;\r
PrintInteger(ZoneVar,subr0_3); (* 2 *)\r
IF Subr0_3 <> 2 THEN EXIT;\r
\r
subr0_3 := 1;\r
aa(subr0_3) := 3;\r
subr0_3 :=: aa(subr0_3) ;\r
PrintInteger(ZoneVar,aa(1));  (* 1 *)\r
IF aa(1) <> 1 THEN EXIT;\r
PrintInteger(ZoneVar,subr0_3); (* 3 *)\r
IF Subr0_3 <> 3 THEN EXIT;\r
\r
aa(5) := 3;\r
aa(4) := 2;\r
sum := 4;\r
aa(sum) :=: aa(sum + 1);\r
PrintInteger(ZoneVar,aa(4));  (* 3 *)\r
IF aa(4) <> 3 THEN EXIT;\r
PrintInteger(ZoneVar,aa(5));  (* 2 *)\r
IF aa(5) <> 2 THEN EXIT;\r
\r
aa(5) := 3;\r
aa(4) := 1;\r
sum := 4;\r
aa(sum) :=: aa(5);\r
PrintInteger(ZoneVar,aa(4));  (* 3 *)\r
IF aa(4) <> 3 THEN EXIT;\r
PrintInteger(ZoneVar,aa(5));  (* 1 *)\r
IF aa(5) <> 1 THEN EXIT;\r
\r
sum := 4;\r
aa(3) := 3;\r
aa(5) := aa(3) + ( aa(3) + ( aa(3) - ( aa(3) + ( aa(3) +  aa(3) ))))  + aa(3);\r
(* aa(5) = 3 *)\r
aa(3) := 1;\r
aa(sum) := aa(3) + ( aa(3) + ( aa(3) - ( aa(3) + ( aa(3) +  aa(3) ))))  + aa(3);\r
(* aa(4) = 1 *)\r
aa(sum) :=: aa(aa(3) + ( aa(3) + ( aa(3) + ( aa(3) + 1))));\r
PrintInteger(ZoneVar,aa(4));  (* 3 *)\r
IF aa(4) <> 3 THEN EXIT;\r
PrintInteger(ZoneVar,aa(5));  (* 1 *)\r
IF aa(5) <> 1 THEN EXIT;\r
\r
bbb.i5 := 3;\r
Arr(10) := 2;\r
Arr(9) := 1;\r
Arr(8) := 0;\r
\r
ExchangePackedElement(Arr,bbb);\r
PrintInteger(ZoneVar,bbb.i5);  (* 2 *)\r
IF bbb.i5 <> 2 THEN EXIT;\r
PrintInteger(ZoneVar,Arr(10)); (* 1 *)\r
IF arr(10) <> 1 THEN EXIT;\r
PrintInteger(zoneVar,Arr(9)); (* 0 *)\r
IF Arr(9) <> 0 THEN EXIT;\r
PrintInteger(ZoneVar,Arr(8)); (* 3 *)\r
IF Arr(8) <> 3 THEN EXIT;\r
\r
\r
a :=  atype(:8***0,16***1,0,1:);\r
with a as x : array(1..3) of byte do \r
  begin\r
    printbyte(ZoneVar,x(1)); (* 00 *)\r
    IF x(1) <> #H0 THEN EXIT;\r
    printbyte(ZoneVar,x(2)); (* FF *)\r
    IF x(2) <> #HFF THEN EXIT;\r
    printbyte(ZoneVar,x(3)); (* FF *)\r
    IF x(3) <> #HFF THEN EXIT;\r
  end;\r
PrintInteger(ZoneVar,a(25)); (* 0 *)\r
IF a(25) <> 0 THEN EXIT;\r
PrintInteger(ZoneVar,a(26)); (* 1 *)\r
IF a(26) <> 1 THEN EXIT;\r
    \r
sum := 8;\r
$IF (target <> ta) AND (target <> rc3502)\r
a :=  atype(:sum***(sum - sum),2 * sum ***1,sum - sum,1:);\r
$ELSE\r
for i := 1 to sum do a(i) := sum -sum;\r
for i := sum + 1 to 3*sum do a(i) := 1;\r
a(25) := 0;\r
a(26) := 1;\r
$ENDIF\r
with a as x : array(1..3) of byte do \r
  begin\r
    printbyte(ZoneVar,x(1)); (* 00 *)\r
    IF x(1) <> #H0 THEN EXIT;\r
    printbyte(ZoneVar,x(2)); (* FF *)\r
    IF x(2) <> #HFF THEN EXIT;\r
    printbyte(ZoneVar,x(3)); (* FF *)\r
    IF x(3) <> #HFF THEN EXIT;\r
  end;\r
PrintInteger(ZoneVar,a(25)); (* 0 *)\r
IF a(25) <> 0 THEN EXIT;\r
PrintInteger(ZoneVar,a(26)); (* 1 *)\r
IF a(26) <> 1 THEN EXIT;\r
    \r
\r
\r
sign := signType(:2***(-20),3*** -10,1000,-905:);\r
sum := 0;\r
for i := 1 to 7 do sum := sign(i) + sum;\r
printinteger(ZoneVar,sum); (* 25 *)\r
IF Sum <> 25 THEN EXIT;\r
\r
sum := 2;\r
$IF (target <> ta) AND (target <> rc3502)\r
sign := signType(:sum***(-sum * 10),3*** -10,sum * 500,-905:);\r
$ELSE\r
sign := signType(:2***(-2 * 10),3*** -10,2 * 500,-905:);\r
$ENDIF\r
sum := 0;\r
for i := 1 to 7 do sum := sign(i) + sum;\r
printinteger(ZoneVar,sum); (* 25 *)\r
IF sum <> 25 THEN EXIT;\r
\r
bb := PackedRecordType(:30,1,-2,6,-5,20,-20,127,-128,1,200,-206,2006,-2000:);\r
with bb do\r
sum :=  i + i1 + i2 + i3 + (i4 + i5 +( i6 + i7 + iinteger) + i8) + i9 +\r
       i10 + i11 + i12;\r
PrintInteger(ZoneVar,Sum);  (* 30 *)\r
IF sum <> 30 THEN EXIT;\r
\r
Sum := 3;\r
$IF target <> ta AND (target <> rc3502)\r
bb := PackedRecordType(:sum * 10,sum - 2,-2,sum * 2,-5,20,-20,127,-128\r
                        ,1,209 - (sum * 3),-206,2006,-2000:);\r
$ELSE\r
bb := PackedRecordType(:3 * 10,3 - 2,-2,3 * 2,-5,20,-20,127,-128\r
                        ,1,209 - (3 * 3),-206,2006,-2000:);\r
$ENDIF\r
with bb do\r
sum :=  i + i1 + i2 + i3 + (i4 + i5 +( i6 + i7 + iinteger) + i8) + i9 +\r
       i10 + i11 + i12;\r
PrintInteger(ZoneVar,Sum);  (* 30 *)\r
IF sum <> 30 THEN EXIT;\r
\r
$test(pass1=256)\r
$test(pass1=1)\r
$test(pass2=256)\r
$test(pass2=15)\r
pack := packedtype\r
     (:10 *** (: 1,(:true,(:true,false:):),-2,(:2***-2,-1:),4,1003,-3:) :);\r
$test(pass1=0)\r
$test(pass2=512)\r
$test(pass1=512)\r
$test(pass2=0)\r
sum := 0;\r
for i := -1 to 8 do\r
 begin\r
   sum := pack(i).i + (pack(i).s + (  pack(i).j +  (pack(i).f + \r
                 pack(i).iinteger   ))) + sum ;\r
   for j := 1 to 3 do sum := sum + pack(i).a(j);\r
   sum := sum + ord(pack(i).p.b);\r
   for j := 1 to 2 do sum := sum + ord(pack(i).p.a(j));\r
 end;\r
PrintInteger(ZoneVar,sum); (* 10000 *)\r
IF sum <> 10000 THEN EXIT;\r
\r
sum := 10;\r
$test(pass1=256)\r
$test(pass1=1)\r
$test(pass2=256)\r
$test(pass2=15)\r
$IF target <> ta AND (target <> rc3502)\r
pack := packedtype\r
        (:sum *** (: 1,(:sum = 10,(:true,false:):),-2,(:sum - 8 ***-2,-1:)\r
               ,4,sum * 100 + 3,-3:):);\r
$ELSE\r
pack := packedtype\r
        (:10 *** (: 1,(:true,(:true,false:):),-2,(:10 - 8 ***-2,-1:)\r
               ,4,10 * 100 + 3,-3:):);\r
$ENDIF\r
$test(pass1=0)\r
$test(pass2=512)\r
$test(pass1=512)\r
$test(pass2=0)\r
sum := 0;\r
for i := -1 to 8 do\r
 begin\r
   sum := pack(i).i + (pack(i).s + (  pack(i).j +  (pack(i).f + \r
                 pack(i).iinteger   ))) + sum ;\r
   for j := 1 to 3 do sum := sum + pack(i).a(j);\r
   sum := sum + ord(pack(i).p.b);\r
   for j := 1 to 2 do sum := sum + ord(pack(i).p.a(j));\r
 end;\r
PrintInteger(ZoneVar,sum); (* 10000 *)\r
IF sum <> 10000 THEN EXIT;\r
\r
OK := true;\r
\r
End;\r
\r
 (* Test pack3502 *)\r
 PROCEDURE TEST8JB(VAR OK : Boolean; VAR ZoneVar : inoutZone);\r
\r
TYPE\r
  Subr0_3Type = 0..3;\r
  aType =  packed3502 array(1..26) of 0..15;\r
  PackedRecordType =\r
              packed3502 record\r
                 i : int16;\r
                 i1 : 0..1; (* 1 bit *)\r
                 i2,ii2 : 0..3; (* 2 bit *)\r
                 i3 : 0..7; (* 3 bit *)\r
                 i4 : 0..15; (* 4 bit *)\r
                 iinteger : int16;\r
                 i10 : -500..500; (* 10 bit *)\r
                 i11 : -1..2047; (* 11 bit *)\r
                 i12 : -2000..2000; (* 12 bit *)\r
                END;\r
\r
var a : atype;\r
    aa : packed array(1..34) of Subr0_3Type;\r
    bb : PackedRecordType;\r
    sum : integer;\r
BEGIN\r
\r
Writename(ZoneVar,"TEST8JB");\r
OK := false;\r
sum := 0;\r
for i := 1 to 26 do a(i) := (i mod 2);\r
for i := 1 to 34 do aa(i) := (i mod 3);\r
for i := 1 to 26 do sum := a(i) + sum;\r
\r
PrintInteger(ZoneVar,Sum); (* 13 *)\r
IF Sum <> 13 THEN EXIT;\r
sum := 0;\r
for i := 1 to 34 do sum := sum + aa(i);\r
PrintInteger(ZoneVar,Sum); (* 34 *)\r
IF Sum <> 34 THEN EXIT;\r
sum := 2000;\r
with bb do\r
  begin\r
    i := 65;\r
    i1 := 1;\r
    i2 := 2;\r
    ii2 := 2;\r
    i3 := 7;\r
    i4 := 10;\r
    i10 := -500;\r
    i11 := sum;\r
    i12 := -sum;\r
    iinteger := 4; \r
   end;\r
 with bb do\r
  sum := (i -64) + i1 + i2 - ii2 + i3 + i4 + i11 + i12 + iinteger;\r
PrintInteger(ZoneVar,sum);  (* 23 *)\r
IF 23 <> sum THEN EXIT;\r
\r
aa(5) := 3;\r
aa(4) := 2;\r
sum := 4;\r
aa(sum) :=: aa(sum + 1);\r
PrintInteger(ZoneVar,aa(4));  (* 3 *)\r
IF aa(4) <> 3 THEN EXIT;\r
PrintInteger(ZoneVar,aa(5));  (* 2 *)\r
IF aa(5) <> 2 THEN EXIT;\r
\r
aa(5) := 3;\r
aa(4) := 1;\r
sum := 4;\r
aa(sum) :=: aa(5);\r
PrintInteger(ZoneVar,aa(4));  (* 3 *)\r
IF aa(4) <> 3 THEN EXIT;\r
PrintInteger(ZoneVar,aa(5));  (* 1 *)\r
IF aa(5) <> 1 THEN EXIT;\r
\r
sum := 4;\r
aa(3) := 3;\r
aa(5) := aa(3) + ( aa(3) + ( aa(3) - ( aa(3) + ( aa(3) +  aa(3) ))))  + aa(3);\r
(* aa(5) = 3 *)\r
aa(3) := 1;\r
aa(sum) := aa(3) + ( aa(3) + ( aa(3) - ( aa(3) + ( aa(3) +  aa(3) ))))  + aa(3);\r
(* aa(4) = 1 *)\r
aa(sum) :=: aa(aa(3) + ( aa(3) + ( aa(3) + ( aa(3) + 1))));\r
PrintInteger(ZoneVar,aa(4));  (* 3 *)\r
IF aa(4) <> 3 THEN EXIT;\r
PrintInteger(ZoneVar,aa(5));  (* 1 *)\r
IF aa(5) <> 1 THEN EXIT;\r
\r
\r
\r
a :=  atype(:1,7***0,16***1,0,1:);\r
with a as x : array(1..10) of byte do \r
  begin\r
    printbyte(ZoneVar,x(1)); (* 10 *)\r
    IF x(1) <> #H10 THEN EXIT;\r
    printbyte(ZoneVar,x(9)); (* 11 *)\r
    IF x(9) <> #H11 THEN EXIT;\r
    printbyte(ZoneVar,x(10)); (* 11 *)\r
    IF x(10) <> #H11 THEN EXIT;\r
  end;\r
PrintInteger(ZoneVar,a(25)); (* 0 *)\r
IF a(25) <> 0 THEN EXIT;\r
PrintInteger(ZoneVar,a(26)); (* 1 *)\r
IF a(26) <> 1 THEN EXIT;\r
    \r
\r
bb := PackedRecordType(:1,1,1,1,1,1,1,1,1,1:);\r
with bb do\r
sum :=  i + i1 + i2 + ii2 + i3 + (i4 + iinteger) +\r
       i10 + i11 + i12;\r
PrintInteger(ZoneVar,Sum);  (* 10 *)\r
IF sum <> 10 THEN EXIT;\r
$IF target <> RC3502\r
with bb as i : int16 do sum := i;\r
PrintInteger(ZoneVar,Sum);  (* 256 *)\r
IF sum <> 256 THEN EXIT;\r
$ENDIF\r
OK := true;\r
\r
End;\r
\r
                         \r
\r
  (************************ TEST8H **************************)\r
(* Test use of ? *)\r
procedure test8h(Var OK : boolean; VAR ZoneVar : inoutzone); \r
var\r
res : integer;\r
procedure test(y : boolean; var x : integer; var z : integer);\r
  begin\r
    if y then res := x else res := z;\r
  end;\r
var\r
 res1, help : string(3);\r
procedure test1(y : boolean; var x : string; var z : string);\r
  begin\r
    if y then res1 := x else res1 := z;\r
  end;\r
type \r
  snyd =\r
  record \r
     i : integer;\r
     r : reference;\r
     j : boolean;\r
     p : ^integer;\r
     testallign : byte;\r
  end;\r
\r
snyd1 = array(1..4) of reference;\r
snyd2 = record\r
           i : 0..50;\r
           s : snyd1;\r
           ss : integer;\r
           aa : array(1..6) of snyd;\r
           aaa : array(1..3) of snyd1;\r
           j : integer;\r
         end;\r
var \r
  bbb : boolean;\r
  i : integer := 3;\r
  s :snyd := snyd(:4,?,false,?,117:);\r
$IF Target = RC3502\r
  ss : snyd := snyd(:3,?,false,?,117:);\r
$ELSE\r
  ss : snyd := snyd(:i,?,false,?,117:);\r
$ENDIF\r
  s2 : snyd2 := snyd2(:4,(:4***?:),6,(:6***(:10,?,false,?,117:):),\r
                             (:3***(:4***?:):),150:);\r
$IF target = RC3502\r
  ss2 : snyd2 := snyd2(:3 + 1,(:3***?,?:),6,(:6***(:10,?,false,?,117:):),\r
                             (:3***(:3***?,1***?:):),50 * 3:);\r
$ELSE\r
  ss2 : snyd2 := snyd2(:i + 1,(:i***?,?:),6,(:6***(:10,?,false,?,117:):),\r
                             (:3***(:i***?,1***?:):),50 * i:);\r
$ENDIF \r
 str1 : string(10);\r
\r
begin\r
  OK := false;\r
  Writename(ZoneVar,"TEST8H");\r
  test(true,i,?);\r
  PrintBoolean(ZoneVar,Res = i); (* True *)\r
  IF Res <> i THEN EXIT;\r
  i := 4;\r
  test(false,?,i);\r
  PrintInteger(ZoneVar,Res); (* 4 *)\r
  IF Res <> 4 THEN EXIT;\r
$test(pass2=256)\r
$test(pass2=31)\r
  str1 := "abcdef";\r
  test1(true,str1,?);\r
  help := str1;\r
$test(pass2=512)\r
$test(pass2=0)\r
\r
  PrintBoolean(ZoneVar,Res1 = help); (* true *)\r
  IF Res1 <> help THEN EXIT;\r
  str1 := "ABCD";\r
  Res1 := " ";\r
  help := str1;\r
  test1(false,?,str1);\r
  PrintBoolean(ZoneVar,Res1 = help); (* true *)\r
  IF Res1 <> help THEN EXIT;\r
  \r
  with s do\r
    if ( i = 4) and nil(r) and (j= false) and nil(p) THEN bbb := true\r
    else bbb := false;\r
  printboolean(ZoneVar,bbb); (* true *)\r
  IF not bbb THEN EXIT;\r
\r
  with ss do\r
    if ( i = 3) and nil(r) and (j= false) and nil(p) THEN bbb := true\r
    else bbb := false;\r
\r
  \r
  printboolean(ZoneVar,bbb); (* true *)\r
  IF not bbb THEN EXIT;\r
\r
  with s2 do \r
    begin\r
      bbb := (i= 4) AND (ss = 6) AND (j = 150);\r
      for i := 1 to 4 do bbb := bbb and nil(s(i));\r
      for i := 1 to 6 do with aa(i) do\r
        bbb := bbb and (i = 10) and ( nil(r)) and (j = false) and ( nil(p));\r
      for i := 1 to 3 do with aaa(i) as x\r
         do for i := 1 to 4 do bbb := bbb and nil(x(i));\r
    end;\r
  printboolean(ZoneVar,bbb); (* true *)\r
  IF not bbb THEN EXIT;\r
\r
  with ss2 do \r
    begin\r
      bbb := (i= 4) AND (ss = 6) AND (j = 150);\r
      for i := 1 to 4 do bbb := bbb and nil(s(i));\r
      for i := 1 to 6 do with aa(i) do\r
        bbb := bbb and (i = 10) and ( nil(r)) and (j = false) and ( nil(p));\r
      for i := 1 to 3 do with aaa(i) as x\r
         do for i := 1 to 4 do bbb := bbb and nil(x(i));\r
    end;\r
  printboolean(ZoneVar,bbb); (* true *)\r
  IF bbb THEN OK := true;\r
end;\r
 (************************* TEST10A **********************)\r
\r
\r
\r
PROCEDURE test10a(Var OK : Boolean; VAR ZoneVar : inoutZone);\r
(** structured values **)\r
type\r
ix_type = 0..10;\r
rectype = record\r
            f1: ix_type;\r
            f2: boolean;\r
            f3,f4: integer;\r
          end;\r
\r
atype = array(1..6) of integer;\r
arrtype = array(1..3) of Rectype;\r
ptrtype = ^integer;\r
recordwithpointer=\r
 record \r
   i : integer;\r
   j : ptrtype;\r
   s : 1..5;\r
   a : ptrtype;\r
   m : atype;\r
  end;\r
\r
(* dynamic type *)\r
dynarray( i : integer) = array(1..i) of integer;\r
\r
  FUNCTION NewPtr(i : integer) : PtrType;\r
  var help : ptrtype;\r
   begin\r
     new(help);\r
     help^ := i;\r
     NewPtr := help;\r
    end;\r
\r
var\r
i : integer := 10;\r
j : integer := 20;\r
$IF target = RC3502\r
rec2: rectype := rectype(:10,true, 30,40:);\r
$ELSE\r
rec2: rectype := rectype(:i,true, 30,40:);\r
$ENDIF\r
aa : atype;\r
sum : integer;\r
\r
arr,arr1 : arrtype;\r
strucwithpointer : recordwithpointer;\r
dynarr : dynarray(i);\r
Type\r
 size3type = record i : integer; s : 1..5; end;\r
 size6type = record i,j,k : integer; end;\r
 arrayofsize3 = array(1..6) of size3type;\r
 arrayofsize4 = array(1..6) of PtrType;\r
 arrayofsize6 = array(1..6) of size6type;\r
 arrayofsizedyn = array(1..6) of dynarray(3);\r
\r
var size3_1, size3_2 : size3type;\r
    size6_1, Size6_2 : size6type;\r
    size3 : arrayofsize3;\r
    size4 : arrayofsize4;\r
    size6 : arrayofsize6;\r
    sizedyn :  arrayofsizedyn;\r
\r
    ptr : ptrtype;\r
\r
procedure printrec(r: rectype);\r
begin\r
with r do\r
begin\r
PrintInteger(ZoneVar, f1);\r
if f2 then PrintInteger(ZoneVar, f3)\r
else PrintInteger(ZoneVar, f4);\r
end;\r
end; (* printrec *)\r
\r
begin \r
   WriteName(ZoneVar,"Test10A");\r
Ok := false;\r
printrec(rec2);     (* 10  30 *)\r
IF (Rec2.f1 <> 10) or (rec2.f2 <> true) or (rec2.f3 <> 30) or (rec2.f4 <> 40)\r
  then EXIT; \r
$IF target = rc3502\r
aa := atype(: 10,30,10,20,8,10:);\r
$ELSE\r
aa := atype(: 10,30,i,j,i-2,i:);\r
$ENDIF\r
sum := 0;\r
for i := 1 to 6 do \r
  begin \r
    printinteger(ZoneVar,aa(i)); (* 10, 30, 10, 20 , 8, 10 *)\r
    sum := sum + aa(i);\r
  end;\r
if sum <> 88 THEN EXIT;\r
for i := 1 to 3 do\r
BEGIN\r
$IF target = rc3502\r
 arr(i) := rectype(:0,true,0,40:);\r
 arr(i).f1 := i;\r
 arr(i).f3 := 30 + i;\r
$ELSE\r
 arr(i) := rectype(:i,true,30+i,40:);\r
$ENDIF\r
END;\r
for i := 1 to 3 do \r
   begin\r
     PrintRec(arr(i)); (* 1, 31  2, 32  3, 33 *)\r
     with arr(i) do\r
       begin\r
         IF (f1 <> i) or (f2 <> true) or ( f3 <> (30 + i)) or (f4 <> 40) THEN\r
              EXIT;\r
       End;\r
   end;\r
$IF target <>rc3502\r
\r
arr1 := arrType(: (: 1,false,i,44:), (: 1,false,i,40:), (: 1,false,i,45:) :);\r
sum := 0;\r
for i := 1 to 3 do \r
  begin\r
    PrintRec(arr1(i)); (* 1, 44  1, 40  1, 45 *)\r
    sum := sum + arr1(i).f4;\r
  end;\r
printInteger(ZoneVar,sum); (* 129 *)\r
IF Sum <> 129 THEN EXIT;\r
arr1 := arrType(:  rec2,rec2,rec2 :);\r
PrintRec(arr1(2)); (* 10, 30  *)\r
IF (arr1(2).f1 <> 10) or (arr1(2).f3 <> 30) THEN EXIT; \r
\r
aa := atype(:6 *** i:);\r
\r
for i := 1 to 6 do aa(1) := aa(i) + aa(1);\r
PrintInteger(ZoneVar,aa(1));  (* 70 *);\r
IF aa(1) <> 70 THEN EXIT;\r
\r
arr1 := arrType(:(i - 8) *** (:6,true,i,3:) , rec2:);\r
sum := 0;\r
for i := 1 to 3 do\r
  begin\r
     PrintRec(arr1(i)); (* 6, 10   6, 10  10, 30 *)\r
     sum := sum + arr1(i).f1 + arr1(i).f3;\r
  end;\r
\r
PrintInteger(ZoneVar,Sum); (* 72 *)\r
IF Sum <> 72 THEN EXIT;\r
\r
sum := 0;\r
arr1 := arrType(: rec2, (i - 8) *** (:6,true,i,3:) :);\r
for i := 1 to 3 do \r
  begin\r
    PrintRec(arr1(i)); (* 10, 30   6, 10   6, 10  *)\r
    sum := sum + arr1(i).f1 + arr1(i).f3;\r
  end;\r
PrintInteger(ZoneVar,sum); (* 72 *)\r
IF sum <> 72 THEN EXIT;\r
\r
IF recType(:i,true,i+ 1, i+ 2 :) = rectype(:10,true,i+1,12:) \r
  THEN i := 12\r
  ELSE i := 9;\r
printinteger(ZoneVar,i); (* 12 *)\r
IF i <> 12 THEN EXIT;\r
printrec(rectype(: 3,true,100,0:));  (* 3, 100 *)\r
i := 99;\r
printrec(rectype(: 3,true,i,0:));  (* 3, 99 *)\r
\r
i := 7;\r
strucwithpointer := recordwithpointer(:i,newptr(3),newptr(1)^,newptr(1000),\r
                           (: 4 *** newptr(12)^, 66,1***newptr(120)^:) :);\r
with strucwithpointer do\r
  begin\r
    printinteger(ZoneVar,i); (* 7 *)\r
    IF i <> 7 THEN EXIT;\r
    printinteger(ZoneVar,j^); (* 3 *)\r
    IF j^ <> 3 THEN EXIT;\r
    PrintInteger(ZoneVar,s); (* 1 *)\r
    IF s <> 1 THEN EXIT;\r
    PrintInteger(ZoneVar,a^); (* 1000 *)\r
    IF a^ <> 1000 THEN EXIT;\r
    for j := 1 to 4 do \r
      BEGIN\r
        PrintInteger(ZoneVar,m(j)); (* 12 *)\r
        IF m(j) <> 12 THEN EXIT;\r
      END;\r
    PrintInteger(ZoneVar,m(5)); (* 66 *)\r
    IF m(5) <> 66 THEN EXIT;\r
    PrintInteger(ZoneVar,m(6)); (* 120 *)\r
    IF m(6) <> 120 THEN EXIT;\r
  END;\r
   \r
\r
i := 0;\r
dynarr := dynarray(10) (:1,2,3,4,5,6,7,8,9,10:);\r
for j := 1  to 10 do i := i + dynarr(j);\r
printinteger(ZoneVar,i); (* 55 *)\r
IF i <> 55 THEN EXIT;\r
\r
\r
i := 6;\r
dynarr := dynarray(10) (:1,2,3,4,5,i,7,8,9,10:);\r
i := 0;\r
for j := 1  to 10 do i := i + dynarr(j);\r
printinteger(ZoneVar,i); (* 55 *)\r
IF i <> 55 THEN EXIT;\r
\r
i := 6;\r
dynarr := dynarray(10) (:4***300,5,(i-1)***50:);\r
i := 0;\r
for j := 1  to 10 do i := i + dynarr(j);\r
printinteger(ZoneVar,i); (* 1455 *)\r
IF i <> 1455 THEN EXIT;\r
\r
\r
\r
i := 2;\r
size3_1 := size3type(:100,5:);\r
size3_2 := size3type(:-400,4:);\r
size3 := arrayofsize3(:i***size3_1,(:10,3:),i + 1 *** size3_2:);\r
i := 0;\r
for j := 1 to 6 do\r
  i := size3(j).i + size3(j).s + i;\r
printinteger(ZoneVar,i); (* -965 *) \r
IF i <> -965 THEN EXIT;\r
\r
ptr := newptr(8); \r
i := 2;\r
size4 := arrayofsize4(:i***newptr(20),ptr,i  *** newptr(11),newptr(9):);\r
i := 0;\r
for j := 1 to 6 do\r
  i := size4(j)^  + i;\r
printinteger(ZoneVar,i); (* 79 *) \r
IF i <> 79 THEN EXIT;\r
\r
\r
i := 2;\r
size6_1 := size6type(:100,5,10:);\r
size6_2 := size6type(:400,4,20:);\r
size6 := arrayofsize6(:i***size6_1,(:10,6,3:),i + 1 *** size6_2:); \r
i := 0;\r
for j := 1 to 6 do\r
  i := size6(j).i + size6(j).j + size6(j).k + i;\r
printinteger(ZoneVar,i); (* 1521 *) \r
IF i <> 1521 THEN EXIT;\r
i := 6;\r
sizedyn(i) := dynarray(3)(:i,2***1:);\r
sizedyn := arrayofsizedyn(:i - 1***sizedyn(i),sizedyn(i):);\r
\r
i := 0;\r
for j := 1 to 6 do\r
\r
  i := sizedyn(j)(1) + sizedyn(j)(2) + sizeDyn(j)(3) + i;\r
printinteger(ZoneVar,i); (* 48 *) \r
IF i <> 48 THEN EXIT;\r
\r
$ENDIF    \r
\r
\r
\r
OK := true;\r
\r
end.\r
\r
«eof»