| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- IMPLEMENTATION MODULE SRealIO;
- IMPORT IOConsts, SIOResult;
- FROM IOConsts IMPORT allRight;
- PROCEDURE m2realconv (x : REAL; mode : INTEGER; prec : INTEGER;
- VAR s : ARRAY OF CHAR) : INTEGER;
- EXTERNAL;
- PROCEDURE m2readreal () : REAL;
- EXTERNAL;
- PROCEDURE m2writechar (c : CHAR);
- EXTERNAL;
- PROCEDURE m2write (VAR s : ARRAY OF CHAR);
- EXTERNAL;
- PROCEDURE StrLen (VAR s : ARRAY OF CHAR) : CARDINAL;
- VAR i : CARDINAL;
- BEGIN
- i := 0;
- WHILE (i <= HIGH(s)) AND (s[i] # CHR(0)) DO INC(i) END;
- RETURN i
- END StrLen;
- PROCEDURE WritePadded (VAR s : ARRAY OF CHAR; width : CARDINAL);
- VAR n, i : CARDINAL;
- BEGIN
- n := StrLen(s);
- IF width > n THEN
- i := width - n;
- WHILE i > 0 DO m2writechar(" "); DEC(i) END
- END;
- m2write(s)
- END WritePadded;
- PROCEDURE WriteFloat (real : REAL; sigFigs : CARDINAL; width : CARDINAL);
- VAR s : ARRAY [0 .. 127] OF CHAR;
- n : INTEGER;
- BEGIN
- n := m2realconv(real, 1, VAL(INTEGER, sigFigs), s);
- WritePadded(s, width)
- END WriteFloat;
- PROCEDURE WriteEng (real : REAL; sigFigs : CARDINAL; width : CARDINAL);
- VAR s : ARRAY [0 .. 127] OF CHAR;
- n : INTEGER;
- BEGIN
- n := m2realconv(real, 2, VAL(INTEGER, sigFigs), s);
- WritePadded(s, width)
- END WriteEng;
- PROCEDURE WriteFixed (real : REAL; place : INTEGER; width : CARDINAL);
- VAR s : ARRAY [0 .. 127] OF CHAR;
- n : INTEGER;
- BEGIN
- n := m2realconv(real, 0, place, s);
- WritePadded(s, width)
- END WriteFixed;
- PROCEDURE WriteReal (real : REAL; width : CARDINAL);
- BEGIN
- (* ISO: fixed if it fits, otherwise floating; approximate by
- fixed with a width-derived number of places. *)
- IF width <= 16 THEN
- WriteFixed(real, 6, width)
- ELSE
- WriteFloat(real, 6, width)
- END
- END WriteReal;
- PROCEDURE ReadReal (VAR real : REAL);
- BEGIN
- real := m2readreal();
- SIOResult.SetReadResult(allRight)
- END ReadReal;
- END SRealIO.
|