conversions.mod 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. IMPLEMENTATION MODULE Conversions;
  2. PROCEDURE m2realstr(x : REAL; VAR s : ARRAY OF CHAR);
  3. EXTERNAL;
  4. PROCEDURE m2strreal(VAR s : ARRAY OF CHAR; VAR ok : INTEGER) : REAL;
  5. EXTERNAL;
  6. PROCEDURE IntToStr(n : INTEGER; VAR s : ARRAY OF CHAR);
  7. VAR v : INTEGER;
  8. i, k : CARDINAL;
  9. tmp : ARRAY [0 .. 31] OF CHAR;
  10. BEGIN
  11. IF n = 0 THEN
  12. s[0] := "0"; s[1] := CHR(0)
  13. ELSE
  14. IF n < 0 THEN v := -n ELSE v := n END;
  15. i := 0;
  16. WHILE (v > 0) AND (i <= HIGH(tmp)) DO
  17. tmp[i] := CHR(ORD("0") + (v MOD 10));
  18. v := v DIV 10;
  19. INC(i)
  20. END;
  21. k := 0;
  22. IF n < 0 THEN s[k] := "-"; INC(k) END;
  23. WHILE (i > 0) AND (k <= HIGH(s)) DO
  24. DEC(i);
  25. s[k] := tmp[i]; INC(k)
  26. END;
  27. IF k <= HIGH(s) THEN s[k] := CHR(0) END
  28. END
  29. END IntToStr;
  30. PROCEDURE CardToStr(n : CARDINAL; VAR s : ARRAY OF CHAR);
  31. VAR v : CARDINAL;
  32. i, k : CARDINAL;
  33. tmp : ARRAY [0 .. 31] OF CHAR;
  34. BEGIN
  35. IF n = 0 THEN
  36. s[0] := "0"; s[1] := CHR(0)
  37. ELSE
  38. v := n; i := 0;
  39. WHILE (v > 0) AND (i <= HIGH(tmp)) DO
  40. tmp[i] := CHR(ORD("0") + (v MOD 10));
  41. v := v DIV 10;
  42. INC(i)
  43. END;
  44. k := 0;
  45. WHILE (i > 0) AND (k <= HIGH(s)) DO
  46. DEC(i);
  47. s[k] := tmp[i]; INC(k)
  48. END;
  49. IF k <= HIGH(s) THEN s[k] := CHR(0) END
  50. END
  51. END CardToStr;
  52. PROCEDURE RealToStr(x : REAL; VAR s : ARRAY OF CHAR);
  53. BEGIN
  54. m2realstr(x, s)
  55. END RealToStr;
  56. PROCEDURE StrToInt(s : ARRAY OF CHAR; VAR n : INTEGER) : BOOLEAN;
  57. VAR i : CARDINAL;
  58. neg, seen : BOOLEAN;
  59. v : INTEGER;
  60. BEGIN
  61. n := 0; i := 0; neg := FALSE; seen := FALSE; v := 0;
  62. IF (i > HIGH(s)) OR (s[i] = CHR(0)) THEN RETURN FALSE END;
  63. IF s[i] = "-" THEN neg := TRUE; INC(i)
  64. ELSIF s[i] = "+" THEN INC(i)
  65. END;
  66. WHILE (i <= HIGH(s)) AND (s[i] >= "0") AND (s[i] <= "9") DO
  67. v := v * 10 + (ORD(s[i]) - ORD("0"));
  68. seen := TRUE;
  69. INC(i)
  70. END;
  71. IF NOT seen THEN RETURN FALSE END;
  72. IF (i <= HIGH(s)) AND (s[i] # CHR(0)) THEN RETURN FALSE END;
  73. IF neg THEN n := -v ELSE n := v END;
  74. RETURN TRUE
  75. END StrToInt;
  76. PROCEDURE StrToCard(s : ARRAY OF CHAR; VAR n : CARDINAL) : BOOLEAN;
  77. VAR i : CARDINAL;
  78. seen : BOOLEAN;
  79. v : CARDINAL;
  80. BEGIN
  81. n := 0; i := 0; seen := FALSE; v := 0;
  82. WHILE (i <= HIGH(s)) AND (s[i] >= "0") AND (s[i] <= "9") DO
  83. v := v * 10 + (ORD(s[i]) - ORD("0"));
  84. seen := TRUE;
  85. INC(i)
  86. END;
  87. IF NOT seen THEN RETURN FALSE END;
  88. IF (i <= HIGH(s)) AND (s[i] # CHR(0)) THEN RETURN FALSE END;
  89. n := v;
  90. RETURN TRUE
  91. END StrToCard;
  92. PROCEDURE StrToReal(VAR s : ARRAY OF CHAR; VAR x : REAL) : BOOLEAN;
  93. VAR ok : INTEGER;
  94. BEGIN
  95. x := m2strreal(s, ok);
  96. RETURN ok # 0
  97. END StrToReal;
  98. END Conversions.