home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / xco212p.zip / SAMPLES / DHRY / dry2.mod < prev    next >
Text File  |  1994-07-22  |  5KB  |  190 lines

  1. IMPLEMENTATION MODULE dry2;
  2.  
  3. (* IMPORT Strings; *)
  4.  
  5. (* Func2:
  6.  *   For FST/Logitech/Stony Brook, string comparation is
  7.  *   IF Strings.CompareStr (Str1ParRef, Str2ParRef) > 0 THEN
  8.  * for all others,
  9.  * IF Strings.Compare (Str1ParRef, Str2ParRef) = Strings.greater THEN
  10.  *
  11.  * Therefore I wrote my own version
  12.  *)
  13.  
  14. PROCEDURE strcmp (VAR s1, s2: ARRAY OF CHAR): INTEGER;
  15. VAR i, m: CARDINAL;
  16. BEGIN
  17.   i:=0;
  18.   m := HIGH (s1); IF m>HIGH(s2) THEN m := HIGH(s2) END;
  19.   LOOP
  20.     IF (s1[i]#s2[i]) THEN
  21.       IF s1[i]>s2[i] THEN RETURN 1 ELSE RETURN -1 END;
  22.     END;
  23.     IF s1[i]=0C THEN RETURN 0 END;
  24.     INC (i);
  25.     IF i > m THEN
  26.       IF HIGH(s1)#HIGH(s2) THEN
  27.         IF HIGH(s1)>HIGH(s2) THEN
  28.           IF s1[i]#0C THEN RETURN 1 END;
  29.         ELSE
  30.           IF s2[i]#0C THEN RETURN -1 END;
  31.         END;
  32.       END;
  33.       RETURN 0;
  34.     END;
  35.   END;
  36. END strcmp;
  37.  
  38. PROCEDURE Proc6 (EnumValPar: Enumeration; VAR EnumRefPar: Enumeration);
  39.     (* executed once *)
  40.     (* EnumValPar == Ident3, EnumRefPar becomes Ident2 *)
  41. BEGIN
  42.   EnumRefPar := EnumValPar;
  43.   IF ~Func3 (EnumValPar) THEN
  44.     (* then, not executed *)
  45.     EnumRefPar := Ident4;
  46.   END;
  47.   CASE EnumValPar OF
  48.   | Ident1:
  49.       EnumRefPar := Ident1;
  50.   | Ident2:
  51.       IF IntGlob > 100 THEN
  52.         (* then *)
  53.         EnumRefPar := Ident1;
  54.       ELSE
  55.         EnumRefPar := Ident4;
  56.       END;
  57.   | Ident3:
  58.       (* executed *)
  59.       EnumRefPar := Ident2;
  60.   | Ident4: ;
  61.   | Ident5:
  62.       EnumRefPar := Ident3;
  63.   END;
  64. END Proc6;
  65.  
  66.  
  67. PROCEDURE Proc7 (Int1ParVal, Int2ParVal: INTEGER; VAR IntParRef: INTEGER);
  68.     (* executed three times                                *)
  69.     (* first call:      Int1ParVal == 2, Int2ParVal == 3,  *)
  70.     (*                  IntParRef becomes 7                *)
  71.     (* second call:     Int1ParVal == 10, Int2ParVal == 5, *)
  72.     (*                  IntParRef becomes 17               *)
  73.     (* third call:      Int1ParVal == 6, Int2ParVal == 10, *)
  74.     (*                  IntParRef becomes 18               *)
  75. VAR
  76.   IntLoc: INTEGER;
  77. BEGIN
  78.   IntLoc := Int1ParVal + 2;
  79.   IntParRef := Int2ParVal + IntLoc;
  80. END Proc7;
  81.  
  82.  
  83. PROCEDURE Proc8 (VAR Arr1ParRef: Arr1Dim;
  84.                  VAR Arr2ParRef: Arr2Dim;
  85.                      Int1ParVal, Int2ParVal: INTEGER);
  86.     (* executed once   *)
  87.     (* IntParVal1 == 3 *)
  88.     (* IntParVal2 == 7 *)
  89. VAR
  90.   IntIndex,
  91.   IntLoc: INTEGER;
  92. BEGIN
  93.   IntLoc := Int1ParVal + 5;
  94.   Arr1ParRef [IntLoc] := Int2ParVal;
  95.   Arr1ParRef [IntLoc+1] := Arr1ParRef [IntLoc];
  96.   Arr1ParRef [IntLoc+30] := IntLoc;
  97.   FOR IntIndex := IntLoc TO IntLoc+1 DO
  98.     Arr2ParRef [IntLoc] [IntIndex] := IntLoc;
  99.   END;
  100.   INC (Arr2ParRef [IntLoc] [IntLoc-1]);
  101.   Arr2ParRef [IntLoc+20] [IntLoc] := Arr1ParRef [IntLoc];
  102.   IntGlob := 5;
  103. END Proc8;
  104.  
  105.  
  106. PROCEDURE Func1 (Ch1ParVal, Ch2ParVal: CapitalLetter): Enumeration;
  107.     (* executed three times                                   *)
  108.     (* first call:      Ch1ParVal == 'H', Ch2ParVal == 'R'    *)
  109.     (* second call:     Ch1ParVal == 'A', Ch2ParVal == 'C'    *)
  110.     (* third call:      Ch1ParVal == 'B', Ch2ParVal == 'C'    *)
  111. VAR
  112.   Ch1Loc,
  113.   Ch2Loc: CapitalLetter;
  114. BEGIN
  115.   Ch1Loc := Ch1ParVal;
  116.   Ch2Loc := Ch1Loc;
  117.   IF Ch2Loc # Ch2ParVal THEN
  118.     (* then, executed *)
  119.     RETURN Ident1;
  120.   ELSE
  121.     (* not executed *)
  122.     Ch1Glob := Ch1Loc;
  123.     RETURN Ident2;
  124.   END;
  125. END Func1;
  126.  
  127.  
  128. PROCEDURE Func2 (VAR Str1ParRef, Str2ParRef: Str30): BOOLEAN;
  129.     (* executed once *)
  130.     (* Str1ParRef == "DHRYSTONE PROGRAM, 1'ST STRING" *)
  131.     (* Str2ParRef == "DHRYSTONE PROGRAM, 2'ND STRING" *)
  132. VAR
  133.   IntLoc: OneThirty;
  134.   ChLoc: CapitalLetter;
  135. BEGIN
  136.   IntLoc := 2;
  137.   WHILE IntLoc <= 2 DO
  138.     (* loop body executed once *)
  139.     IF Func1 (Str1ParRef[IntLoc], Str2ParRef[IntLoc+1]) = Ident1 THEN
  140.       (* then, executed *)
  141.       ChLoc := 'A';
  142.       INC (IntLoc);
  143.     END;
  144.   END;
  145.   IF (ChLoc >= 'W') AND (ChLoc < 'Z') THEN
  146.     (* then, not executed *)
  147.     IntLoc := 7;
  148.   END;
  149.   IF ChLoc = 'R' THEN
  150.     (* then, not executed *)
  151.     RETURN TRUE;
  152.   ELSE
  153.     (* executed *)
  154.  
  155.     (* it should be one of *)
  156.     (* IF Strings.CompareStr (Str1ParRef, Str2ParRef) > 0 THEN *)
  157.     (* IF Strings.Compare (Str1ParRef, Str2ParRef) = Strings.greater THEN *)
  158.  
  159.     IF strcmp (Str1ParRef, Str2ParRef) > 0 THEN
  160.       (* then, not executed *)
  161.       INC (IntLoc, 7);
  162.       IntGlob := IntLoc;
  163.       RETURN TRUE;
  164.     ELSE
  165.       (* executed *)
  166.       RETURN FALSE;
  167.     END;
  168.   END;
  169. END Func2;
  170.  
  171.  
  172. PROCEDURE Func3 (EnumParVal: Enumeration): BOOLEAN;
  173.     (* executed once        *)
  174.     (* EnumParVal == Ident3 *)
  175. VAR
  176.   EnumLoc: Enumeration;
  177. BEGIN
  178.   EnumLoc := EnumParVal;
  179.   IF EnumLoc = Ident3 THEN
  180.     (* then, executed *)
  181.     RETURN TRUE;
  182.   ELSE
  183.     (* not executed *)
  184.     RETURN FALSE;
  185.   END;
  186. END Func3;
  187.  
  188.  
  189. END dry2.
  190.