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

⟦f40573a85⟧ TextFile

    Length: 85888 (0x14f80)
    Types: TextFile
    Names: »SYSTEST.RTP«

Derivation

└─⟦316f7fc78⟧ Bits:30010522 DVBS1.SW2114.src.2.7-4 SW2114 4/4 Real Time Pascal 2.7 til old rtp 92.06.10
    └─⟦this⟧ »OLDRTP\SYSTEST.RTP« 
└─⟦3651f6bb8⟧ Bits:30010514 DVBS1.SW2114.src.2.14-4 SW2114 REAL #4/4 TIME PASCAL SOURCE REL 2.14 92.09.01
    └─⟦this⟧ »OLDRTP\SYSTEST.RTP« 
└─⟦783187a02⟧ Bits:30010525 DVBS1.SW2114.src.2.6-3 RTP compiler source SW2104+SW2114 Disk#3 30/1-92 HHA
    └─⟦this⟧ »OLDRTP\SYSTEST.RTP« 
└─⟦ca921ce75⟧ Bits:30010528 DVBS1.SW2114.src.2.6-6 RTP Compiler Source SW2104+SW2114 Disk 3 92.02.03 HEJ HHA
    └─⟦this⟧ »OLDRTP\SYSTEST.RTP« 

TextFile

(*  ******RTP compiler test  ****************)\r
\r
systestenv;\r
const ni=9;\r
procedure writename(var z: zone; inspect n: string); external;\r
.\r
\r
\r
\r
program systest;\r
\r
\r
\r
\r
\r
\r
TYPE\r
  SubTypeDef = 1..4;\r
\r
\r
\r
\r
\r
var\r
  ZoneVar : Zone;\r
  a,c : integer;\r
  b : boolean;\r
  i : integer;\r
  aword : word;\r
  bword : word;\r
  x,y :byte;\r
  aw,bw,cw : word;\r
  abyte,cbyte : byte;\r
  w1,w2 : word;\r
  byte1,byte2 : byte;\r
  ab,bb : byte;\r
  a1 : byte;\r
  b1 : word;\r
  achar,bchar,cchar : char;\r
  d : integer;\r
  int1,int2 : integer;\r
  bool1,bool2 : boolean;\r
  word1,word2 : word;\r
  found : boolean;\r
  dsub : 1..4;\r
  dsubtype : subtypedef;\r
  asub : 7..7;\r
  bsub : -30..37;\r
  a1sub : -1110..7;\r
  a2sub : 0..7;\r
  b1sub : -30..7;\r
  aaa : 7..7;\r
  ch : char;\r
  chsubrange : 'a' .. 'c';\r
  ainit,cinit : integer := 56;\r
  binit : boolean := false;\r
  xinit : byte := #HED;\r
  yinit : word := #H003;\r
  Test3Ok : boolean; (* is set to true if test of version 3 is ok *)\r
  TestVerOK : boolean := true;\r
  TestVer5Ok : Boolean;\r
  OK : Boolean;\r
\r
shared\r
  Test5OK,test4ok,test7ok : boolean := false;\r
  TestVer5End,TestVer4End,testver7end : boolean := false;\r
\r
\r
Var  \r
  Process5,process7,Process4 : process;\r
  createok :create_result;\r
  Linkok : Link_Result;\r
  UnLinkok : UnLink_Result;\r
  (**********************************************************************)\r
  \r
  (****************** ROUTINES USED FOR TEST OF VERSION 3 ****************)\r
 \r
  (************************************************************************)\r
\r
\r
  (**************************** TEST3BA *********************************)\r
  (* procedures with VALUE param *)\r
  PROCEDURE Test3BA;\r
    var\r
      a,b,c : integer; \r
  \r
    procedure p1( c : integer );\r
      var i : integer := 13;\r
      begin\r
        a := c + 10;\r
        c := c + i;\r
        b := c - 20;\r
        \r
      end; \r
    begin\r
      WriteName(ZoneVar,"Test3BA");\r
      Test3Ok := false;\r
      c := 0;\r
      a:= 11;\r
      b := 5;\r
  \r
      p1(c);\r
      PrintInteger(ZoneVar, c);   (* 0 *)\r
      IF c <> 0 THEN Exit;\r
      PrintInteger(ZoneVar, b);  (*  -7 *)\r
      IF b <> - 7 THEN Exit;\r
      PrintInteger(ZoneVar, a);  (*  10 *)\r
      IF a <> 10 THEN Exit;\r
\r
      Test3Ok := true;\r
    end;\r
\r
\r
\r
\r
\r
\r
\r
  (*********************** TEST3BB *************************************)\r
  (* procedures with VAR - param *)\r
  Procedure Test3BB;\r
    var\r
      b,c : integer;\r
    procedure p1( var c : integer );\r
      var i : integer;\r
      begin\r
        if c > 10 then c:= b - c - 1;\r
      end;\r
    begin\r
      WriteName(ZoneVar,"Test3BB");\r
      Test3Ok := false;\r
      c := 0;\r
      for a:= 1 to 20 do\r
      begin\r
        b:= a;\r
        p1(b);\r
        c:= c + b;\r
      end;\r
      PrintInteger(ZoneVar, c);   (* 45 *)\r
      IF c = 45 THEN Test3Ok := true;\r
    end;\r
\r
\r
\r
\r
\r
   (**************************** TEST3BC *****************************)\r
  (* procedures with INSPECT param *)\r
  Procedure test3BC;\r
    var\r
      a,b,c : integer; \r
  \r
    procedure p1(inspect c : integer );\r
      var i : integer := 13;\r
      begin\r
        a := c + 10;\r
        i := c + i;\r
        b := i - 20;\r
        \r
      end; \r
    begin\r
      WriteName(ZoneVar,"Test3BC");\r
      Test3Ok := false;\r
      c := 0;\r
      a:= 11;\r
      b := 5;\r
  \r
      p1(c);\r
      PrintInteger(ZoneVar, c);   (* 0 *)\r
      IF c <> 0 THEN Exit;\r
      PrintInteger(ZoneVar, b);  (*  -7 *)\r
      IF b <> - 7 THEN Exit;\r
      PrintInteger(ZoneVar, a);  (*  10 *)\r
      IF a <> 10 THEN Exit;\r
   \r
      Test3Ok := True;\r
    end;\r
\r
\r
\r
\r
\r
  (**************************** TEST3BD *******************************)\r
  (* procedures with more than one param *)\r
  PROCEDURE test3BD;\r
    var\r
      Res : integer; \r
  \r
    procedure ProcFacInt( x : integer; Var R : integer );\r
      begin\r
        IF x = 0 THEN R := 1\r
        ELSE\r
          BEGIN\r
            ProcFacInt(x - 1, R);\r
            R := R * x;\r
          END;\r
      end; \r
\r
    begin\r
      WriteName(ZoneVar,"Test3BD");\r
      TEST3OK := false;\r
\r
      ProcFacInt(3,Res);\r
      PrintInteger(ZoneVar, Res);   (* 6 *)\r
      IF Res <> 6 THEN Exit;\r
      ProcFacInt(5,Res);\r
      PrintInteger(ZoneVar, Res);  (*  120 *)\r
      IF Res =120 THEN Test3Ok := true;\r
    end;\r
  \r
\r
\r
\r
\r
\r
  (******************************* TEST3BE *****************************)  \r
  (* procedures with more than one param *)\r
  PROCEDURE test3BE;\r
    var\r
      I1,I2,ResInt : integer; \r
      W4,W5,ResWord : Word;\r
      B1,B2,B3,ResByte : Byte;\r
      B4,B5,B6,ResBoolean : Boolean;\r
  \r
    procedure Procexp( Inspect x : integer; Var y : integer; z : integer;\r
                       Inspect w1 : Word; VAR w2 : Word; w3 : Word;\r
                       Inspect Byt1 : Byte; VAR Byt2 : Byte; Byt3 : Byte ;\r
                       Inspect B1 : Boolean; VAR B2 : Boolean; B3 : Boolean;\r
                       VAR RInt : integer; VAR RWord : Word; VAR RByte : Byte;\r
                       VAR  RBool : Boolean );\r
      begin\r
        RInt := x + (y +( x - z * x));\r
        RWord := w1 + (w2 + w3);\r
        RByte := Byt1 + Byt2 + byt3;\r
        RBool := B1 AND (B2 or B3 );\r
      end; \r
  \r
\r
    begin\r
      WriteName(ZoneVar,"Test3BE");\r
      Test3Ok := false;\r
  \r
      I1 := 2;\r
      I2 := 3;\r
      W4 := #H003;\r
      W5 := #H002;\r
      B1 := #H01;\r
      B2 := #H02;\r
      B3 := #H03;\r
      B4 := true;\r
      B5 := false;\r
      B6 := true;\r
      ProcExp(I1,I2,I1 * 2,\r
              W4,W5,#H001,\r
              B1,B2,B3 + #H02,\r
              B4,B5,B4 or B5 AND (b5 xor B6) and (B6 Or B5),\r
              ResInt, ResWord, ResByte, ResBoolean);\r
      PrintInteger(ZoneVar, ResInt);  (* -1 *)\r
      IF ResInt <> -1 THEN EXIT;\r
      PrintWord(ZoneVar, ResWord);   (* 6 *)\r
      IF ResWord <> #H006 THEN Exit;\r
      PrintByte(ZoneVar, ResByte);    (* 8 *)\r
      IF ResByte <> #H8 THEN EXIT;\r
      PrintBoolean(ZoneVar, ResBoolean);   (* True *)\r
      IF ResBoolean = True THEN Test3Ok := true;  \r
\r
     \r
    end;\r
  \r
\r
\r
\r
\r
  (******************************* TEST3BF *********************************)\r
  (* procedures nested in more than one level *)\r
  PROCEDURE test3BF;\r
    var\r
      Global : integer; \r
  \r
    procedure P1(VAR x : integer);\r
      VAR\r
        i : integer;\r
      Procedure P2(Var y : integer);\r
        BEGIN\r
          y := i +( y + (x + Global));\r
        END;\r
      \r
      BEGIN\r
        i := Global + x + 4;\r
        P2(i);\r
        x := i + 4;\r
      END;\r
  \r
  \r
    PROCEDURE P11(Var x : integer);\r
      VAR\r
         i : integer;\r
      BEGIN\r
        i := Global + 4;\r
        P1(i);\r
        x := i + 3;\r
      END;\r
  \r
    BEGIN\r
      WriteName(ZoneVar,"Test3BF");\r
      Test3Ok := false;\r
      Global := 4;\r
      P11(Global);\r
      PrintInteger(ZoneVar, Global);  (* 51 *)\r
      IF Global = 51 THEN Test3Ok := true;\r
    END;\r
\r
\r
\r
\r
\r
    (**************************** TEST3BH ****************************)\r
    (* forward procedures *)\r
    PROCEDURE TEST3BH;\r
    var\r
    b,c : integer;\r
    procedure p1(  a : integer );\r
    begin\r
     b := a + 1;\r
    end;\r
    \r
    procedure p2;\r
    forward;\r
    \r
    procedure p3;\r
    begin\r
     b := b + 1;\r
     p2;\r
    end;\r
    \r
    procedure p5;\r
    begin\r
      b := b + 1;\r
      p3;\r
    end;\r
    \r
    procedure p6;\r
    begin\r
      b := b + 1;\r
      p5;\r
    end;\r
    \r
    procedure p8( a : integer );\r
    begin\r
    b := a + 1;\r
    p6;\r
    end;\r
    \r
    procedure p2;\r
    begin\r
     b := b + 1;\r
     p1(b);\r
    end;\r
    \r
    procedure p9;\r
    var a : integer;\r
    procedure pp1;\r
    begin\r
      b := b + 1;\r
    end;\r
    \r
    procedure pp2;\r
    begin\r
      b := b + 1;\r
      pp1;\r
    end;\r
    \r
    procedure pp3;\r
    begin\r
      b := b + 1;\r
      pp2;\r
    end;\r
    \r
    procedure pp4; forward;\r
    \r
    procedure pp5;\r
    begin\r
      b := b + 1;\r
      pp4;\r
    end;\r
    procedure pp6;\r
    begin\r
      b := b + 1;\r
      pp5;\r
    end;\r
    \r
    procedure pp4;\r
    begin\r
      b := b + 1;\r
      pp3;\r
    end;\r
    \r
    begin\r
    b := b + 1;\r
    pp6;\r
    p8( b );\r
    end;\r
    \r
    begin\r
    WriteName(ZoneVar,"Test3BH");\r
    b := 0;\r
    p9;\r
    PrintInteger(ZoneVar, b); (* 13 *)\r
    IF b <> 13 THEN Test3OK := False\r
               ELSE Test3OK := true;\r
    end ;\r
\r
\r
\r
\r
  (***************************  TEST3CA ********************************)\r
  (* Function *)\r
  Procedure test3ca;\r
    var\r
      Res : integer;\r
  \r
    FUNCTION FacInt( x : integer) : integer;\r
      begin\r
        IF x = 0 THEN FacInt := 1\r
        ELSE\r
            FacInt := FacInt(x - 1) * x;\r
      end; \r
    begin\r
      WriteName(ZoneVar,"Test3CA");\r
      Test3Ok := false;\r
      Res := FacInt(3);\r
      PrintInteger(ZoneVar, Res);  (* 6*)\r
      IF Res <> 6 THEN EXIT;\r
      Res := FacInt(5);\r
      PrintInteger(ZoneVar, Res);  (* 120 *)\r
      IF Res <> 120 THEN EXIT;\r
\r
      Test3Ok := true;\r
    end;\r
\r
\r
\r
\r
  (******************************** TEST3CB *************************)\r
  (* Function nested in more than one level \r
     Function with side effect *)\r
  PROCEDURE test3CB;\r
    var\r
      x, y, No : integer;\r
      Bool1,Bool2 : Boolean; \r
  \r
    FUNCTION P1( x : Boolean) : Boolean;\r
      VAR\r
        i : integer;\r
      FUNCTION P2 : Boolean;\r
        BEGIN\r
         P2 := x;\r
         no := no + 1;\r
        END;\r
      \r
      BEGIN\r
        Bool1 := not Bool1;\r
        P1 := P2;\r
      END;\r
  \r
  \r
    FUNCTION P11( xx : integer) : integer;\r
      VAR\r
         i : integer;\r
      BEGIN\r
        x := x + 1;\r
        P11 := xx;\r
      END;\r
  \r
    BEGIN\r
      WriteName(ZoneVar,"Test3CB");\r
     \r
      Test3OK := false;\r
