realstr.mod 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. IMPLEMENTATION MODULE RealStr;
  2. (* String conversion uses the runtime shim's snprintf formatter
  3. (m2realconv); the numeric parse delegates to Conversions. *)
  4. IMPORT ConvTypes, Conversions;
  5. FROM ConvTypes IMPORT strAllRight, strOutOfRange, strWrongFormat,
  6. strEmpty;
  7. PROCEDURE m2realconv (x : REAL; mode : INTEGER; prec : INTEGER;
  8. VAR s : ARRAY OF CHAR) : INTEGER;
  9. EXTERNAL;
  10. PROCEDURE Map (cr : Conversions.ConvResults) : ConvTypes.ConvResults;
  11. BEGIN
  12. IF ORD(cr) = 0 THEN RETURN strAllRight
  13. ELSIF ORD(cr) = 1 THEN RETURN strOutOfRange
  14. ELSIF ORD(cr) = 2 THEN RETURN strWrongFormat
  15. ELSE RETURN strEmpty
  16. END
  17. END Map;
  18. PROCEDURE StrToReal (str : ARRAY OF CHAR; VAR real : REAL;
  19. VAR res : ConvResults);
  20. VAR s : ARRAY [0 .. 255] OF CHAR;
  21. i : CARDINAL;
  22. BEGIN
  23. real := 0.0;
  24. (* Conversions.StrToReal takes a VAR array; copy to a scratch one. *)
  25. i := 0;
  26. WHILE (i <= HIGH(s)) AND (i <= HIGH(str)) AND (str[i] # CHR(0)) DO
  27. s[i] := str[i]; INC(i)
  28. END;
  29. s[i] := CHR(0);
  30. res := Map(Conversions.StrToReal(s, real))
  31. END StrToReal;
  32. PROCEDURE RealToFloat (real : REAL; sigFigs : CARDINAL;
  33. VAR str : ARRAY OF CHAR);
  34. VAR n : INTEGER;
  35. BEGIN
  36. n := m2realconv(real, 1, VAL(INTEGER, sigFigs), str)
  37. END RealToFloat;
  38. PROCEDURE RealToEng (real : REAL; sigFigs : CARDINAL;
  39. VAR str : ARRAY OF CHAR);
  40. VAR n : INTEGER;
  41. BEGIN
  42. n := m2realconv(real, 2, VAL(INTEGER, sigFigs), str)
  43. END RealToEng;
  44. PROCEDURE RealToFixed (real : REAL; place : INTEGER;
  45. VAR str : ARRAY OF CHAR);
  46. VAR n : INTEGER;
  47. BEGIN
  48. n := m2realconv(real, 0, place, str)
  49. END RealToFixed;
  50. PROCEDURE RealToStr (real : REAL; VAR str : ARRAY OF CHAR);
  51. BEGIN
  52. Conversions.RealToStr(real, str)
  53. END RealToStr;
  54. END RealStr.