iochanseek_prog.mod 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. MODULE IOChanSeekProg;
  2. (* IOChan positioning: Position / Seek / Rewind on a file channel.
  3. Write 6 bytes, reopen, seek and read back. Exit 15. *)
  4. IMPORT IOChan, Strings;
  5. VAR ExitCode : INTEGER;
  6. VAR f : IOChan.ChanId;
  7. VAR name, line : ARRAY [0 .. 63] OF CHAR;
  8. BEGIN
  9. Strings.Assign("gen_ssa/_iochanseek.txt", name);
  10. f := IOChan.OpenWrite(name);
  11. IOChan.WriteString(f, "abc");
  12. IOChan.WriteString(f, "def");
  13. IF IOChan.Position(f) = 6 THEN
  14. ExitCode := ExitCode + 1
  15. ELSE ExitCode := 100 END;
  16. IOChan.Close(f);
  17. f := IOChan.OpenRead(name);
  18. IF IOChan.ReadChar(f) = "a" THEN ExitCode := ExitCode + 0 END;
  19. IF IOChan.ReadChar(f) = "b" THEN ExitCode := ExitCode + 0 END;
  20. IF IOChan.Position(f) = 2 THEN
  21. ExitCode := ExitCode + 2
  22. ELSE ExitCode := 101 END;
  23. IF IOChan.Rewind(f) THEN
  24. IF IOChan.ReadChar(f) = "a" THEN ExitCode := ExitCode + 0 END;
  25. IF IOChan.Position(f) = 1 THEN ExitCode := ExitCode + 4 END;
  26. IF IOChan.Seek(f, 3) THEN
  27. IOChan.ReadString(f, line);
  28. IF line = "def" THEN ExitCode := ExitCode + 8 ELSE ExitCode := 102 END
  29. END
  30. END;
  31. IOChan.Close(f)
  32. END IOChanSeekProg.