\r
      x := 3;\r
      y := x + (P11(3) + x);\r
      PrintInteger(ZoneVar, y);  (* 10 *)\r
      IF y <> 10 THEN Exit;\r
  \r
  \r
  \r
      Bool1 := not (Bool1 xor Bool1)    ;    \r
      PrintBoolean(ZoneVar, Bool1);  (* true *)\r
      IF Bool1 <> true THEN EXIT;\r
\r
      No := 0;\r
      Bool2 := Bool1 AND (P1(True) Xor Bool1) AND\r
                   ( Bool1 XOR P1(True));\r
      PrintBoolean(ZoneVar, Bool2); (* true*)\r
      IF Bool2 <> true THEN EXIT;\r
\r
      PrintBoolean(ZoneVar, Bool1); (* true *)\r
      IF Bool1 <> True THEN Exit;\r
\r
      PrintInteger(ZoneVar, No);  (* 2 *)\r
      IF No <> 2 THEN EXIT;\r
  \r
      No := 0;\r
      Bool2 := (Bool1 And P1(false)) And (P1(False) or Bool1);\r
      PrintInteger(ZoneVar, No); (* 1 *)\r
      IF No = 1 THEN Test3Ok := true;\r
    END;\r
\r
\r
\r
\r
\r
\r
  (***************************** TEST3CC *************************)\r
  (* Function and boolean expression *)\r
  PROCEDURE test3cc;\r
    var\r
      Res : integer;\r
      Bool : boolean;\r
  \r
    FUNCTION FacInt( x : integer) : integer;\r
      begin\r
        IF x = 0 THEN FacInt := 1\r
        ELSE\r
            FacInt := FacInt(x - 1) * x;\r
      end; \r
    begin\r
      WriteName(ZoneVar,"Test3CC");\r
\r
      Test3Ok := false;\r
\r
      Bool := false;\r
      bool := bool xor ((FacInt(3) = 6) and ((FacInt(4) = 24) or Bool));\r
      PrintBoolean(ZoneVar, Bool); (* true *)\r
      IF Bool <> true THEN EXIT;\r
      Bool := bool and ( bool and (FacInt(1 + FacInt(FacInt(\r
                                                 FacInt(FacInt(0) + 1)))) = 6));\r
      PrintBoolean(ZoneVar, Bool);  (* true *)\r
      IF Bool = True THEN Test3Ok := true;\r
    end;\r
  \r
\r
\r
\r
\r
\r
  (****************************** TEST3CD ******************************)\r
  (* function with more than one VALUE param *)\r
  PROCEDURE test3cd;\r
    var\r
      a,b,c : integer; \r
  \r
    function addint( c : integer;d,e : integer; f, g : integer ) : integer;\r
      begin\r
        addint := c + d + e + f + g;\r
        \r
      end; \r
  \r
    function addintsubr( c : integer;d,e : 1..50; f, g : integer ) : 1.. 100;\r
      begin\r
        addintsubr := c + d + e + f + g;\r
        \r
      end; \r
    begin\r
      WriteName(ZoneVar,"Test3CD");\r
      c := 0;\r
      a:= 11;\r
      b := 5;\r
  \r
      Test3Ok := false;\r
\r
      a := addint(c,a,3,b,6);\r
      PrintInteger(ZoneVar, a);  (* 25 *)\r
      IF a <> 25 THEN EXIT;\r
  \r
      a := addintsubr(c,30,b,3,6);\r
      PrintInteger(ZoneVar, a);  (* 44 *)\r
      IF a = 44 THEN Test3OK := true;\r
\r
  \r
    end;\r
\r
\r
\r
\r
\r
\r
\r
  (******************************* TEST3D ****************************)  \r
  PROCEDURE test3d;\r
  (** Procedures and functions - mixed \r
     and nested in more then one level **)\r
  var\r
  a: char := 'a';\r
  z: char := 'z';\r
  k: char := 'k';\r
  charno: integer;\r
  \r
  procedure p(chp: char; var count: integer);\r
  (* gives the no in alphabet of 'chp' if 'chp' is\r
     in alphabet - otherwise -1 **)\r
  var\r
  \r
  help: integer := 1;\r
  \r
  function char_eq(ch1,ch2: char): boolean;\r
  begin\r
  char_eq := ch1 = ch2;\r
  end; (* char-eq *)\r
  \r
  begin (* p *)\r
  count := -1;\r
  for step := 'a' to 'z' do\r
  if char_eq(chp,step) then\r
  count := help\r
  else help := help + 1;\r
  end; (* p *)\r
  \r
  begin (** t3d **)\r
  WriteName(ZoneVar,"Test3D");\r
  Test3OK := false;\r
\r
  p(a,charno);\r
  PrintInteger(ZoneVar, charno);     (* 1 *)\r
  IF CharNo <> 1 THEN EXIT;\r
  p(k,charno);\r
  PrintInteger(ZoneVar, charno);      (* 11 *)\r
  IF CharNo <> 11 THEN EXIT;\r
  p('f',charno);\r
  PrintInteger(ZoneVar, charno);      (* 6 *)\r
  IF CharNo <> 6 THEN EXIT;\r
  p(' ',charno);\r
  PrintInteger(ZoneVar, charno);      (* -1 *)\r
  IF CharNo = -1 THEN Test3OK := true;\r
  end;  (* t3d *)\r
\r
\r
\r
\r
  \r
   (******************************** TEST3F *************************)\r
\r
\r
     procedure p11(var b : boolean); external;\r
  \r
     Function mult(i : integer) : integer;\r
       external;\r
  \r
\r
\r
  (** routines on level 0 *)\r
  (* TEST3BA extended   **)\r
  PROCEDURE TEST3F;  \r
  \r
  var\r
      a,b,c : integer; \r
      bb : boolean;\r
  \r
    procedure p1( c : integer );\r
      var i : integer := 13;\r
      begin\r
        a := c + 10;\r
        c := c + i;\r
        b := c - 20;\r
        \r
      end; \r
  \r
    begin\r
      WriteName(ZoneVar,"Test3F");\r
      Test3OK := False;\r
\r
      c := 0;\r
      a:= 11;\r
      b := 5;\r
  \r
      p1(c);\r
      PrintInteger(ZoneVar, c);   (* 0 *)\r
      IF c <> 0 THEN EXIT;\r
      PrintInteger(ZoneVar, b);  (*  -7 *)\r
      IF b <> -7 THEN EXIT;\r
      PrintInteger(ZoneVar, a);  (*  10 *)\r
      IF a <> 10 THEN EXIT;\r
  \r
      a := mult(a);\r
      PrintInteger(ZoneVar, a); (* 100*)\r
      IF a <> 100 THEN EXIT;\r
      p11(bb);\r
      PrintBoolean(ZoneVar, bb);  (* true *)\r
      IF BB = true THEN TEST3OK := True;\r
    end;\r
\r
  (************************** TEST3FA ************************)\r
(** recursive call of routines on level 0 *)\r
\r
\r
   Function multbyadd(i : integer; j : integer) : integer;\r
     external;\r
\r
\r
  PROCEDURE Test3FA;\r
  var\r
      a,b : integer; \r
  \r
  \r
    begin\r
      WriteName(ZoneVar,"Test3FA");\r
      a:= 11;\r
      b := 5;\r
  \r
      a := multbyadd(a,b);\r
      PrintInteger(ZoneVar, a);  (*  55 *)\r
      IF a = 55 THEN Test3Ok := true\r
                ELSE Test3Ok := false;\r
  \r
    end;\r
