home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
modula2
/
compiler
/
taylmod2
/
dhry2.mod
< prev
next >
Wrap
Text File
|
1988-06-30
|
3KB
|
124 lines
(* $Title:'DHRY2.MOD - Dhrystone 1.0 Module 2' *) (* $Chip:86 *)
IMPLEMENTATION MODULE Dhrystone2;
FROM Dhrystone1 IMPORT ArrayDim1Int, ArrayDim2Int,
RecordPointer, RecordType,
Enumeration, String30;
FROM Dhrystone3 IMPORT Proc6, Proc7, Proc8, Func1, Func2;
FROM Storage IMPORT ALLOCATE;
VAR BoolGlob: BOOLEAN;
CharGlob1, CharGlob2: CHAR;
ArrayGlob1: ArrayDim1Int;
ArrayGlob2: ArrayDim2Int;
PointerGlob, PointerGlobNext: RecordPointer;
PROCEDURE Proc2 (VAR IntParInOut: CARDINAL);
VAR IntLoc: CARDINAL;
EnumLoc: Enumeration;
BEGIN
IntLoc := IntParInOut + 10;
LOOP
IF CharGlob1 = 'A' THEN
DEC (IntLoc);
IntParInOut := IntLoc - IntGlob;
EnumLoc := Ident1
END;
IF EnumLoc = Ident1 THEN EXIT END
END
END Proc2;
PROCEDURE Proc3 (VAR PointerParOut: RecordPointer);
BEGIN
IF PointerGlob # NIL THEN
PointerParOut := PointerGlob^.PointerComp
ELSE
IntGlob := 100
END;
Proc7 (10, IntGlob, PointerGlob^.IntComp)
END Proc3;
PROCEDURE Proc4;
VAR BoolLoc: BOOLEAN;
BEGIN
BoolLoc := CharGlob1 = 'A';
BoolLoc := BoolLoc OR BoolGlob;
CharGlob2 := 'B'
END Proc4;
PROCEDURE Proc5;
VAR BoolLoc: BOOLEAN;
BEGIN
CharGlob1 := 'A';
BoolGlob := FALSE
END Proc5;
PROCEDURE Proc1 (PointerParIn: RecordPointer);
VAR NextRecord: RecordType;
BEGIN
NextRecord := PointerGlob^;
PointerParIn^.IntComp := 5;
NextRecord.IntComp := PointerParIn^.IntComp;
NextRecord.PointerComp := PointerParIn^.PointerComp;
Proc3 (NextRecord.PointerComp);
IF NextRecord.Discr = Ident1 THEN
NextRecord.IntComp := 6;
Proc6 (PointerParIn^.EnumComp, NextRecord.EnumComp);
NextRecord.PointerComp := PointerGlob^.PointerComp;
Proc7 (NextRecord.IntComp, 10, NextRecord.IntComp)
ELSE
PointerParIn^ := NextRecord
END
END Proc1;
PROCEDURE Proc0 (iterations: CARDINAL);
VAR IntLoc1, IntLoc2, IntLoc3: CARDINAL;
CharLoc, CharIndex: CHAR;
EnumLoc: Enumeration;
StringLoc1, StringLoc2: String30;
iter: CARDINAL;
BEGIN
ALLOCATE (PointerGlobNext, SIZE (PointerGlobNext^));
ALLOCATE (PointerGlob, SIZE (PointerGlob^));
WITH PointerGlob^ DO
PointerComp := PointerGlobNext;
Discr := Ident1; EnumComp := Ident3; IntComp := 40;
StringComp := "Dhrystone Program, Some String"
END;
StringLoc1 := "Dhrystone Program, 1'st String";
iter := 0;
REPEAT
Proc5;
Proc4;
IntLoc1 := 2; IntLoc2 := 3;
StringLoc2 := "Dhrystone Program, 2'nd String";
EnumLoc := Ident2;
BoolGlob := NOT Func2 (StringLoc1, StringLoc2);
WHILE IntLoc1 < IntLoc2 DO
IntLoc3 := 5 * IntLoc1 - IntLoc2;
Proc7 (IntLoc1, IntLoc2, IntLoc3);
INC (IntLoc1)
END;
Proc8 (ArrayGlob1, ArrayGlob2, IntLoc1, IntLoc3);
Proc1 (PointerGlob);
FOR CharIndex := 'A' TO CharGlob2 DO
IF EnumLoc = Func1 (CharIndex, 'C') THEN Proc6 (Ident1, EnumLoc) END
END;
IntLoc3 := IntLoc2 * IntLoc1;
IntLoc2 := IntLoc3 DIV IntLoc1;
IntLoc2 := 7 * (IntLoc3 - IntLoc2) - IntLoc1;
Proc2 (IntLoc1);
INC (iter)
UNTIL iter >= iterations
END Proc0;
END Dhrystone2.