| 12345678910111213141516171819202122232425262728 |
- MODULE TSubrange;
- // Subranges keep their base type: ['A'..'Z'] is character and
- // [red..green] is that enumeration, so base-typed values assign to
- // and compare with them. MIN/MAX of a SET yields its base type, and
- // FOR accepts any ordinal control variable. Exit 42.
- TYPE Up = ['A'..'Z'];
- TYPE Colour = (red, blue, green);
- TYPE Warm = [red..green];
- TYPE CSet = SET OF Colour;
- VAR ExitCode : INTEGER;
- VAR u : Up;
- VAR c : Colour;
- VAR w : Warm;
- VAR s : CSet;
- VAR i : INTEGER;
- BEGIN
- u := 'H';
- c := blue;
- w := blue;
- i := 0;
- IF (u = 'H') AND (c = w) THEN i := i + 1 END;
- IF (c >= red) AND (c <= green) THEN i := i + 1 END;
- s := CSet{red..green};
- IF MIN(CSet) = red THEN i := i + 10 END;
- IF MAX(CSet) = green THEN i := i + 10 END;
- FOR c := red TO green DO i := i + 1 END;
- ExitCode := i + 17
- END TSubrange.
|