\r
\r
\r
   (* Openroutines with simpel types as parameter *)\r
   PROCEDURE Test3GA;\r
   type scalar = (a0, a1,a2,a3,a4,a5);\r
        subr = 1..45;\r
        \r
   var\r
   i, v_int: integer;\r
   v_byte: byte;\r
   v_wrd: word;\r
   v_scalar : scalar;\r
   v_subr : subr;\r
   v_boolean : boolean;\r
   v_char : char;\r
   v_charSubr : 'a'..'f';\r
   \r
   \r
   begin\r
    WriteName(ZoneVar,"Test3GA");\r
    Test3OK := false;   \r
   (****** ABS *****)\r
   \r
   v_int := -302;\r
   i := abs(v_int);\r
   PrintInteger(ZoneVar,i);             (* 302 *)\r
   IF i <> 302 THEN EXIT;\r
   v_int := Abs(i);\r
   PrintInteger(ZoneVar,v_int);  (* 302 *)\r
   IF v_Int <> 302 THEN EXIT;\r
   \r
   v_Subr := 10;\r
   v_subr := abs(v_SubR);\r
   PrintInteger(ZoneVar,v_subr);  (* 10 *)\r
   IF v_Subr <> 10 THEN EXIT;   \r
   i := abs( - 5);\r
   PrintInteger(ZoneVar,i);  (* 5 *)\r
   IF i <> 5 THEN EXIT;\r
   \r
   (******** Byt ********)\r
   v_int := 5 + 256;\r
   v_Byte := Byt(v_int);\r
   PrintByte(ZoneVar,v_Byte);        (* 5  *)\r
   IF v_Byte <> #H05 THEN EXIT;\r
   v_subr := 3;\r
   v_byte := byt(v_Subr);\r
   PrintByte(ZoneVar,v_Byte);  (* 3 *)\r
   IF v_Byte <> #H03 THEN EXIT;\r
   \r
   v_byte := Byt(-1);\r
   PrintByte(ZoneVar,v_Byte);  (* FF *)\r
   IF v_Byte <> #HFF THEN EXIT;\r
   \r
   \r
   (******** CHR ********)\r
   v_int := int(#H6d);\r
   v_char := chr(v_int);\r
   writechar(ZoneVar,v_char);        (* 'm'  *)\r
   IF v_char <> 'm' THEN EXIT;\r
   v_subr := int(#H21);\r
   \r
   v_char := chr(v_Subr);\r
   writechar(ZoneVar,v_char);  (*'!'*)\r
   IF v_char <> '!' THEN EXIT;\r
   \r
   v_Char := chr(98);\r
   writechar(ZoneVar,v_Char); (* 'b' *)\r
   IF v_char <> 'b' THEN EXIT;\r
   \r
   (******* DEC ********)\r
   v_Byte := #H0F;\r
   dec(v_byte);\r
   PrintByte(ZoneVar,v_byte);           (* 0E *)\r
   IF v_Byte <> #HE THEN EXIT;\r
   \r
   v_wrd := #H00C;\r
   dec(v_wrd);\r
   PrintWord(ZoneVar,v_wrd);           (* 0B *)\r
   IF v_wrd <> #H00B THEN EXIT;\r
   \r
   \r
   \r
   \r
   \r
   \r
   (******* INC ********)\r
   v_Byte := #H0F;\r
   INC(v_byte);\r
   PrintByte(ZoneVar,v_byte);           (* 10 *)\r
   IF v_Byte <> #H10 THEN EXIT;\r
   \r
   v_wrd := #H00C;\r
   INC(v_wrd);\r
   PrintWord(ZoneVar,v_wrd);           (* 0D *)\r
   IF v_wrd <> #HD THEN EXIT;\r
   \r
   \r
   (***** INT *****)\r
   v_byte := #h10;\r
   v_wrd := #H003;\r
   \r
   i := int(v_byte);\r
   PrintInteger(ZoneVar,i);      (* 16 *)\r
   IF i <> 16 THEN EXIT;\r
   \r
   i := int(v_wrd);\r
   PrintInteger(ZoneVar,i);      (* 3 *)\r
   IF i <> 3 THEN EXIT;\r
   \r
   \r
   \r
   i := int(#D10);\r
   PrintInteger(ZoneVar,i);      (* 10 *)\r
   IF i <> 10 THEN EXIT;\r
   \r
   i := int(#H0003);\r
   PrintInteger(ZoneVar,i);      (* 3 *)\r
   IF i <> 3 THEN EXIT;\r
   \r
   \r
   \r
   \r
   \r
   (********ORD ***********)\r
   v_Int := -1;\r
   v_Subr := 34;\r
   v_Boolean := true;\r
   v_scalar := a1;\r
   v_Char := 'b';\r
   v_CharSubr := 'a';\r
   i := ord(v_Int);\r
   PrintInteger(ZoneVar,i); (* -1 *)\r
   IF i <> -1 THEN EXIT;\r
   i := ord(v_Subr);\r
   PrintInteger(ZoneVar,i); (* 34 *)\r
   IF i <> 34 THEN EXIT;\r
   i := ord(v_Boolean);\r
   PrintInteger(ZoneVar,i); (*  1 *)\r
   IF i <> 1 THEN EXIT;\r
   i := ord(v_Scalar);\r
   PrintInteger(ZoneVar,i); (* 1 *)\r
   IF i <> 1 THEN EXIT;\r
   i := ord(v_Char);\r
   PrintInteger(ZoneVar,i); (*  98 *)\r
   IF i <> 98 THEN EXIT;\r
   i := ord(v_CharSubr);\r
   PrintInteger(ZoneVar,i); (*  97 *)\r
   IF i <> 97 THEN EXIT;\r
   \r
   \r
   i := ord(-1);\r
   PrintInteger(ZoneVar,i); (* -1 *)\r
   IF i <> -1 THEN EXIT;\r
   i := ord(true);\r
   PrintInteger(ZoneVar,i); (*  1 *)\r
   IF i <> 1 THEN EXIT;\r
   i := ord(a1);\r
   PrintInteger(ZoneVar,i); (* 1 *)\r
   IF i <> 1 THEN EXIT;\r
   i := ord('b');\r
   PrintInteger(ZoneVar,i); (*  98 *)\r
   IF i <> 98 THEN EXIT;\r
   \r
   \r
   \r
   \r
   (******** pred ***********)\r
   v_Int := -1;\r
   v_Subr := 34;\r
   v_Boolean := true;\r
   v_scalar := a1;\r
   v_Char := 'b';\r
   v_CharSubr := 'c';\r
   i := Pred(v_Int);\r
   PrintInteger(ZoneVar,i); (* -2 *)\r
   IF i <> -2 THEN EXIT;\r
   i := Pred(v_Subr);\r
   PrintInteger(ZoneVar,i); (* 33 *)\r
   IF i <> 33 THEN EXIT;\r
   v_Boolean := Pred(v_Boolean);\r
   PrintBoolean(ZoneVar,v_Boolean); (*  False *)\r
   IF v_boolean <> false then EXIT;\r
   i := ord(Pred(v_Scalar));\r
   PrintInteger(ZoneVar,i); (* 0 *)\r
   IF i <> 0 THEN EXIT;\r
   v_Char := Pred(v_Char);\r
   WriteChar(ZoneVar,v_Char); (*  'a' *)\r
   IF v_char <> 'a' THEN EXIT;\r
   v_char := Pred(v_CharSubr);\r
   Writechar(ZoneVar,v_char); (* 'b'  *)\r
   IF v_char <> 'b' THEN EXIT;\r
   \r
   \r
   \r
   i := Pred(0);\r
   PrintInteger(ZoneVar,i); (* -1 *)\r
   IF i <> -1 THEN EXIT;\r
   v_Boolean := Pred(true);\r
   PrintBoolean(ZoneVar,v_Boolean); (*  False *)\r
   IF v_boolean THEN EXIT;\r
   i := ord(Pred(a1));\r
   PrintInteger(ZoneVar,i); (* 0 *)\r
   IF i <> 0 THEN EXIT;\r
   v_Char := Pred('b');\r
   Writechar(ZoneVar,v_char); (*  'a' *)\r
   IF v_char <> 'a' THEN EXIT;\r
   \r
   \r
   (******** SUCC ***********)\r
   v_Int := -1;\r
   v_Subr := 34;\r
   v_Boolean := false;\r
   v_scalar := a1;\r
   v_Char := 'b';\r
   v_CharSubr := 'c';\r
   i := SUCC(v_Int);\r
   PrintInteger(ZoneVar,i); (* 0 *)\r
   IF i <> 0 THEN EXIT;\r
   i := SUCC(v_Subr);\r
   PrintInteger(ZoneVar,i); (* 35 *)\r
   IF i <> 35 THEN EXIT;\r
   v_Boolean := SUCC(v_Boolean);\r
   PrintBoolean(ZoneVar,v_Boolean); (*  true *)\r
   IF v_boolean <> true THEN EXIT;\r
   i := ord(SUCC(v_Scalar));\r
   PrintInteger(ZoneVar,i); (* 2 *)\r
   IF i <> 2 THEN EXIT;\r
   v_Char := SUCC(v_Char);\r
   WriteChar(ZoneVar,v_Char); (*  'c' *)\r
   IF v_char <> 'c' THEN EXIT;\r
   v_char := SUCC(v_CharSubr);\r
   WriteChar(ZoneVar,v_Char); (* 'd'  *)\r
   IF v_Char <> 'd' THEN EXIT;\r
   \r
   \r
   \r
   i := SUCC(-1);\r
   PrintInteger(ZoneVar,i); (* 0 *)\r
   IF i <> 0 THEN EXIT;\r
   v_Boolean := SUCC(false);\r
   PrintBoolean(ZoneVar,v_Boolean); (*  true *)\r
   IF v_Boolean <> true THEN EXIT;\r
   i := ord(SUCC(a1));\r
   PrintInteger(ZoneVar,i); (* 2 *)\r
   IF i <> 2 THEN EXIT;\r
   v_Char := SUCC('b');\r
   WriteChar(ZoneVar,v_Char); (*  'c' *)\r
   IF v_char <> 'c' THEN EXIT;\r
   \r
   (******* WRD *********) \r
   v_int := 5 + 256;\r
   v_Wrd := wrd(v_int);\r
   PrintWord(ZoneVar,v_Wrd);        (* 105  *)\r
   IF v_Wrd <> #H105 THEN EXIT;\r
   v_subr := 3;\r
   v_Wrd := wrd(v_Subr);\r
   PrintWord(ZoneVar,v_Wrd);  (* 3 *)\r
   IF v_Wrd <> #H003 THEN EXIT;\r
   \r
   \r
   v_Wrd := Wrd(256);\r
   PrintWord(ZoneVar,v_Wrd);        (* 0100  *)\r
   IF v_Wrd <> #H100 THEN EXIT;\r
   Test3OK := true;\r
   \r
   end;\r
\r
\r
\r
\r
\r
\r
(************************************************************* *)\r
(*************** TEST VERSION 4 ********************************)\r
(************************************************************* *)\r
\r
\r
Program TestVer4(Shared fin,OK : boolean); EXTERNAL;\r
\r
\r
\r
\r
\r
\r
\r
(*******************************************************************)\r
(*******************************************************************)\r
(****************** TEST VERSION 5 *********************************)\r
(*******************************************************************)\r
(*******************************************************************)\r
\r
\r
\r
\r
Program TestVer5(Shared fin,OK : boolean); EXTERNAL;\r
\r
\r
(*******************************************************************)\r
(*******************************************************************)\r
(****************** TEST VERSION 6 *********************************)\r
(*******************************************************************)\r
(*******************************************************************)\r
\r
\r
PROCEDURE TestVersion6;\r
\r
\r
VAR \r
  TEST6OK : Boolean;\r
\r
\r
\r
   (********************** TEST6A *******************)\r
   (* var declaration: dynamic subrange *)\r
   PROCEDURE TEST6A;\r
   var high : integer;\r
   procedure p;\r
   var\r
   d : 1..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,"Test6A");\r
   high := 4;\r
   p;\r
   end;\r
   \r
\r
  (************************* TEST6AA **********************)\r
   (* dynamic subrange type declare  *)\r
   PROCEDURE test6aa;\r
   var high, low : integer;\r
   procedure p;\r
   type\r
   t = low .. high;\r
   var\r
   d : t;\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,"Test6AA");\r
    high := 1;\r
    low := - 1;\r
    p;\r
   end;\r
   \r
\r
\r
   (**************************** TEST6AB ************************)\r
   (* simple dynamic subrange expressions *)\r
   PROCEDURE test6ab;\r
   \r
   var high , low : integer;\r
   \r
   \r
   procedure P;\r
   var\r
   a,c : -1110 + low ..high := 7;\r
   b : -30 + low..37 := - 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,"Test6AB");\r
   high := 7;\r
   low := 0;\r
   p;\r
   end;\r
   \r
\r
   (*************************** TEST6AC *********************)\r
   (* simple dynamic Subrange expressions *)\r
   PROCEDURE test6ac;\r
   VAR\r
     limit : integer := 7;\r
   a : limit..limit;\r
   b : integer;\r
   begin\r
   WriteName(ZoneVar,"Test6AC");\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
   (************************** TEST6AD ************************)\r
   (* simple integer and char Subrange expressions *)\r
   PROCEDURE test6ad;\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
   var\r
   a : limit..abs(7);\r
   ch : char;\r
   chsubrange : ch1 .. ch2;\r
   subscalar : a1 ..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,"Test6AD");\r
     limit := 7;\r
     ch1 := 'a';\r
     ch2 := 'c';\r
     varscalar := a2;\r
     p;\r
   end;\r
   \r
   \r
\r
   (********************* TEST6B **********************)\r
   (*   for step  *)\r
   PROCEDURE test6b;\r
   const\r
   ni = 9;\r
   var\r
   d :integer;\r
   begin\r
   WriteName(ZoneVar,"Test6B");\r
   d := 0;\r
   for i := d to 10 do\r
   d := d+1;\r
   PrintInteger(ZoneVar, d);  (* 11 *)\r
   IF d <> 11 THEN TEST6OK := false\r
              ELSE TEST6OK := true;\r
   end;\r
   \r
   \r
  (*************************** TEST6BA *********************)\r
   (*  for and exitloop and continueloop and exit *)\r
   PROCEDURE test6ba;\r
   const\r
   ni = 9;\r
   \r
   var\r
   a,b,c : integer;\r
   step : integer; \r
   step1 : 1..5;\r
   \r
   begin\r
   WriteName(ZoneVar,"Test6BA");\r
   step := -23;\r
   step1 := 5;\r
   a:= 0; b:= 100;c := 1000;\r
   for i := a-1 to 3 * b DO  (* -1  to 300 *) \r
     begin\r
       a:= a+1;\r
       if a = b then\r
       For i := 1 downto step do\r
        begin\r
          repeat\r
            b := b - 1;\r
            for jj := 1 to (- 1) + step - step do exit;\r
            for i := step1 downto 1 do c := c + 1;\r
          until true;\r
         end;\r
   \r
       if a=1 then Continueloop;\r
       if b = a then exit;\r
   \r
   end;\r
   PrintInteger(ZoneVar, a); (* 302 *)\r
   PrintInteger(ZoneVar, b) ; (* 75 *)\r
   PrintInteger(ZoneVar, c); (* 1125 *)\r
   IF (A <> 302) or (b <> 75) OR (c <> 1125) THEN TEST6OK := false\r
    ELSE Test6OK := true;\r
   \r
   end;\r
\r
\r
  (**************************** TEST6BB **************************)\r
  (*  for with scalartype and char *)\r
  PROCEDURE  test6bb;\r
   const\r
   ni = 9;\r
   \r
   type\r
     scalar = (a0,a1,a2,a3,a4,a5,a6,a7,a8);\r
   var\r
   a : integer;\r
   scalarvar : scalar;\r
   ch :char;\r
   \r
   begin\r
   WriteName(ZoneVar,"Test6BB");\r
   Test6OK := false;\r
   a := 0;\r
   scalarvar := a1;\r
   for i := scalarvar to a7 do a := a + 1;\r
   PrintInteger(ZoneVar, a);  (* 7 *)\r
   IF a <> 7 THEN EXIT;\r
   \r
   ch := 'a';\r
   a := 0;\r
   For i := 'c' downto ch do\r
     for j := ch to i do\r
        for i := j to j do a := a + 1;\r
   PrintInteger(ZoneVar, a); (* 6 *)\r
   IF a = 6 THEN Test6OK := true;\r
   \r
   end;\r
   \r
\r
\r
\r
  (************************* TEST6C ******************************)\r
  \r
  PROCEDURE test6c;\r
  (* familie type of subranges *)\r
  \r
  type t(n : integer) = n..11;\r
       tt ( n : integer) = 1..(n + 22);\r
\r
  \r
  var\r
   x : integer := 11;\r
   xx : t(x);\r
   yy : t(11) := 11;\r
   zz : tt(x - yy);\r
  \r
  begin\r
    WriteName(ZoneVar,"Test6C");\r
    Test6OK := false;\r
    xx := x;\r
    yy := xx;\r
    PrintInteger(ZoneVar, yy); (* 11 *)\r
    IF yy <> 11 THEN EXIT;\r
    PrintInteger(ZoneVar, xx); (* 11 *)\r
    IF xx <> 11 THEN EXIT;\r
    PrintInteger(ZoneVar, x);  (* 11*)\r
    IF x <> 11 THEN EXIT;\r
    zz := yy;\r
    zz := zz + xx;\r
    PrintInteger(ZoneVar, zz);  (* 22 *)\r
    IF zz = 22 THEN Test6OK := true;\r
  \r
  END;\r
\r
\r
  (*********************** TEST6CB  ***************************)\r
\r
  Procedure test6ca;\r
  (* familietype and subranges *)\r
  \r
  var\r
    bool : boolean := true;\r
    bool1 : boolean := true;\r
    bool2 : boolean := false;\r
  procedure proclevel1;\r
  type t(n,m : integer; s : boolean; ss : integer) = n + m .. ss;\r
       tt ( n : integer) = t(n,3,bool,4);\r
       ttt = tt(1);\r
  \r
  procedure proclevel2;\r
  var\r
   xx : t(1,3,bool1,4);\r
   yy : t(1,3,bool,4);\r
   y : tt(1);\r
   z : ttt;\r
   res,res1 : t(0,32,bool,32);\r
   i : integer := 32;\r
  \r
  Function Add(Var R : t; var x : t; xxx : t(1,2,bool,xx);\r
                yy : t; var y : t(1,3,bool1,xx);\r
                var y1 : tt; y2: tt;\r
                var z : ttt;   z1 : tt(1)) : t(i,0,bool1,32);\r
   begin\r
     r :=  x + ( ( xxx + yy) + ( ( y + y1) + ( ( y2 + z) + z1)));\r
     Add := x + xxx  + yy + y + y1 + y2 + z + z1;       \r
   end;       \r
  \r
  BEGIN\r
    WriteName(ZoneVar,"Test6CA");\r
    Test6OK := false;\r
    xx := 4;\r
    yy := xx;\r
    y := yy;\r
    z := y;\r
    Printinteger(ZoneVar,xx); (* 4 *)\r
    IF xx <> 4 THEN EXIT;\r
    PrintInteger(ZoneVar, z);  (* 4 *)\r
    IF z <> 4 THEN EXIT;\r
    Res := add(Res1,xx,xx,yy,yy,y,y,z,z);\r
    PrintInteger(ZoneVar, Res); (* 32 *)\r
    IF Res <> 32 THEN EXIT;\r
    PrintInteger(ZoneVar, Res1); (* 32 *)\r
    IF Res1 <> 32 THEN EXIT;\r
    Test6Ok := true;\r
  end;\r
  BEGIN\r
    ProcLevel2;\r
  END;\r
  \r
  BEGIN\r
   ProcLevel1;\r
  END;\r
  \r
  \r
  \r
  \r
    (****************************** TEST6CB ************************)\r
  PROCEDURE test6cb;\r
  (* TypeSelect on familie *)\r
  \r
   Type\r
    T(n : integer; Bool : boolean) = (n = 4)..Bool;\r
  \r
   var a : array(1..1) of T(4,True);\r
       i : integer;\r
       b : boolean;\r
   PROCEDURE p(x : T);\r
    BEGIN\r
      i := x!n;  \r
      b := x!Bool;\r
    END;\r
  \r
  BEGIN\r
    WriteName(ZoneVar,"Test6CB");\r
    Test6OK := false;  \r
  \r
    FOR j := 1 TO 1 DO\r
      BEGIN\r
        a(j) := a(j)!bool;\r
        PrintBoolean(ZoneVar,a(j));  (* true *)\r
        IF a(j) = false THEN EXIT;\r
        PrintInteger(ZoneVar,a(j)!n);  (* 4 *)\r
        IF a(j)!n <> 4 THEN EXIT;\r
      END;\r
  \r
    p(a(1));\r
    PrintInteger(ZoneVar,i);  (* 4 *);\r
    IF i <> 4 THEN EXIT;\r
    PrintBoolean(ZoneVar,b);  (* true *)\r
    IF b THEN Test6OK := true;\r
  END;\r
