t_subrange.mod 835 B

12345678910111213141516171819202122232425262728
  1. MODULE TSubrange;
  2. // Subranges keep their base type: ['A'..'Z'] is character and
  3. // [red..green] is that enumeration, so base-typed values assign to
  4. // and compare with them. MIN/MAX of a SET yields its base type, and
  5. // FOR accepts any ordinal control variable. Exit 42.
  6. TYPE Up = ['A'..'Z'];
  7. TYPE Colour = (red, blue, green);
  8. TYPE Warm = [red..green];
  9. TYPE CSet = SET OF Colour;
  10. VAR ExitCode : INTEGER;
  11. VAR u : Up;
  12. VAR c : Colour;
  13. VAR w : Warm;
  14. VAR s : CSet;
  15. VAR i : INTEGER;
  16. BEGIN
  17. u := 'H';
  18. c := blue;
  19. w := blue;
  20. i := 0;
  21. IF (u = 'H') AND (c = w) THEN i := i + 1 END;
  22. IF (c >= red) AND (c <= green) THEN i := i + 1 END;
  23. s := CSet{red..green};
  24. IF MIN(CSet) = red THEN i := i + 10 END;
  25. IF MAX(CSet) = green THEN i := i + 10 END;
  26. FOR c := red TO green DO i := i + 1 END;
  27. ExitCode := i + 17
  28. END TSubrange.