| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- MODULE Showcase14;
- // Session showcase: enumerations (literals in expressions / CASE /
- // CONST), string content equality, Unicode (UCHAR literals, the Utf8
- // codec, UTF-8 output), Conversions / RealIO, ProgramArgs and IOChan.
- // Prints two lines and exits 42.
- IMPORT SysIO, TextIO, Utf8, Conversions, RealIO, ProgramArgs, IOChan;
- VAR ExitCode : INTEGER;
- VAR n, m : INTEGER;
- VAR out : IOChan.ChanId;
- VAR s : ARRAY [0 .. 31] OF CHAR;
- VAR cp : UCHAR;
- VAR next : CARDINAL;
- VAR x : REAL;
- TYPE Color = (red, green, blue);
- CONST Favourite = blue;
- PROCEDURE Bump (points : INTEGER);
- BEGIN
- n := n + points
- END Bump;
- BEGIN
- n := 0;
- (* enumerations: CASE label, ordinal ordering, CONST *)
- CASE Favourite OF
- red: n := 100
- | green: n := 100
- | blue: Bump(1)
- END;
- IF red < green THEN Bump(2) END;
- (* string content equality *)
- IF "abc" = "abc" THEN Bump(4) END;
- IF "abc" # "abd" THEN Bump(8) END;
- (* Unicode: strict decode of a UTF-8 literal back to a UCHAR *)
- IF Utf8.Decode("é", 0, cp, next) AND (UORD(cp) = 233) THEN Bump(16) END;
- (* ProgramArgs: run with no arguments *)
- IF ProgramArgs.ArgCount() = 0 THEN Bump(5) END;
- (* Conversions: integer and real round-trips *)
- IF Conversions.IntVal("-56", m) AND (m = -56) THEN Bump(3) END;
- IF Conversions.RealVal("3.5", x) AND (x = 3.5) THEN Bump(3) END;
- (* IOChan demo goes to stderr (stdio buffering would otherwise
- reorder it against the unbuffered shim writes) *)
- out := IOChan.StdErrChan();
- IOChan.WriteString(out, "iochan: showcase14 evaluating");
- IOChan.WriteLn(out);
- (* stdout: summary line, then REAL + UTF-8 via TextIO *)
- SysIO.Write("showcase14 n=");
- Conversions.IntToStr(n, s);
- SysIO.Write(s);
- SysIO.WriteLn;
- RealIO.WriteReal(3.5);
- TextIO.WriteString(" ");
- TextIO.UWriteString(U"ok ✓");
- TextIO.WriteLn;
- ExitCode := n
- END Showcase14.
|