\r
\r
\r
  \r
  \r
BEGIN\r
   WriteName(ZoneVar,"TESTVERSION6");\r
    \r
\r
TEST6a;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TEST6aa;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TEST6ab;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TEST6ac;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TEST6ad;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TEST6b;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TEST6ba;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
    \r
TEST6bb;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
    \r
TEST6c;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
    \r
TEST6CA;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
    \r
TEST6cb;\r
IF TEST6OK = false THEN GOTO ExitError;\r
\r
\r
\r
exit;\r
EXITError:\r
 testverok := false;\r
\r
\r
\r
End;\r
\r
\r
(* Procedure on file systest2 *)\r
PROCEDURE Test6Fam(VAR OK : Boolean;VAR z : zone); EXTERNAL;\r
\r
\r
\r
\r
(********************************************************************)\r
(********************* TEST VERSION 7 *******************************)\r
(********************************************************************)\r
\r
Program TestVer7(Shared fin,OK : boolean); EXTERNAL;\r
\r
\r
\r
\r
(********************************************************************)\r
(********************* TEST VERSION 8 *******************************)\r
(********************************************************************)\r
\r
\r
PROCEDURE TestVersion8;\r
\r
Var \r
  Test8Ok : boolean;\r
\r
\r
\r
\r
(*********************** TEST8A *********************)\r
(* dynamic  record with subtypes and dot-notation *)\r
PROCEDURE test8a;\r
const\r
ni = 9;\r
var high : integer:= 3;\r
   high1 : integer := 11;\r
type\r
rec = 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;\r
begin\r
WriteName(ZoneVar,"Test8A");\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
(************************ TEST8C **********************)\r
PROCEDURE test8c;\r
(* array of records *)\r
var high : integer := 10;\r
type\r
ix_type = 0..high;\r
rectype = record\r
           f1: ix_type;\r
           f2: boolean;\r
          end;\r
\r
\r
artype1 = array(ix_type) of rectype;\r
artype2 = array(11..high) of integer;\r
\r
dynrectype = record\r
               dummy : artype2;\r
               i : integer;\r
               ar1 : artype1;\r
             end;\r
             \r
var\r
step: ix_type;\r
dynrec : dynrectype ;\r
\r
begin\r
WriteName(ZoneVar,"Test8C");\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
(************************** TEST8CA ***********************)\r
PROCEDURE test8ca;\r
(* array-type renamed to recordtype *)\r
Var \r
  high : integer := 4;\r
type\r
rect = record\r
         f1 : integer;\r
         f2 : array(1..high) 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,"Test8CA");\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 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
(******************************** TEST8CC *******************)\r
\r
Procedure test8cc;\r
(* assignment and exchange on dynamic record types *)\r
var high : integer := 4;\r
type\r
ix_type = 0..high;\r
rectype = record\r
           f2: boolean;\r
           f3: array(ix_type) of 0..210;\r
           f4 : integer;\r
           f1: integer;\r
        \r
           \r
          end;\r
\r
\r
\r
var\r
rec1,rec2: rectype;\r
\r
begin\r
WriteName(ZoneVar,"Test8CC");\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
(*********************** TEST8CD **********************)\r
PROCEDURE test8cd;\r
(* compare on dynamic array and record type *)\r
\r
var high : integer := 5;\r
type\r
indextype = 1.. high;\r
arr = array(indextype ) of indextype;\r
rec = record\r
        i : integer;\r
        i1 : arr;\r
        i2 : boolean;\r
        i3 : integer;\r
      end;\r
\r
var\r
recorda,recordb : rec;\r
bool : boolean;\r
\r
\r
\r
procedure compare( var arec : rec; brec : rec);\r
\r
\r
\r
\r
\r
\r
\r
      procedure comparerecord(var r1, 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,"Test8CD");\r
TEST8OK := false;   \r
\r
recorda.i := 5;\r
recorda.i2 := true;\r
recorda.i3 := -120;\r
$test(pass4=256)\r
$test(pass4=10)\r
for i:= 1 to high do recorda.i1(i) := i;\r
$test(pass4=512)\r
$test(pass4=0)\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
\r
\r
\r
\r
(**************************** TEST8IA ***********************)\r
 PROCEDURE Test8ia;\r
  (* familie type of records *)\r
\r
Type\r
  SubType(x : 1..20) = -x..x;\r
  T ( n : integer) = Array(1..n) Of record\r
                                      j : subtype(n);\r
                                      a : array(1..n) of integer;\r
                                      i : integer;\r
                                     end;\r
  s (n,m : integer) = record\r
                        j : integer;\r
                        a : Array(n..m) of SubType(m);\r
                        i : subtype(m);\r
                      End;\r
\r
Var\r
  x : integer :=5;\r
  dyn1 : T(x);\r
\r
Begin\r
  WriteName(ZoneVar,"Test8IA");\r
  Test8OK := false;\r
  For i := 1 TO x do \r
    Begin\r
      dyn1(i).i := i * 2;\r
      dyn1(i).j := i ;\r
      dyn1(i).a(i) := i;\r
   end;\r
\r
  For i := 1 To 5 Do PrintInteger(ZoneVar,dyn1(i).i); (* 2,4,6, .. 10 *)\r
  For i := 1 To 5 Do PrintInteger(ZoneVar,dyn1(i).j); (* 1,2,3,4,5*)\r
  For i := 1 To 5 Do PrintInteger(ZoneVar,dyn1(i).a(i)); (* 1,2,3,4,5*)\r
  FOR i := 1 To 5 DO\r
   BEGIN\r
     IF dyn1(i).i <> (i * 2) THEN EXIT;\r
     IF Dyn1(i).a(i) <> i THEN EXIT;\r
     IF dyn1(i).j <> i THEN EXIT;\r
   END;\r
\r
  for iii := 1 to 5 do\r
  With Dyn1(iii) As x : S(1,x) DO\r
      begin \r
        printinteger(ZoneVar,x.i); (* 2,4,6..10 *)\r
        PrintInteger(ZoneVar,x.j); (*1,2..   5*)\r
        PrintInteger(ZoneVar,x.a(iii)); (* 1,2 .. 5 *)\r
        IF x.i <> (iii * 2) THEN EXIT;\r
        IF x.j <> iii THEN EXIT;\r
        IF x.a(iii) <> iii THEN EXIT;\r
      End;\r
      \r
  TEST8OK := true;\r
        \r
End;\r
\r
\r
  (****************************** TEST8IB ****************************)\r
  PROCEDURE Test8ib;\r
 (* familie of record *)\r
 (* famile decl in context *)\r
type\r
FamilieArray(n : integer) = record\r
                               a : array(1..n) of integer;\r
                               i : integer;\r
                             End;\r
\r
var\r
 i,i1 : integer := 5;\r
 x,y,z : FamilieArray(i);\r
 typesel : integer;\r
\r
Procedure ProcTest7ib(x : FamilieArray; VAR y : FamilieArray;\r
                               var z : FamilieArray(5));\r
\r
  Var\r
    L : FamilieArray(i);\r
  Begin\r
    x.a(i) := 0;\r
    y.a(i) := 1;\r
    z.a(i) := 2;\r
    L := x;\r
    x := y;\r
    L :=: y;\r
    z :=: y;\r
    i := L.a(5);\r
    i1 := x.a(5);\r
\r
    TypeSel := L!n + x!n + y!n + z!n;\r
\r
  End;\r
\r
Begin\r
 WriteName(ZoneVar,"Test8IB");\r
 Test8OK := false;\r
 x.a(i) := 5;\r
 x.i := 11;\r
 y.a(i) := 5;\r
 z.a(i) := 5;\r
 PrintInteger(ZoneVar,z.a(5));   (* 5 *)\r
 IF z.a(5) <> 5 THEN EXIT;\r
 ProcTest7ib(x,y,z);\r
\r
 PrintInteger(ZoneVar,x.a(5)); (* 5 *)\r
 IF x.a(5) <> 5 THEN EXIT;\r
 PrintInteger(ZoneVar,i); (* 1 *)\r
 IF i <> 1 THEN EXIT;\r
 PrintInteger(ZoneVar,i1); (* 1 *)\r
 IF i1 <> 1 THEN EXIT;\r
 PrintInteger(ZoneVar,y.a(5)); (* 2 *)\r
 IF y.a(5) <> 2 THEN EXIT;\r
 PrintInteger(ZoneVar,z.a(5)); (* 0 *)\r
 IF z.a(5) <> 0 THEN EXIT;\r
 PrintInteger(ZoneVar,z.i);  (* 11 *)\r
 IF z.i = 11 THEN Test8OK := true;\r
End;\r
\r
                         \r
\r
\r
\r
\r
\r
\r
BEGIN\r
WriteName(ZoneVar,"TESTVERSION8");\r
\r
Test8a;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8c;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8ca;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8cc;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8cd;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8ia;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
Test8ib;\r
IF Test8OK <> true THEN GOTO EXITerror;\r
\r
\r
Exit;\r
\r
ExitError:\r
TestVerOK := false;\r
\r
END;\r
\r
\r
\r
Procedure Test8Fam(Var OK : Boolean; VAR  Z : Zone); EXTERNAL;\r
\r
\r
\r
Procedure Test8JA(Var OK : Boolean; VAR  Z : Zone); EXTERNAL;\r
\r
\r
\r
Procedure Test8H(Var OK : Boolean; VAR  Z : Zone); EXTERNAL;\r
\r
\r
\r
Procedure Test10A(Var OK : Boolean; VAR  Z : Zone); EXTERNAL;\r
\r
(* Test of the option segment *)\r
\r
\r
const teststringseg = "from segment";\r
\r
$segment(seg)\r
Procedure testseg; forward;\r
Procedure TestSeg1(i,j : integer); forward;\r
procedure testseg2(s : string); forward;\r
procedure TestSegment;\r
BEGIN\r
  Testseg;\r
  TestSeg1(3,9);\r
  TestSeg2(teststringseg);\r
END;\r
$Segment(Seg1)\r
procedure TestSeg;\r
BEGIN\r
  TestSeg1(1,100);\r
  TestSeg2(teststringseg);\r
END;\r
Procedure TestSeg1(i,j : integer); \r
begin\r
 Printinteger(ZoneVar,i + j);  (* 101   12 *)\r
End; \r
\r
procedure testseg2(s : string);\r
VAR\r
  ss : String(14);\r
BEGIN\r
  ss := s;\r
  ss(14) := 'm';\r
  WriteString(ZoneVar,ss);\r
  PrintInteger(ZoneVar,ss!Length); (* 14 *)\r
END;\r
  \r
\r
$segment(seg2)\r
\r
\r
begin  (* Main program *)\r
\r
--  InitZone(zoneVar);\r
\r
\r
\r
\r
\r
\r
\r
\r
    (*********** TEST1 *****************)\r
  \r
  WriteName(ZoneVar,"Test1");\r
  (* var declare and simpel expresion *)\r
  a:= 2;\r
  c:=( (a + 2*ni)*4 - a*8 ) div 2 - 12*( a -1 );\r
  PrintInteger(ZoneVar,  c ); (* 20 *)\r
  IF c<> 20 THEN Goto ExitError;\r
\r
  b:= c > a;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN goto ExitError;\r
\r
  (* ***********  TEST1A ****************)\r
  (* procedure without params, procedurecall *)\r
  WriteName(ZoneVar,"Test1A");\r
  PrintInteger(ZoneVar, 0);\r
\r
\r
\r
  (************** TEST1B *****************)\r
  (* extern procedure, procedurecall *)\r
  WriteName(ZoneVar,"Test1B");\r
  PrintInteger(ZoneVar, ni);\r
\r
\r
\r
  (**************** TEST1C ***********************)\r
  (* external procedure with one parameter, var declare *)\r
  WriteName(ZoneVar,"Test1C");\r
  c := 1;\r
  a := c + 3;\r
  PrintInteger(ZoneVar, a);  (* 4 *)\r
  IF a <> 4 THEN Goto ExitError;\r
\r
\r
\r
  (******************************* TEST1G ****************************)\r
  (* simple boolean expressions *)\r
  \r
  WriteName(ZoneVar,"Test1G");\r
  Bool1:= true;\r
  PrintBoolean(ZoneVar, Bool1);  (* true *)\r
  IF Bool1 <> True THEN GOTO ExitError;\r
  \r
  Bool2:= false;\r
  PrintBoolean(ZoneVar, Bool2);   (* false *)\r
  IF Bool2 <> false THEN GOTO ExitError;\r
  \r
  Bool2:= not Bool1;\r
  PrintBoolean(ZoneVar, Bool2);   (* false *)\r
  IF Bool2 <> false THEN GOTO ExitError;\r
  \r
  Bool2 := Bool1 and Bool2;\r
  PrintBoolean(ZoneVar, Bool2);    (* false *)\r
  IF Bool2 <> false THEN GOTO ExitError;\r
  \r
  Bool1 := Bool2 or Bool1;\r
  PrintBoolean(ZoneVar, Bool1);     (* true *)\r
  IF Bool1 <> true THEN GOTO ExitError;\r
  \r
  Bool1 := Bool1 Xor Bool2;\r
  PrintBoolean(ZoneVar, Bool1);    (* true *)\r
  IF Bool1 <> true THEN GOTO ExitError;\r
  \r
  PrintBoolean(ZoneVar, not (Bool2 or Bool1));   (* false *)\r
  PrintBoolean(ZoneVar, not (Bool1 and Bool2));   (* true *)\r
  PrintBoolean(ZoneVar, not (Bool2 xor Bool1));   (* false *)\r
\r
\r
\r
\r
  (*****************************  TEST1GA **************************)\r
  (* simple boolean expressions *)\r
  \r
