| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- IMPLEMENTATION MODULE RealStr;
- (* String conversion uses the runtime shim's snprintf formatter
- (m2realconv); the numeric parse delegates to Conversions. *)
- IMPORT ConvTypes, Conversions;
- FROM ConvTypes IMPORT strAllRight, strOutOfRange, strWrongFormat,
- strEmpty;
- PROCEDURE m2realconv (x : REAL; mode : INTEGER; prec : INTEGER;
- VAR s : ARRAY OF CHAR) : INTEGER;
- EXTERNAL;
- PROCEDURE Map (cr : Conversions.ConvResults) : ConvTypes.ConvResults;
- BEGIN
- IF ORD(cr) = 0 THEN RETURN strAllRight
- ELSIF ORD(cr) = 1 THEN RETURN strOutOfRange
- ELSIF ORD(cr) = 2 THEN RETURN strWrongFormat
- ELSE RETURN strEmpty
- END
- END Map;
- PROCEDURE StrToReal (str : ARRAY OF CHAR; VAR real : REAL;
- VAR res : ConvResults);
- VAR s : ARRAY [0 .. 255] OF CHAR;
- i : CARDINAL;
- BEGIN
- real := 0.0;
- (* Conversions.StrToReal takes a VAR array; copy to a scratch one. *)
- i := 0;
- WHILE (i <= HIGH(s)) AND (i <= HIGH(str)) AND (str[i] # CHR(0)) DO
- s[i] := str[i]; INC(i)
- END;
- s[i] := CHR(0);
- res := Map(Conversions.StrToReal(s, real))
- END StrToReal;
- PROCEDURE RealToFloat (real : REAL; sigFigs : CARDINAL;
- VAR str : ARRAY OF CHAR);
- VAR n : INTEGER;
- BEGIN
- n := m2realconv(real, 1, VAL(INTEGER, sigFigs), str)
- END RealToFloat;
- PROCEDURE RealToEng (real : REAL; sigFigs : CARDINAL;
- VAR str : ARRAY OF CHAR);
- VAR n : INTEGER;
- BEGIN
- n := m2realconv(real, 2, VAL(INTEGER, sigFigs), str)
- END RealToEng;
- PROCEDURE RealToFixed (real : REAL; place : INTEGER;
- VAR str : ARRAY OF CHAR);
- VAR n : INTEGER;
- BEGIN
- n := m2realconv(real, 0, place, str)
- END RealToFixed;
- PROCEDURE RealToStr (real : REAL; VAR str : ARRAY OF CHAR);
- BEGIN
- Conversions.RealToStr(real, str)
- END RealToStr;
- END RealStr.
|