IMPLEMENTATION MODULE LongIO; (* Builds the text with LongStr and writes it through IOChan. *) IMPORT IOChan, LongStr, ConvTypes; PROCEDURE WritePadded (cid : IOChan.ChanId; VAR s : ARRAY OF CHAR; width : CARDINAL); VAR n, i : CARDINAL; pad : ARRAY [0 .. 127] OF CHAR; BEGIN n := 0; WHILE (n <= HIGH(s)) AND (s[n] # CHR(0)) DO INC(n) END; IF width > n THEN i := 0; WHILE (i < width - n) AND (i <= HIGH(pad)) DO pad[i] := " "; INC(i) END; pad[i] := CHR(0); IOChan.WriteString(cid, pad) END; IOChan.WriteString(cid, s) END WritePadded; PROCEDURE WriteFloat (cid : IOChan.ChanId; real : LONGREAL; sigFigs : CARDINAL; width : CARDINAL); VAR s : ARRAY [0 .. 127] OF CHAR; BEGIN LongStr.RealToFloat(real, sigFigs, s); WritePadded(cid, s, width) END WriteFloat; PROCEDURE WriteEng (cid : IOChan.ChanId; real : LONGREAL; sigFigs : CARDINAL; width : CARDINAL); VAR s : ARRAY [0 .. 127] OF CHAR; BEGIN LongStr.RealToEng(real, sigFigs, s); WritePadded(cid, s, width) END WriteEng; PROCEDURE WriteFixed (cid : IOChan.ChanId; real : LONGREAL; place : INTEGER; width : CARDINAL); VAR s : ARRAY [0 .. 127] OF CHAR; BEGIN LongStr.RealToFixed(real, place, s); WritePadded(cid, s, width) END WriteFixed; PROCEDURE WriteReal (cid : IOChan.ChanId; real : LONGREAL; width : CARDINAL); BEGIN IF width <= 16 THEN WriteFixed(cid, real, 6, width) ELSE WriteFloat(cid, real, 6, width) END END WriteReal; PROCEDURE ReadReal (cid : IOChan.ChanId; VAR real : LONGREAL); VAR s : ARRAY [0 .. 255] OF CHAR; res : ConvTypes.ConvResults; BEGIN IOChan.ReadString(cid, s); LongStr.StrToReal(s, real, res) END ReadReal; END LongIO.