\r
\r
\r
\r
  WriteName(ZoneVar,"Test1GA");\r
  Bool1:= true;\r
  PrintBoolean(ZoneVar, Bool1);  (* true *)\r
  IF Bool1 <> true THEN GOTO ExitError;\r
  \r
  Bool2:= false;\r
  PrintBoolean(ZoneVar, Bool2);  (* false *)\r
  IF Bool2 <> false THEN GOTO ExitError;\r
  \r
  Bool2:= (Bool1 AND ( Bool2 or ( Bool1 xor ( not Bool2 and ( Bool1 or Bool2)\r
                                                            xor Bool1))));\r
  PrintBoolean(ZoneVar, Bool2);  (* true *)\r
  IF Bool2 <> true THEN GOTO ExitError;\r
  \r
  Bool2 := not Bool1;\r
  PrintBoolean(ZoneVar, Bool2);  (* false *)\r
  IF Bool2 <> false THEN GOTO ExitError;\r
  \r
  Bool2 := ( Bool1 xor Bool2) xor ((Bool1 and Bool2) or ((Bool1 xor Bool2)\r
                   and (Bool1 And (Bool2 or Bool1))));\r
  PrintBoolean(ZoneVar, Bool2);   (* false *)\r
  IF Bool2 <> false THEN GOTO ExitError;\r
  \r
\r
\r
\r
\r
\r
\r
\r
\r
\r
\r
  (************************ TEST1GB *******************************)\r
  (* simple boolean expressions *)\r
  WriteName(ZoneVar,"Test1GB");\r
  Bool1:= true;\r
  PrintBoolean(ZoneVar, Bool1);  (* true *)\r
  IF Bool1 <> true THEN GOTO ExitError;\r
  \r
  Bool2:= false;\r
  PrintBoolean(ZoneVar, Bool2);  (* false *)\r
  IF Bool2 <> false THEN GOTO ExitError;\r
  \r
  Bool1 := Bool1 and (Bool2 xor Bool1);\r
  PrintBoolean(ZoneVar, Bool1); (* true *)\r
  IF Bool1 <> true THEN GOTO ExitError;\r
  \r
  Bool1 := not ((Bool2 xor Bool1) and (Bool2 xor false));\r
  PrintBoolean(ZoneVar, Bool1); (* true *)\r
  IF Bool1 <> true THEN GOTO ExitError;\r
  \r
  int1 := 5;\r
  int2 := -4;\r
  Bool1 := (int1 < int2) or Bool1;\r
  PrintBoolean(ZoneVar, Bool1); (* true *)\r
  IF Bool1 <> true THEN GOTO ExitError;\r
  \r
  Bool1 := (int1 < int2) xor Bool1;\r
  PrintBoolean(ZoneVar, Bool1); (* true *)\r
  IF Bool1 <> true THEN GOTO ExitError;\r
  \r
  \r
  \r
\r
\r
  (* ******************** TEST1H **********************)\r
  (* simple integer expressions *)\r
  WriteName(ZoneVar,"Test1H");\r
  a:= 7;\r
  PrintInteger(ZoneVar, a);  (* 7 *)\r
  IF a <> 7 THEN GOTO ExitError;\r
  d:= - 30;\r
  PrintInteger(ZoneVar, d);   (* -30 *)\r
  IF d <> -30 THEN GOTO ExitError;\r
  d:= - d;\r
  PrintInteger(ZoneVar, d);   (* 30 *)\r
  IF d <> 30 THEN GOTO ExitError;\r
  d := a + d;\r
  PrintInteger(ZoneVar, d);    (* 37 *)\r
  IF d <> 37 THEN GOTO ExitError;\r
  a :=  a - d;\r
  PrintInteger(ZoneVar, a);     (* -30 *)\r
  IF a <> -30 THEN GOTO ExitError;\r
  a := a * d;\r
  PrintInteger(ZoneVar, a);    (* -1110 *)\r
  IF a <> -1110 THEN GOTO ExitError;\r
  a := a div d;\r
  PrintInteger(ZoneVar, a);    (* -30 *)\r
  IF a <> -30 THEN GOTO ExitError;\r
  a := d mod a;\r
  PrintInteger(ZoneVar, a);    (* 7 *)\r
  IF a <> 7 THEN GOTO ExitError;\r
  PrintInteger(ZoneVar, - (d - a));   (* -30 *)\r
  PrintInteger(ZoneVar, - (a div d));   (* 0 *)\r
  PrintInteger(ZoneVar, - (d * a));   (* -259 *)\r
\r
\r
\r
\r
\r
\r
  (****************** TEST1HA ******************)\r
  (* simple integer expressions *)\r
\r
\r
  WriteName(ZoneVar,"Test1HA");\r
  a:= 7;\r
  PrintInteger(ZoneVar, a);  (* 7 *)\r
  IF a <> 7 THEN GOTO ExitError;\r
  d:= - 30;\r
  PrintInteger(ZoneVar, d);   (* -30 *)\r
  IF d <> -30 THEN GOTO ExitError;\r
  d:= - d + (( d - 2) + (( a div 4) * d) mod a +( 4 + ( ( a*d) DIV (d div a)) +\r
       3) );\r
  PrintInteger(ZoneVar, d);   (* 55 *)\r
  IF d <> 55 THEN GOTO ExitError;\r
\r
  d := d * a MOD (- a) + 4;\r
  PrintInteger(ZoneVar, d);   (* 4 *)\r
  IF d <> 4 THEN GOTO ExitError;\r
\r
  d := (30079 div d) * d + (30079 mod d);\r
  PrintInteger(ZoneVar, d);   (* 30079 *)\r
  IF d <> 30079 THEN GOTO ExitError;\r
\r
\r
\r
\r
\r
\r
  (***********************TEST1HB ****************************)\r
  (* simple integer expressions *)\r
  \r
  WriteName(ZoneVar,"Test1HB");\r
  a:= 7;\r
  PrintInteger(ZoneVar, a);  (* 7 *)\r
  IF a <> 7 THEN GOTO ExitError;\r
  d:= - 30;\r
  PrintInteger(ZoneVar, d);   (* -30 *)\r
  IF d <> -30 THEN GOTO ExitError;\r
\r
  d := a + (( a DIV d) + (( a MOD d) DIV (( A + 10) + ((23 + a) * (( a MOD d) MOD\r
        (( a - 300) * ((d + a) - ((d  - 230) mod ( a + d) ))))))));\r
  PrintInteger(ZoneVar, d); (* 7 *)\r
  IF d <> 7 THEN GOTO ExitError;\r
                  \r
\r
\r
\r
\r
\r
\r
\r
  (********************** TEST1I ***************************)\r
  (* simple word expressions *)\r
  \r
  WriteName(ZoneVar,"Test1I");\r
  aword:= #h007;\r
  PrintWord(ZoneVar, aword);  (* 7 *)\r
  IF aWord <> #H007 THEN GOTO ExitError;\r
\r
  bword:=  #D030;\r
  PrintWord(ZoneVar, bword);   (* 1E     30 *)\r
  IF bWord <> #H01E THEN GOTO ExitError;\r
\r
  bword := aword + bword;\r
  PrintWord(ZoneVar, bword);    (* 25      37 *)\r
  IF bWord <> #H025 THEN GOTO ExitError;\r
\r
  aword :=  aword - bword;\r
  PrintWord(ZoneVar, aword);     (* FFE2    -30 *)\r
  IF aWord <> #HFFE2 THEN GOTO ExitError;\r
\r
  aword := aword * bword;\r
  PrintWord(ZoneVar, aword);    (* FBAA *)\r
  IF aWord <> #HFBAA THEN GOTO ExitError;\r
\r
  aword := aword div bword;\r
  PrintWord(ZoneVar, aword);    (* 6CD     *)\r
  IF aWord <> #H6CD THEN GOTO ExitError;\r
\r
  aword := bword mod aword;\r
  PrintWord(ZoneVar, aword);    (* 25       37 *)\r
  IF aWord <> #H025 THEN GOTO ExitError;\r
\r
  PrintWord(ZoneVar, (bword - aword));   (* 0 *)\r
\r
  PrintWord(ZoneVar,  (aword div bword));   (* 1 *)\r
  PrintWord(ZoneVar,  (bword * aword));   (* 559   *)\r
  \r
  \r
  aword := #h010E;\r
  \r
  bword:= not aword;\r
  PrintWord(ZoneVar, bword);   (* FEF1   -271 *)\r
  IF bWord <> #HFEF1 THEN GOTO ExitError;\r
\r
  bword := (aword and bword) + #h003;\r
  PrintWord(ZoneVar, bword);    (* 3 *)\r
  IF bWord <> #H003 THEN GOTO ExitError;\r
\r
  aword := bword or aword;\r
  PrintWord(ZoneVar, aword);     (* 10F    271 *)\r
  IF aWord <> #H10F THEN GOTO ExitError;\r
\r
  aword := aword Xor bword;\r
  PrintWord(ZoneVar, aword);    (* 10C    268 *)\r
  IF aWord <> #H10C THEN GOTO ExitError;\r
\r
  PrintWord(ZoneVar, not (bword or aword));   (* 10F    271 *)\r
  PrintWord(ZoneVar, not (aword and bword));   (* 0       0 *)\r
  PrintWord(ZoneVar, not (bword xor aword));   (* 10F     271 *)\r
\r
  \r
  i := 1;\r
  \r
  bword :=  bword shift 2; \r
  PrintWord(ZoneVar, bword);      (* C  12 *)\r
  IF bWord <> #H00C THEN GOTO ExitError;\r
\r
  bword := #hFFFF;\r
  bword := bword shift 16;\r
  PrintWord(ZoneVar, bword);     (* 0*)\r
  IF bWord <> #H000 THEN GOTO ExitError;\r
\r
  aword := aword shift i; \r
  PrintWord(ZoneVar, aword);    (* 218       *)\r
  IF aWord <> #H00218 THEN GOTO ExitError;\r
\r
  \r
  \r
  \r
  \r
  bword:= (aword AND ( bword or ( aword xor ( not bword and \r
               ( aword or bword) xor aword))));\r
  PrintWord(ZoneVar, bword);  (* 218    *)\r
  IF bWord <> #H218 THEN GOTO ExitError;\r
\r
  bword := not aword;\r
  PrintWord(ZoneVar, bword);  (* FDE7*)\r
  IF bWord <> #HFDE7 THEN GOTO ExitError;\r
\r
  bword := ( aword xor bword) xor ((aword and bword) or ((aword xor bword)\r
                            and (aword and (bword or aword))));\r
  PrintWord(ZoneVar, bword);   (* FDE7 *)\r
  IF bWord <> #HFDE7 THEN GOTO ExitError;\r
