| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- MODULE Showcase15;
- // Session showcase: separate compilation across a DEFINITION /
- // IMPLEMENTATION pair (whose signatures are verified by the new
- // strict 235 check), string concatenation, and IOChan over files.
- //
- // It writes a small report to a file through a channel, closes it,
- // reopens it for reading, reads it back line by line, and prints a
- // summary on stdout. Expected ExitCode: 42.
- IMPORT Showcase15Lib, IOChan, TextIO, Strings;
- VAR ExitCode : INTEGER;
- VAR out, inp : IOChan.ChanId;
- VAR name, line : ARRAY [0 .. 63] OF CHAR;
- VAR p : Showcase15Lib.Point;
- VAR total : INTEGER;
- PROCEDURE Emit (cid : IOChan.ChanId; s : ARRAY OF CHAR; n : INTEGER);
- (* one "label + number" line on the channel *)
- VAR buf : ARRAY [0 .. 63] OF CHAR;
- BEGIN
- Strings.Assign(s, buf);
- Showcase15Lib.AppendInt(buf, n);
- IOChan.WriteString(cid, buf);
- IOChan.WriteLn(cid)
- END Emit;
- BEGIN
- ExitCode := 0;
- Strings.Assign("gen_ssa/_showcase15.txt", name);
- Showcase15Lib.InitPoint(p, 20, 22);
- total := Showcase15Lib.SumPoint(p);
- (* write the report through a file channel *)
- out := IOChan.OpenWrite(name);
- IF NOT IOChan.IsOpen(out) THEN ExitCode := 90 ELSE
- IOChan.WriteString(out, "total");
- IOChan.WriteLn(out);
- Emit(out, "point ", total);
- IOChan.Close(out)
- END;
- (* read it back through another channel, line by line *)
- inp := IOChan.OpenRead(name);
- IF NOT IOChan.IsOpen(inp) THEN ExitCode := 91 ELSE
- IOChan.ReadString(inp, line); (* "total" *)
- IF line = "total" THEN ExitCode := ExitCode + 1 ELSE ExitCode := 92 END;
- IOChan.ReadString(inp, line); (* "point 42" *)
- IF line = "point 42" THEN ExitCode := ExitCode + 2 ELSE ExitCode := 93 END;
- TextIO.WriteString("read back: ");
- TextIO.WriteString(line);
- TextIO.WriteLn;
- IOChan.Close(inp)
- END;
- IF ExitCode = 3 THEN ExitCode := total END; (* 42 on success *)
- TextIO.WriteString("showcase15 total=");
- TextIO.WriteInt(total);
- TextIO.WriteLn
- END Showcase15.
|