longio.mod 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. IMPLEMENTATION MODULE LongIO;
  2. (* Builds the text with LongStr and writes it through IOChan. *)
  3. IMPORT IOChan, LongStr, ConvTypes;
  4. PROCEDURE WritePadded (cid : IOChan.ChanId; VAR s : ARRAY OF CHAR;
  5. width : CARDINAL);
  6. VAR n, i : CARDINAL;
  7. pad : ARRAY [0 .. 127] OF CHAR;
  8. BEGIN
  9. n := 0;
  10. WHILE (n <= HIGH(s)) AND (s[n] # CHR(0)) DO INC(n) END;
  11. IF width > n THEN
  12. i := 0;
  13. WHILE (i < width - n) AND (i <= HIGH(pad)) DO
  14. pad[i] := " "; INC(i)
  15. END;
  16. pad[i] := CHR(0);
  17. IOChan.WriteString(cid, pad)
  18. END;
  19. IOChan.WriteString(cid, s)
  20. END WritePadded;
  21. PROCEDURE WriteFloat (cid : IOChan.ChanId; real : LONGREAL;
  22. sigFigs : CARDINAL; width : CARDINAL);
  23. VAR s : ARRAY [0 .. 127] OF CHAR;
  24. BEGIN
  25. LongStr.RealToFloat(real, sigFigs, s);
  26. WritePadded(cid, s, width)
  27. END WriteFloat;
  28. PROCEDURE WriteEng (cid : IOChan.ChanId; real : LONGREAL;
  29. sigFigs : CARDINAL; width : CARDINAL);
  30. VAR s : ARRAY [0 .. 127] OF CHAR;
  31. BEGIN
  32. LongStr.RealToEng(real, sigFigs, s);
  33. WritePadded(cid, s, width)
  34. END WriteEng;
  35. PROCEDURE WriteFixed (cid : IOChan.ChanId; real : LONGREAL;
  36. place : INTEGER; width : CARDINAL);
  37. VAR s : ARRAY [0 .. 127] OF CHAR;
  38. BEGIN
  39. LongStr.RealToFixed(real, place, s);
  40. WritePadded(cid, s, width)
  41. END WriteFixed;
  42. PROCEDURE WriteReal (cid : IOChan.ChanId; real : LONGREAL;
  43. width : CARDINAL);
  44. BEGIN
  45. IF width <= 16 THEN
  46. WriteFixed(cid, real, 6, width)
  47. ELSE
  48. WriteFloat(cid, real, 6, width)
  49. END
  50. END WriteReal;
  51. PROCEDURE ReadReal (cid : IOChan.ChanId; VAR real : LONGREAL);
  52. VAR s : ARRAY [0 .. 255] OF CHAR;
  53. res : ConvTypes.ConvResults;
  54. BEGIN
  55. IOChan.ReadString(cid, s);
  56. LongStr.StrToReal(s, real, res)
  57. END ReadReal;
  58. END LongIO.