\r
  \r
  \r
  bword:=  bword + (( bword - #h002) + (( aword div #H004) * bword) mod aword +( #h004 +\r
   ( ( aword*bword) DIV (bword div aword)) +#H003) );\r
  PrintWord(ZoneVar, bword);   (* FDB6 *)\r
  IF bWord <> #HFDB6 THEN GOTO ExitError;\r
\r
  bword := bword * aword MOD ( aword) ;\r
  PrintWord(ZoneVar, bword);   (* 0B8 *)\r
  IF bWord <> #H0B8 THEN GOTO ExitError;\r
\r
  bword := (#Hedc7 div bword) * bword + (#Hedc7 mod bword);\r
  PrintWord(ZoneVar, bword);   (* EDC7 *)\r
  IF bWord <> #HEDC7 THEN GOTO ExitError;\r
\r
  bword := (aword div (#H200 + bword)) xor\r
                                (bword and (#Hedc7 * (bword+ #H003)));\r
  PrintWord(ZoneVar, bword);   (* C806 *)\r
  IF bWord <> #HC806 THEN GOTO ExitError;\r
\r
\r
\r
\r
\r
  (* ************************ TEST1IA **************************)\r
  (* word and byte expressions *)\r
  WriteName(ZoneVar,"Test1IA");\r
  aw:= #H007;\r
  \r
  PrintWord(ZoneVar, aw);  (* 7 *)\r
  IF aw <> #H007 THEN GOTO ExitError;\r
\r
  bw:= #H030;\r
  PrintWord(ZoneVar, bw); (*30 *)\r
  IF bw <> #H0030 THEN GOTO ExitError;\r
\r
  bw := aw + (( aw DIV bw) + (( aw MOD bw) DIV (( aw + #HE10) + ((#H223 + aw)\r
         * (( aw MOD bw) MOD (((- aw) AND bw) or (((- bw) xor (- aw)) and\r
        (( aw - #H300) * ((bw + aw) - ((bw  - #H230) mod ( aw + bw) ))))))))));\r
  PrintWord(ZoneVar, bw);(*7*)\r
  IF bw <> #H007 THEN GOTO ExitError;\r
\r
           \r
  x:= #H07;\r
  PrintByte(ZoneVar, x);  (* 7 *)\r
  IF x <> #H07 THEN GOTO ExitError;\r
\r
  y:= #H30;\r
  PrintByte(ZoneVar, y);(*30*)\r
  IF y <> #H30 THEN GOTO ExitError;\r
  y := x + (( x DIV y) + (( x MOD y) DIV (( x + #HE1) + ((#H23 + x)\r
         * (( x MOD y) MOD (((- x) AND y) or (((- y) xor (- x)) and\r
        (( x - #H40) * ((y + x) - ((y  - #H23) mod ( x + y) ))))))))));\r
  PrintByte(ZoneVar, y);(*7*)\r
  IF y <> #H07 THEN GOTO ExitError;\r
\r
  \r
\r
\r
\r
\r
  (********************* TEST1J ***********************)                \r
  (* compare integer *)\r
  \r
  \r
  WriteName(ZoneVar,"Test1J");\r
  a := 3;\r
  c := - 3;\r
  b := a < c;\r
  PrintBoolean(ZoneVar, b);  (* false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := a <= c;\r
  PrintBoolean(ZoneVar, b);  (*false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := a > c;\r
  PrintBoolean(ZoneVar, b);  (*true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  b := a >= c;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  b := a = c;\r
  PrintBoolean(ZoneVar, b);  (* false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := a <> c;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  \r
\r
\r
\r
\r
\r
\r
  (************************ TEST1JA *****************************)\r
  (* compare word *)\r
  WriteName(ZoneVar,"Test1JA");\r
  aw := #H003;\r
  cw :=  #HFFFF;\r
  b := aw < cw;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  b := aw <= cw;\r
  PrintBoolean(ZoneVar, b);  (*true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  b := aw > cw;\r
  PrintBoolean(ZoneVar, b);  (*false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := aw >= cw;\r
  PrintBoolean(ZoneVar, b);  (* false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := aw = cw;\r
  PrintBoolean(ZoneVar, b);  (* false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := aw <> cw;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
\r
\r
\r
\r
\r
\r
\r
  (************************** TEST1JB **************************)\r
  (* compare byte *)\r
  \r
  WriteName(ZoneVar,"Test1JB");\r
  abyte := #H00;\r
  cbyte :=  abyte;\r
  b := abyte < cbyte;\r
  PrintBoolean(ZoneVar, b);  (* false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := abyte <= cbyte;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  b := abyte > cbyte;\r
  PrintBoolean(ZoneVar, b);  (* false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := abyte >= cbyte;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  b := abyte = cbyte;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  b := abyte <> cbyte;\r
  PrintBoolean(ZoneVar, b);  (* false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
\r
\r
\r
  (************************** TEST1JC *****************************)\r
  (* compare  *)\r
  WriteName(ZoneVar,"Test1JC");\r
  b := true;\r
  a := 3;\r
  c := - 3;\r
  w1 := #HFE00;\r
  w2 := w1;\r
  byte1 := #HFF;\r
  Byte2 := #H0;\r
  b := ((a < c) >= ((W1 > w2) >= (( byte1 > byte2) = ((w1 <> #HFFEE) <=\r
       ((a > 3) <= ((#H0 >= byte1) <> ((a = 3) < b) ))))));\r
  PrintBoolean(ZoneVar, b); (* 1 *)  \r
  IF b <> true THEN GOTO ExitError;\r
\r
\r
  (*************************** TEST1JD *************************)\r
  (* compare with const *)\r
  WriteName(ZoneVar,"Test1JD");\r
  i := 0;\r
  a := 4;\r
  aw := #H004;\r
  IF (4 < a ) AND ( #H004 < aw) THEN i := i + 10;\r
  a := 2;\r
  aw := #H002;\r
  IF (4 < a ) AND ( #H004 < aw) THEN i := i + 100;\r
  a := 5;\r
  aw := #H005;\r
  IF (4 < a ) AND ( #H004 < aw) THEN i := i + 1000;\r
  PRintInteger(ZoneVar,i); (* 1000 *)\r
  IF i <> 1000 THEN EXIT;\r
\r
  i := 0;\r
  a := 4;\r
  aw := #H004;\r
  IF (4 <= a ) AND ( #H004 <= aw) THEN i := i + 10;\r
  a := 2;\r
  aw := #H002;\r
  IF (4 <= a ) AND ( #H004 <= aw) THEN i := i + 100;\r
  a := 5;\r
  aw := #H005;\r
  IF (4 <= a ) AND ( #H004 <= aw) THEN i := i + 1000;\r
  PRintInteger(ZoneVar,i); (* 1010 *)\r
  IF i <> 1010 THEN EXIT;\r
  i := 0;\r
  a := 4;\r
  aw := #H004;\r
  IF (4 > a ) AND ( #H004 > aw) THEN i := i + 10;\r
  a := 2;\r
  aw := #H002;\r
  IF (4 > a ) AND ( #H004 > aw) THEN i := i + 100;\r
  a := 5;\r
  aw := #H005;\r
  IF (4 > a ) AND ( #H004 > aw) THEN i := i + 1000;\r
  PRintInteger(ZoneVar,i); (* 100 *)\r
  IF i <> 100 THEN EXIT;\r
\r
  i := 0;\r
  a := 4;\r
  aw := #H004;\r
  IF (4 >= a ) AND ( #H004 >= aw) THEN i := i + 10;\r
  a := 2;\r
  aw := #H002;\r
  IF (4 >= a ) AND ( #H004 >= aw) THEN i := i + 100;\r
  a := 5;\r
  aw := #H005;\r
  IF (4 >= a ) AND ( #H004 >= aw) THEN i := i + 1000;\r
  PRintInteger(ZoneVar,i); (* 110 *)\r
  IF i <> 110 THEN EXIT;\r
\r
  i := 0;\r
  a := 4;\r
  aw := #H004;\r
  IF (4 = a ) AND ( #H004 = aw) THEN i := i + 10;\r
  a := 2;\r
  aw := #H002;\r
  IF (4 = a ) AND ( #H004 = aw) THEN i := i + 100;\r
  a := 5;\r
  aw := #H005;\r
  IF (4 = a ) AND ( #H004 = aw) THEN i := i + 1000;\r
  PRintInteger(ZoneVar,i); (* 10 *)\r
  IF i <> 10 THEN EXIT;\r
\r
  i := 0;\r
  a := 4;\r
  aw := #H004;\r
  IF (4 <> a ) AND ( #H004 <> aw) THEN i := i + 10;\r
  a := 2;\r
  aw := #H002;\r
  IF (4 <> a ) AND ( #H004 <> aw) THEN i := i + 100;\r
  a := 5;\r
  aw := #H005;\r
  IF (4 <> a ) AND ( #H004 <> aw) THEN i := i + 1000;\r
  PRintInteger(ZoneVar,i); (* 1100 *)\r
  IF i <> 1100 THEN EXIT;\r
 \r
\r
\r
  (************************* TEST1K **************************)\r
  (* simple byte expressions *)\r
  WriteName(ZoneVar,"Test1K");\r
  ab:= #H07;\r
  PrintByte(ZoneVar, ab);  (* 7 *)\r
  IF ab <> #H7 THEN GOTO ExitError;\r
  bb:=  #D30;\r
  PrintByte(ZoneVar, bb);   (* 1E *)\r
  IF bb <> #H1E THEN GOTO ExitError;\r
  bb := ab + bb;\r
  PrintByte(ZoneVar, bb);    (* 25      37 *)\r
  IF bb <> #H25 THEN GOTO ExitError;\r
  ab :=  ab - bb;\r
  PrintByte(ZoneVar, ab);     (* E2     *)\r
  IF ab <> #HE2 THEN GOTO ExitError;\r
  ab := ab * bb;\r
  PrintByte(ZoneVar, ab);    (* AA  *)\r
  IF ab <> #HAA THEN GOTO ExitError;\r
  ab := ab div bb;\r
  PrintByte(ZoneVar, ab);    (* 4 *)\r
  IF ab <> #H4 THEN GOTO ExitError;\r
  ab := bb mod ab;\r
  PrintByte(ZoneVar, ab);    (* 1 *)\r
  IF ab <> #H1 THEN GOTO ExitError;\r
  PrintByte(ZoneVar, (bb - ab));   (* 24 *)\r
  PrintByte(ZoneVar,  (ab div bb));   (* 0 *)\r
  PrintByte(ZoneVar,  (bb * ab));   (* 25 *)\r
  \r
  \r
  ab := #h0E;\r
  \r
  bb := not ab;\r
  PrintByte(ZoneVar, bb);   (*  F1 *)\r
  IF bb <> #HF1 THEN GOTO ExitError;\r
  bb := (ab and bb) + #h03;\r
  PrintByte(ZoneVar, bb);    (* 3 *)\r
  IF bb <> #H3 THEN GOTO ExitError;\r
  ab := bb or ab;\r
  PrintByte(ZoneVar, ab);     (* 0F     *)\r
  IF ab <> #H0F THEN GOTO ExitError;\r
  ab := ab Xor bb;\r
  PrintByte(ZoneVar, ab);    (* 0C    *)\r
  IF ab <> #H0C THEN GOTO ExitError;\r
  PrintByte(ZoneVar, not (bb or ab));   (* F0 *)\r
  PrintByte(ZoneVar, not (ab and bb));   (* FF*)\r
  PrintByte(ZoneVar, not (bb xor ab));   (* F0 *)\r
  \r
  i := 1;\r
  \r
  bb :=  bb shift (- 2);\r
  PrintByte(ZoneVar, bb);      (* 0 *)\r
  IF bb <> #H0 THEN GOTO ExitError;\r
  bb := #hFF;\r
  bb := bb shift 5;\r
  PrintByte(ZoneVar, bb);     (* E0 *)\r
  IF bb <> #HE0 THEN GOTO ExitError;\r
  bb := bb shift 8;\r
  PrintByte(ZoneVar, bb);  (* 0*)\r
  IF bb <> #H0 THEN GOTO ExitError;\r
  \r
  ab := ab shift i;\r
  PrintByte(ZoneVar, ab);    (* 18 *)\r
  IF ab <> #H18 THEN GOTO ExitError;\r
  \r
  \r
  \r
  \r
  bb:= (ab AND ( bb or ( ab xor ( not bb and ( ab or bb) xor ab))));\r
  PrintByte(ZoneVar, bb);  (* 18   *)\r
  IF bb <> #H18 THEN GOTO ExitError;\r
  bb := not ab;\r
  PrintByte(ZoneVar, bb);  (* E7 *)\r
  IF bb <> #HE7 THEN GOTO ExitError;\r
  bb := ( ab xor bb) xor ((ab and bb) or ((ab xor bb) and (ab and (bb or ab))));\r
  PrintByte(ZoneVar, bb);   (* E7 *)\r
  IF bb <> #HE7 THEN GOTO ExitError;\r
  \r
  \r
  bb:=  bb + (( bb - #h02) + (( ab div #H04) * bb) mod ab +( #h04 +\r
   ( ( ab*bb) DIV (bb div ab)) +#H03) );\r
  PrintByte(ZoneVar, bb);   (* EF *)\r
  IF bb <> #HEF THEN GOTO ExitError;\r
  bb := bb * ab MOD ( ab) ;\r
  PrintByte(ZoneVar, bb);   (* 8 *)\r
  IF bb <> #H8 THEN GOTO ExitError;\r
  bb := (#Hc7 div bb) * bb + (#Hc7 mod bb);\r
  PrintByte(ZoneVar, bb);   (* C7 *)\r
  IF bb <> #HC7 THEN GOTO ExitError;\r
  bb := (ab div (#H20 + bb)) xor (bb and (#He7 * (bb+ #H3)));\r
  PrintByte(ZoneVar, bb);   (* 46 *)\r
  IF bb <> #H46 THEN GOTO ExitError;\r
  \r
\r
\r
\r
\r
  (************************* TEST1L ***************************)\r
  (* simple char expressions *)\r
  WriteName(ZoneVar,"Test1L");\r
  achar:= 'b';\r
  \r
  cchar:=  'B';\r
  b := achar < cchar;\r
  PrintBoolean(ZoneVar, b);  (* false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := achar <= cchar;\r
  PrintBoolean(ZoneVar, b);  (*false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := achar > cchar;\r
  PrintBoolean(ZoneVar, b);  (*true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  b := achar >= cchar;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
  b := achar = cchar;\r
  PrintBoolean(ZoneVar, b);  (* false *)\r
  IF b <> false THEN GOTO ExitError;\r
\r
  b := achar <> cchar;\r
  PrintBoolean(ZoneVar, b);  (* true *)\r
  IF b <> true THEN GOTO ExitError;\r
\r
\r
\r
\r
  (********************* TEST1M ************************)  \r
  (* simple byte and word expressions *)\r
  WriteName(ZoneVar,"Test1M");\r
  a1:= #H07;\r
  \r
  b1:=  #D030;\r
  PrintWord(ZoneVar, b1);   (* 1E *)\r
  IF b1 <> #H01E THEN GOTO ExitError;\r
\r
  b1 := a1 + b1;\r
  PrintWord(ZoneVar, b1);    (* 25 *)\r
  IF b1 <> #H025 THEN GOTO ExitError;\r
\r
  b1 :=  a1 - b1;\r
  PrintWord(ZoneVar, b1);     (* FFE2     *)\r
  IF b1 <> #HFFE2 THEN GOTO ExitError;\r
\r
  b1 := a1 * b1;\r
  PrintWord(ZoneVar, b1);    (* FF2E *)\r
  IF b1 <> #HFF2E THEN GOTO ExitError;\r
\r
  b1 := a1 div b1;\r
  PrintWord(ZoneVar, b1);    (* 0 *)\r
  IF b1 <> #H000 THEN GOTO ExitError;\r
\r
  b1 := b1 mod a1;\r
  PrintWord(ZoneVar, b1);    (* 0 *)\r
  IF b1 <> #H000 THEN GOTO ExitError;\r
\r
  PrintWord(ZoneVar, (b1 - a1));   (* FFF9 *)\r
  PrintWord(ZoneVar,  (a1 div (b1 + #H0001)));   (* 7 *)\r
  PrintWord(ZoneVar,  (b1 * a1));   (* 0 *)\r
  \r
  \r
  a1 := #h0E;\r
  \r
  b1:= not ( b1 + a1);\r
  PrintWord(ZoneVar, b1);   (* FFF1    *)\r
  IF b1 <> #HFFF1 THEN GOTO ExitError;\r
\r
  b1 := (a1 and b1) + #h03;\r
  PrintWord(ZoneVar, b1);    (* 3 *)\r
  IF b1 <> #H003 THEN GOTO ExitError;\r
\r
  b1 := b1 or a1;\r
  PrintWord(ZoneVar, b1);     (* F *)\r
  IF b1 <> #H00F THEN GOTO ExitError;\r
\r
  b1 := a1 Xor b1;\r
  PrintWord(ZoneVar, b1);    (* 1    *)\r
  IF b1 <> #H001 THEN GOTO ExitError;\r
\r
  PrintWord(ZoneVar, not (b1 or a1));   (* FFF0 *)\r
  PrintWord(ZoneVar, not (a1 and b1));   (* FFFF *)\r
  PrintWord(ZoneVar, not (b1 xor a1));   (* FFF0 *)\r
  \r
  i := -2;\r
  \r
  b1 := #H00F;\r
  b1 :=  b1 shift 2;\r
  PrintWord(ZoneVar, b1);      (* 3C   *)\r
  IF b1 <> #H03C THEN GOTO ExitError;\r
\r
  b1 := #h0FF;\r
  b1 := b1 shift 16;\r
  PrintWord(ZoneVar, b1);     (* 0*)\r
  IF b1 <> #H000 THEN GOTO ExitError;\r
\r
  b1 := #H000F;\r
  b1 := b1 shift i;\r
  PrintWord(ZoneVar, b1);    (* 3 *)\r
  IF b1 <> #H003 THEN GOTO ExitError;\r
\r
  \r
\r
\r
  \r
  b1:= (a1 AND ( b1 or ( a1 xor ( not b1 and ( a1 or b1) xor a1))));\r
  PrintWord(ZoneVar, b1);  (* E    *)\r
  IF b1 <> #H00E THEN GOTO ExitError;\r
\r
  b1 := not ( b1 + a1);\r
  PrintWord(ZoneVar, b1);  (* FFE3 *)\r
  IF b1 <> #HFFE3 THEN GOTO ExitError;\r
\r
  b1 := ( a1 xor b1) xor ((a1 and b1) or ((a1 xor b1) and (a1 and (b1 or a1))));\r
  PrintWord(ZoneVar, b1);   (* FFE3 *)\r
  IF b1 <> #HFFE3 THEN GOTO ExitError;\r
\r
  \r
  \r
  b1:=  b1 + (( b1 - #h02) + (( a1 div #H04) * b1) mod a1 +( #h04 +\r
   ( ( a1*b1) DIV (b1 div a1)) +#H03) );\r
  PrintWord(ZoneVar, b1);   (* FFE5 *)\r
  IF b1 <> #HFFE5 THEN GOTO ExitError;\r
\r
  b1 := b1 * a1 MOD ( a1) ;\r
  PrintWord(ZoneVar, b1);   (* 2 *)\r
  IF b1 <> #H002 THEN GOTO ExitError;\r
\r
  b1 := (#Hc7 div b1) * b1 + (#Hc7 mod b1);\r
  PrintWord(ZoneVar, b1);   (* C7 *)\r
  IF b1 <> #H00C7 THEN GOTO ExitError;\r
\r
  b1 := (a1 div (#H20 + b1)) xor (b1 and (#He7 * (b1+ #H3)));\r
  PrintWord(ZoneVar, b1);   (* 46 *)\r
  IF b1 <> #H046 THEN GOTO ExitError;\r
\r
  \r
(**************************************************************)\r
\r
(**          TEST OF VERSION 2                   **************)\r
\r
(***************************************************************)\r
\r
\r
\r
\r
  \r
\r
\r
  (* *********************** TEST2 ********************************)\r
  (* if then else *)\r
  WriteName(ZoneVar,"Test2");\r
  a:= 2;\r
  c:= a + ni;\r
  b:= c > a;\r
  if b then c:= c-a else c:= 0;\r
  PrintInteger(ZoneVar,  c );  (* 9 *)\r
  IF c <> 9 THEN GOTO ExitError;\r
\r
\r
\r
\r
\r
  (**************************** TEST2D ****************************)\r
  (*   for step  *)\r
  WriteName(ZoneVar,"Test2D");\r
  d := 0;\r
  for ii := 1 to 10 do\r
  d := d+1;\r
  PrintInteger(ZoneVar, d);  (* 10 *)\r
  IF d <> 10 THEN GOTO ExitError;\r
\r
\r
\r
\r
  (************************* TEST2DA *********************************)\r
  (*  for and exitloop and continueloop and exit *)\r
  WriteName(ZoneVar,"Test2DA");\r
  a:= 0; d:= 100;c := 1000;\r
  for i := -1 to 300 DO\r
    begin\r
      a:= a+1;\r
      if a = d then\r
      For i := 1 downto -23 do\r
       begin\r
         repeat\r
           d := d - 1;\r
           for jj := 1 to - 1 do exit;\r
           for i := 5 downto 1 do c := c + 1;\r
         until true;\r
       end;\r
  \r
      if a=1 then Continueloop;\r
      if d = a then exit;\r
  \r
    end;\r
  PrintInteger(ZoneVar, a); (* 302 *)\r
  IF a <> 302 THEN Goto ExitError;\r
  PrintInteger(ZoneVar, d) ; (* 75 *)\r
  IF d <> 75 THEN GOTO ExitError;\r
  PrintInteger(ZoneVar, c); (* 1125 *)\r
  IF c <> 1125 THEN GOTO ExitError;\r
  \r
\r
\r
\r
\r
\r
  (******************************* TEST2F ********************************)\r
  (* var declaration: subrange *)\r
  WriteName(ZoneVar,"Test2F");\r
  dsub := 2;\r
  PrintInteger(ZoneVar,  dsub );  (* 2 *)\r
  IF dsub <> 2 THEN GOTO ExitError;\r
  \r
  \r
  \r
\r
\r
  (***************************** TEST2FA ***********************************)\r
  (* static subrange type declare  *)\r
  WriteName(ZoneVar,"Test2FA");\r
  dsubtype := 2;\r
  PrintInteger(ZoneVar,  dsubtype ); (* 2 *)\r
  IF dsubtype <> 2 THEN GOTO ExitError;\r
  \r
\r
\r
\r
  (****************************** TEST2FB ********************************)  \r
  (* simple subrange expressions *)\r
  WriteName(ZoneVar,"Test2FB");\r
  a1sub:= 7;\r
  PrintInteger(ZoneVar, a1sub);  (* 7 *)\r
  IF a1sub <> 7 THEN GOTO ExitError;\r
  bsub:= - 30;\r
  PrintInteger(ZoneVar, bsub);   (* -30 *)\r
  IF bsub <> -30 THEN GOTO ExitError;\r
  bsub:= - bsub;\r
  PrintInteger(ZoneVar, bsub);   (* 30 *)\r
  IF bsub <> 30 THEN GOTO ExitError;\r
  bsub := a1sub + bsub;\r
  PrintInteger(ZoneVar, bsub);    (* 37 *)\r
  IF bsub <> 37 THEN GOTO ExitError;\r
  a1sub :=  a1sub - bsub;\r
  PrintInteger(ZoneVar, a1sub);     (* -30 *)\r
  IF a1sub <> -30 THEN GOTO ExitError;\r
  a1sub := a1sub * bsub;\r
  PrintInteger(ZoneVar, a1sub);    (* -1110 *)\r
  IF a1sub <> -1110 THEN GOTO ExitError;\r
  a1sub := a1sub div bsub;\r
  PrintInteger(ZoneVar, a1sub);    (* -30 *)\r
  IF a1sub <> -30 THEN GOTO ExitError;\r
  a1sub := bsub mod a1sub;\r
  PrintInteger(ZoneVar, a1sub);    (* 7 *)\r
  IF a1sub <> 7 THEN GOTO ExitError;\r
  PrintInteger(ZoneVar, - (bsub - a1sub));   (* -30 *)\r
  PrintInteger(ZoneVar, - (a1sub div bsub));   (* 0 *)\r
  PrintInteger(ZoneVar, - (bsub * a1sub));   (* -259 *)\r
\r
\r
\r
\r
\r
\r
\r
  (******************************* TEST2FC **************************)\r
  (* simple Subrange expressions *)\r
  WriteName(ZoneVar,"Test2FC");\r
  asub:= 7;\r
  PrintInteger(ZoneVar, asub);  (* 7 *)\r
  IF asub <> 7 THEN GOTO ExitError;\r
  c:= - 30;\r
  PrintInteger(ZoneVar, c);   (* -30 *)\r
  IF c <> -30 THEN GOTO ExitError;\r
  c:= - c + (( c - 2) + (( asub div 4) * c) mod asub \r
                                +( 4 + ( ( asub*c) DIV (c div asub)) + 3) );\r
  PrintInteger(ZoneVar, c);   (* 55 *)\r
  IF c <> 55 THEN GOTO ExitError;\r
  c := c * asub MOD (- asub) + 4;\r
  PrintInteger(ZoneVar, c);   (* 4 *)\r
  IF c <> 4 THEN GOTO ExitError;\r
  asub := (30079 div c) * c + (30079 mod c) - 30072;\r
  PrintInteger(ZoneVar, asub);   (* 7 *)\r
  IF asub <> 7 THEN GOTO ExitError;\r
\r
\r
\r
\r
  (*********************** TEST2FD ********************************)\r
  (* simple subrange expressions *)\r
  WriteName(ZoneVar,"Test2FD");\r
  a2sub:= 7;\r
  PrintInteger(ZoneVar, a2sub);  (* 7 *)\r
  IF a2sub <> 7 THEN GOTO ExitError;\r
  b1sub:= - 30;\r
  PrintInteger(ZoneVar, b1sub);   (* -30 *)\r
  IF b1sub <> -30 THEN GOTO ExitError;\r
  b1sub := a2sub + (( a2sub DIV b1sub) + (( a2sub MOD b1sub) DIV\r
        (( a2sub + 10) + ((23 + a2sub) * (( a2sub MOD b1sub) MOD\r
        (( a2sub - 300) * ((b1sub + a2sub) - \r
        ((b1sub  - 230) mod ( a2sub + b1sub) ))))))));\r
  PrintInteger(ZoneVar, b1sub); (* 7 *)\r
  IF b1sub <> 7 THEN GOTO ExitError;\r
  \r
\r
\r
\r
\r
   (**************************** TEST2FE **********************)\r
\r
  (* simple integer and char Subrange expressions *)\r
  \r
  WriteName(ZoneVar,"Test2FE");\r
  aaa:= 7;\r
  PrintInteger(ZoneVar, aaa);  (* 7 *)\r
  IF aaa <> 7 THEN GOTO ExitError;\r
  chsubrange := 'a';\r
  WriteChar(ZoneVar, chsubrange);   (* H61 *)\r
  IF chsubrange <> 'a' THEN GOTO ExitError;\r
  ch := 'b';\r
  WriteChar(ZoneVar, ch);   (* H62 *)\r
  IF Ch <> 'b' THEN GOTO ExitError;\r
  IF chsubrange <= Ch THEN chsubrange := ch\r
                      ELSE chsubrange := 'c';\r
  WriteChar(ZoneVar, chsubrange);   (* H62 *)\r
  IF Chsubrange <> 'b' THEN GOTO ExitError;\r
\r
\r
\r
  \r
   (***************************** TEST2G ***********************)\r
  (*  while *)\r
  WriteName(ZoneVar,"Test2G");\r
  a:= 0; c:= 100;\r
  while a < 10 do\r
  begin\r
  a:= a+1;\r
  c:= c + a*3;\r
  end;\r
  PrintInteger(ZoneVar, a); (* 10 *)\r
  IF a <> 10 THEN  GOTO ExitError;\r
\r
\r
\r
\r
\r
\r
  (*************************** TEST2GA *********************************)\r
  (*  while and exitloop and continueloop*)\r
  WriteName(ZoneVar,"Test2GA");\r
  a:= 0; c:= 8;\r
  while a < 10 do\r
  begin\r
  a:= a+1;\r
  \r
  While c = a do\r
       begin\r
         loop\r
           if c < a then exit;\r
           c := c - 1;\r
           if c = 10 then exit;\r
           if c <= a then exitloop;\r
        endloop;\r
      end;\r
  if a=1 then Continueloop;\r
  if c = a then exit;\r
  end;\r
  \r
  PrintInteger(ZoneVar, c); (* 7 *)\r
  IF c <> 7 THEN GOTO ExitError;\r
  PrintInteger(ZoneVar, a); (* 10 *)\r
  IF a <> 10 THEN GOTO ExitError;\r
  \r
\r
  (************************* TEST2H ***************************)\r
  (* repeat *)\r
  WriteName(ZoneVar,"Test2H");\r
  a:= 0; c:= 100;\r
  repeat\r
  a:= a+1;\r
  c:= c + a*3;\r
  until a=10; \r
  PrintInteger(ZoneVar, a); (*10*)\r
  IF a <> 10 THEN GOTO ExitError;\r
\r
\r
\r
\r
\r
\r
\r
  (************************** TEST2HA *************************)\r
  (*  repeat and exitloop and continueloop*)\r
  WriteName(ZoneVar,"Test2HA");\r
  a:= 0; c:= 6;\r
  repeat\r
  begin\r
  a:= a+1;\r
  \r
  \r
  While c = a do\r
       begin\r
         repeat\r
           if c < a then exit;\r
           c := c - 1;\r
           if c = 10 then exit;\r
           if c <= a then exitloop;\r
        until a > 5;\r
      end;\r
  if a=1 then Continueloop;\r
  if c = a then exit;\r
  \r
  end;\r
  until a = 10;\r
  PrintInteger(ZoneVar, c);  (* 5 *)\r
  IF c <> 5 THEN GOTO ExitError;\r
  PrintInteger(ZoneVar, a);  (* 10 *)\r
  IF a <> 10 THEN GOTO ExitError;\r
  \r
  \r
\r
\r
\r
  (************************* TEST2I ******************************)\r
  (* loop *)\r
  WriteName(ZoneVar,"Test2I");\r
  a:= 0; c:= 100;\r
  loop\r
  a:= a+1;\r
  c:= c + a*3;\r
  if a=10 then exitloop;\r
  endloop;\r
  PrintInteger(ZoneVar, a);  (* 10 *)\r
  IF a <> 10 THEN GOTO ExitError;\r
\r
\r
\r
\r
\r
  (****************************  TEST2IA *****************************)\r
  (* loop and exitloop and continueloop *)\r
  WriteName(ZoneVar,"Test2IA");\r
  a:= 0; c:= 0;\r
  loop\r
  if a=10 then exitloop;\r
  c := c+1;\r
  if c=1 then Continueloop;\r
  a := a+ 1;\r
  endloop;\r
  PrintInteger(ZoneVar, c); (* 11 *)\r
  IF c <> 11 THEN GOTO ExitError;\r
  PrintInteger(ZoneVar, a); (* 10 *)\r
  IF a <> 10 THEN GOTO ExitError;\r
\r
\r
\r
  (************************** TEST2IB ************************)\r
  (* loop and exitloop and continueloop and exit *)\r
  WriteName(ZoneVar,"Test2IB");\r
  a:= 0; c:= 5;\r
  loop\r
  if a=10 then exitloop;\r
  a:= a+1;\r
  If c = a then\r
       begin\r
         loop\r
           if c < a then exit;\r
           c := c - 1;\r
           if c = 10 then exit;\r
           if c < a then exitloop;\r
        endloop;\r
      end;\r
  if a=1 then Continueloop;\r
  if c = a then exit;\r
  endloop;\r
  \r
  PrintInteger(ZoneVar, c);(* 4 *)\r
  IF c <> 4 THEN GOTO ExitError;\r
\r
  PrintInteger(ZoneVar, a);  (* 10 *)\r
  IF a <> 10 THEN GOTO ExitError;\r
\r
\r
\r
\r
  (****************************** TEST2J **************************)\r
  (* loop, goto label *)\r
  WriteName(ZoneVar,"Test2J");\r
  a:= 0; c:= 100;\r
  loop\r
  \r
  a:= a+1;\r
  c:= c + a*3;\r
  if a=10 then goto printres;\r
  endloop;\r
  printres:\r
  PrintInteger(ZoneVar, a);  (* 10 *)\r
  IF a <> 10 THEN GOTO ExitError;\r
\r
\r
\r
\r
\r
\r
\r
\r
  (***************************** TEST2L **************************)\r
  (* if then else *)\r
  WriteName(ZoneVar,"Test2L");\r
  a:= 2;\r
  c:= a + ni;\r
  b:= c > a;\r
  if b then c:= c-a else c:= 0;\r
  PrintInteger(ZoneVar, c); (* 9 *)\r
  IF c <> 9 THEN GOTO ExitError;\r
  if c < a then c := a - 1;\r
  PrintInteger(ZoneVar, c); (* 9 *)\r
  IF c <> 9 THEN GOTO ExitError;\r
  if not b then c := 100 else c := c + a;\r
  PrintInteger(ZoneVar, c); (* 11 *)\r
  IF c <> 11 THEN GOTO ExitError;\r
  if b then c := c + 10;\r
  PrintInteger(ZoneVar, c); (* 21 *)\r
  IF c <> 21 THEN GOTO ExitError;\r
  if a = 2 THEN\r
    begin\r
     if b then\r
       begin\r
         if a>c THEN\r
           begin\r
             c := c * 2;\r
           end\r
         ELSE\r
           c := 25 - c;\r
       END;\r
  \r
  \r
   end;\r
  PrintInteger(ZoneVar, c); (* 4 *)\r
  IF c <> 4 THEN GOTO ExitError;\r
  \r
  \r
  \r
\r
\r
  (******************************* TEST2M *************************)\r
  (* exchange *)\r
  WriteName(ZoneVar,"Test2M");\r
  int1 := 5;\r
  int2 := 7;\r
  int1 :=: int2;\r
  PrintInteger(ZoneVar, int1);  (* 7 *)\r
  IF int1 <> 7 THEN GOTO ExitError;\r
  PrintInteger(ZoneVar, int2);  (* 5 *)\r
  IF int2 <> 5 THEN GOTO ExitError;\r
  bool1 := true;\r
  bool2 := false;\r
  bool1 :=: bool2;\r
  PrintBoolean(ZoneVar, bool1);  (* 0 *)\r
  IF Bool1 <> false THEN GOTO ExitError;\r
  \r
  PrintBoolean(ZoneVar, bool2);    (* 1 *)\r
  IF bool2 <> true THEN GOTO ExitError;\r
  word2 := #H211;\r
  word1 := #H003;\r
  word2 :=: word1;\r
  PrintWord(ZoneVar, word1);  (* H211 *)\r
  IF word1 <> #H211 THEN GOTO ExitError;\r
  PrintWord(ZoneVar, word2);   (* H3 *)\r
  IF Word2 <> #H003 THEN  GOTO ExitError;\r
  byte1 := #H1;\r
  byte2 := #H2;\r
  \r
  byte1 :=: byte2;\r
  PrintByte(ZoneVar, byte1); (* H2 *)\r
  IF byte1 <> #H2 THEN GOTO ExitError;\r
\r
  PrintByte(ZoneVar, byte2);  (* H1 *)\r
  IF byte2 <> #H1 THEN GOTO ExitError;\r
  achar := 'A';\r
  bchar := 'B';\r
  achar :=: bchar;\r
  if achar = 'B' Then PrintBoolean(ZoneVar, true);  (* 1 *)\r
  IF  achar <> 'B' THEN GOTO EXitError;\r
\r
  if bchar = 'A' Then PrintBoolean(ZoneVar, false); (* 0 *)\r
  IF bchar <> 'A' THEN GOTO ExitError;\r
  \r
\r
\r
  (************************ TEST2N **********************************)\r
  (*  statements with complicated boolean expression *)\r
  WriteName(ZoneVar,"Test2N");\r
  a := 30;\r
  d := - 90;\r
  found := true;\r
  \r
  if (a < d) then c := 10\r
             else c :=1000;\r
  PrintInteger(ZoneVar, c); (* 1000 *)\r
  IF c <> 1000 THEN GOTO ExitError;\r
\r
  \r
  \r
  if NOT (a < d) then c := 10\r
                 else c :=1000;\r
  PrintInteger(ZoneVar, c); (* 10 *)\r
  IF c <> 10 THEN GOTO ExitError;\r
  \r
  \r
  if ((a < d) and found) then c := 10\r
                         else c :=1000;\r
  PrintInteger(ZoneVar, c); (* 1000 *)\r
  IF c <> 1000 THEN GOTO ExitError;\r
  \r
  if( (not (a < d)) and found) then c := 10\r
                               else c :=1000;\r
  PrintInteger(ZoneVar, c); (* 10 *)\r
  IF c <> 10 THEN GOTO ExitError;\r
  \r
  if ((a < d) xor found) then c := 100\r
                         else c :=1000;\r
  PrintInteger(ZoneVar, c); (* 100 *)\r
  IF c <> 100 THEN GOTO ExitError;\r
  \r
  if not ((a < d) xor found) then c := 100\r
                             else c :=1000;\r
  PrintInteger(ZoneVar, c); (* 1000 *)\r
  IF c <> 1000 THEN GOTO ExitError;\r
  \r
  \r
  a:= 0; d:= 100; found := true;\r
  while ((a < 10) and found) do\r
    begin\r
      a:= a+1;\r
      if a = 5 then found := false;\r
      d:= d + a*3;\r
    end;\r
  PrintInteger(ZoneVar, a); (* 5 *)\r
  IF a <> 5 THEN GOTO ExitError;\r
  \r
  a:= 0; d:= 100; found := false;\r
  while ((a < 10) xor found) do\r
    begin\r
      a:= a+1;\r
      if a = 4 then found := true;\r
    end;\r
  PrintInteger(ZoneVar, a); (* 4 *)\r
  IF a <> 4 THEN GOTO ExitError;\r
  \r
  a:= 0; d:= 100; found := false;\r
  while ( ((a < 10) xor found) and (a = 0 ))do\r
    begin\r
      a:= a+1;\r
      if a = 4 then found := true;\r
    end;\r
  PrintInteger(ZoneVar, a); (* 1 *)\r
  IF a <> 1 THEN GOTO ExitError;\r
  \r
  \r
  \r
  \r
\r
(**************************************************************)\r
\r
(**          TEST OF VERSION 3                   **************)\r
\r
(***************************************************************)\r
\r
\r
\r
\r
  \r
  (**************************** TEST3A ******************************)\r
  (* var declare and initialize *)\r
  WriteName(ZoneVar,"Test3A");\r
  PrintInteger(ZoneVar, ainit); (* 56 *)\r
  IF aInit <> 56 THEN GOTO ExitError;\r
  PrintInteger(ZoneVar, cinit);  (* 56 *)\r
  IF cInit <> 56 THEN GOTO ExitError;\r
  PrintBoolean(ZoneVar, binit);  (* false *)\r
  IF bInit <> false THEN GOTO ExitError;\r
  PrintByte(ZoneVar, xinit);   (* ED *)\r
  IF xInit <> #HED THEN GOTO ExitError;\r
  PrintWord(ZoneVar, yinit);  (* 003 *)\r
  IF yInit <> #H003 THEN GOTO ExitError;\r
  \r
\r
  TEST3BA;\r
  IF Test3Ok = false THen GOTO ExitError;\r
\r
\r
  TEST3BB;\r
  IF Test3Ok = false THen GOTO ExitError;\r
\r
\r
  TEST3BC;\r
  IF Test3Ok = false THen GOTO ExitError;\r
 \r
  TEST3BD;\r
  IF Test3OK = false THEN GOTO ExitError;\r
 \r
  TEST3BE;\r
  IF Test3OK = false THEN GOTO ExitError;\r
\r
\r
  TEST3BF;\r
  IF Test3Ok = false THen GOTO ExitError;\r
\r
\r
  TEST3BH;\r
  IF Test3OK = false THEN GOTO ExitError;\r
\r
\r
  TEST3CA;\r
  IF Test3Ok = false THen GOTO ExitError;\r
\r
\r
  TEST3CB;\r
  IF Test3Ok = false THen GOTO ExitError;\r
\r
\r
  TEST3CC;\r
  IF Test3Ok = false THen GOTO ExitError;\r
\r
\r
  TEST3CD;\r
  IF Test3Ok = false THen GOTO ExitError;\r
\r
 \r
  TEST3D;\r
  IF Test3OK = false THEN GOTO ExitError;\r
\r
 \r
  TEST3F;\r
  IF Test3OK = false THEN GOTO ExitError;\r
 \r
  TEST3FA;\r
  IF Test3OK = false THEN GOTO ExitError;\r
 \r
\r
\r
  TEST3GA;\r
  IF Test3OK = false THEN GOTO ExitError;\r
 \r
\r
  (***************************** TEST VERSION 4 *************************)\r
\r
  LinkOk := Link("TESTVER4",testver4);\r
  PrintInteger(ZoneVar,ord(LinkOK));\r
  IF LinkOK <> Link_OK THEN GOTO EXitError;\r
  createok := Create("test4",TestVer4(TestVer4End,Test4OK),Process4,\r
       2500,200);\r
  PrintInteger(ZoneVar,ord(CreateOK));\r
  IF CreateOK <> Create_OK THEN GOTO EXitError;\r
  \r
\r
\r
\r
  (* Test if Version 4 is ok *)\r
  testverok := false;\r
  while testverok = false do\r
    begin\r
      Region TestVer4End do testverok := testver4End;\r
      delay(2);\r
    END;\r
\r
   Region test4OK do TestVerOk := Test4OK;\r
   IF Not TestVerOK THEN GOTO EXITError;\r
   \r
   remove(process4);\r
   unlinkok := unlink(TestVer4);\r
   IF Unlinkok <> Unlink_ok THEN GOTO EXITError;\r
\r
\r
\r
\r
  (***************************** TEST VERSION 5 *************************)\r
  LinkOk := Link("TESTVER5",testver5);\r
  PrintInteger(ZoneVar,ord(LinkOK));\r
  IF LinkOK <> Link_OK THEN GOTO EXitError;\r
  createok := Create("test5",TestVer5(TestVer5End,Test5OK),Process5,0,200);\r
  PrintInteger(ZoneVar,ord(CreateOK));\r
  IF CreateOK <> Create_OK THEN GOTO EXitError;\r
  \r
\r
\r
\r
  (* Test if Version 5 is ok *)\r
  testver5ok := false;\r
  while testver5ok = false do\r
    begin\r
      Region TestVer5End do testver5ok := testver5End;\r
      delay(2);\r
    END;\r
\r
   Region test5OK do TestVer5OK := Test5OK;\r
   IF Not TestVer5OK THEN GOTO EXITError;\r
   \r
   remove(process5);\r
   unlinkok := unlink(TestVer5);\r
   IF Unlinkok <> Unlink_ok THEN GOTO EXITError;\r
\r
\r
\r
  (***************************** TEST VERSION 6 *************************)\r
  TestVersion6;\r
\r
\r
  (* Test famile subrange *)\r
  TestVerOK := false;\r
  Test6fam(TestVerOK,ZoneVar);\r
   \r
  IF testverOk = false THEN GOTO EXITError;\r
\r
\r
  (***************************** TEST VERSION 7 *************************)\r
\r
  LinkOk := Link("TESTVER7",testver7);\r
  PrintInteger(ZoneVar,ord(LinkOK));\r
  IF LinkOK <> Link_OK THEN GOTO EXitError;\r
  createok := Create("test7",TestVer7(TestVer7End,Test7OK),Process7,\r
    2500,130);\r
  PrintInteger(ZoneVar,ord(CreateOK));\r
  IF CreateOK <> Create_OK THEN GOTO EXitError;\r
  \r
\r
\r
\r
  (* Test if Version 7 is ok *)\r
  testverok := false;\r
  while testverok = false do\r
    begin\r
      Region TestVer7End do testverok := testver7End;\r
      delay(2);\r
    END;\r
\r
   Region test7OK do TestVerOk := Test7OK;\r
   IF Not TestVerOK THEN GOTO EXITError;\r
   \r
   remove(process7);\r
   unlinkok := unlink(TestVer7);\r
   IF Unlinkok <> Unlink_ok THEN GOTO EXITError;\r
\r
\r
\r
  (***************************** TEST VERSION 8 *************************)\r
  TestVersion8;\r
\r
  IF testverOk = false THEN GOTO EXITError;\r
\r
\r
  TestVerOK := false;\r
  Test8Fam(TestVerOK,ZoneVar);\r
   \r
  IF testverOk = false THEN GOTO EXITError;\r
\r
  TestVerOK := false;\r
  Test8JA(TestVerOK,ZoneVar);\r
   \r
  IF testverOk = false THEN GOTO EXITError;\r
\r
  TestVerOK := false;\r
  Test8H(TestVerOK,ZoneVar);\r
   \r
  IF testverOk = false THEN GOTO EXITError;\r
\r
\r
  (****************************** TEST VERSION 10 ******************)\r
  Test10A(testverOK,ZoneVar);\r
  IF TestverOK = false THEN GOTO ExitError;\r
\r
  (* test option segment *)\r
  WriteString(ZoneVar,"Test Segment");\r
  TestSegment;\r
    \r
\r
\r
  Goto EndTest;\r
\r
  ExitError:\r
\r
    (* TestNotOK  *)\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
  WriteChar(ZoneVar, ' ');  \r
  WriteChar(ZoneVar, '*');  \r
  WriteChar(ZoneVar, '*');  \r
  WriteChar(ZoneVar, '*');  \r
  WriteChar(ZoneVar, '*');  \r
  WriteChar(ZoneVar, '*');  \r
\r
\r
\r
  EXIT;\r
\r
\r
  EndTest:\r
    (* Test OK *)\r
  WriteChar(ZoneVar, ' ');  \r
  WriteChar(ZoneVar, 'O');  \r
  WriteChar(ZoneVar, 'K');  \r
  WriteChar(ZoneVar, ' ');  \r
  WriteChar(ZoneVar, '*');  \r
  WriteChar(ZoneVar, '*');  \r
  WriteChar(ZoneVar, '*');  \r
  WriteChar(ZoneVar, '*');  \r
  WriteChar(ZoneVar, '*');  \r
end.\r
 \r
\r
\r
\r
\r
\r
\r
\r
\r
 \r
«eof»