showcase14.mod 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. MODULE Showcase14;
  2. // Session showcase: enumerations (literals in expressions / CASE /
  3. // CONST), string content equality, Unicode (UCHAR literals, the Utf8
  4. // codec, UTF-8 output), Conversions / RealIO, ProgramArgs and IOChan.
  5. // Prints two lines and exits 42.
  6. IMPORT SysIO, TextIO, Utf8, Conversions, RealIO, ProgramArgs, IOChan;
  7. VAR ExitCode : INTEGER;
  8. VAR n, m : INTEGER;
  9. VAR out : IOChan.ChanId;
  10. VAR s : ARRAY [0 .. 31] OF CHAR;
  11. VAR cp : UCHAR;
  12. VAR next : CARDINAL;
  13. VAR x : REAL;
  14. TYPE Color = (red, green, blue);
  15. CONST Favourite = blue;
  16. PROCEDURE Bump (points : INTEGER);
  17. BEGIN
  18. n := n + points
  19. END Bump;
  20. BEGIN
  21. n := 0;
  22. (* enumerations: CASE label, ordinal ordering, CONST *)
  23. CASE Favourite OF
  24. red: n := 100
  25. | green: n := 100
  26. | blue: Bump(1)
  27. END;
  28. IF red < green THEN Bump(2) END;
  29. (* string content equality *)
  30. IF "abc" = "abc" THEN Bump(4) END;
  31. IF "abc" # "abd" THEN Bump(8) END;
  32. (* Unicode: strict decode of a UTF-8 literal back to a UCHAR *)
  33. IF Utf8.Decode("é", 0, cp, next) AND (UORD(cp) = 233) THEN Bump(16) END;
  34. (* ProgramArgs: run with no arguments *)
  35. IF ProgramArgs.ArgCount() = 0 THEN Bump(5) END;
  36. (* Conversions: integer and real round-trips *)
  37. IF Conversions.IntVal("-56", m) AND (m = -56) THEN Bump(3) END;
  38. IF Conversions.RealVal("3.5", x) AND (x = 3.5) THEN Bump(3) END;
  39. (* IOChan demo goes to stderr (stdio buffering would otherwise
  40. reorder it against the unbuffered shim writes) *)
  41. out := IOChan.StdErrChan();
  42. IOChan.WriteString(out, "iochan: showcase14 evaluating");
  43. IOChan.WriteLn(out);
  44. (* stdout: summary line, then REAL + UTF-8 via TextIO *)
  45. SysIO.Write("showcase14 n=");
  46. Conversions.IntToStr(n, s);
  47. SysIO.Write(s);
  48. SysIO.WriteLn;
  49. RealIO.WriteReal(3.5);
  50. TextIO.WriteString(" ");
  51. TextIO.UWriteString(U"ok ✓");
  52. TextIO.WriteLn;
  53. ExitCode := n
  54. END Showcase14.