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.