Conversion.mod 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. (*
  2. (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. See the copyright notice in the ACK home directory, in the file "Copyright".
  4. *)
  5. (*$R-*)
  6. IMPLEMENTATION MODULE Conversions;
  7. (*
  8. Module: numeric-to-string conversions
  9. Author: Ceriel J.H. Jacobs
  10. Version: $Id$
  11. *)
  12. PROCEDURE ConvertNum(num, len, base: CARDINAL;
  13. neg: BOOLEAN;
  14. VAR str: ARRAY OF CHAR);
  15. VAR i: CARDINAL;
  16. r: CARDINAL;
  17. tmp: ARRAY [0..20] OF CHAR;
  18. BEGIN
  19. i := 0;
  20. REPEAT
  21. r := num MOD base;
  22. num := num DIV base;
  23. IF r <= 9 THEN
  24. tmp[i] := CHR(r + ORD('0'));
  25. ELSE
  26. tmp[i] := CHR(r - 10 + ORD('A'));
  27. END;
  28. INC(i);
  29. UNTIL num = 0;
  30. IF neg THEN
  31. tmp[i] := '-';
  32. INC(i)
  33. END;
  34. IF len > HIGH(str) + 1 THEN len := HIGH(str) + 1; END;
  35. IF i > HIGH(str) + 1 THEN i := HIGH(str) + 1; END;
  36. r := 0;
  37. WHILE len > i DO str[r] := ' '; INC(r); DEC(len); END;
  38. WHILE i > 0 DO str[r] := tmp[i-1]; DEC(i); INC(r); END;
  39. WHILE r <= HIGH(str) DO
  40. str[r] := 0C;
  41. INC(r);
  42. END;
  43. END ConvertNum;
  44. PROCEDURE ConvertOctal(num, len: CARDINAL; VAR str: ARRAY OF CHAR);
  45. BEGIN
  46. ConvertNum(num, len, 8, FALSE, str);
  47. END ConvertOctal;
  48. PROCEDURE ConvertHex(num, len: CARDINAL; VAR str: ARRAY OF CHAR);
  49. BEGIN
  50. ConvertNum(num, len, 16, FALSE, str);
  51. END ConvertHex;
  52. PROCEDURE ConvertCardinal(num, len: CARDINAL; VAR str: ARRAY OF CHAR);
  53. BEGIN
  54. ConvertNum(num, len, 10, FALSE, str);
  55. END ConvertCardinal;
  56. PROCEDURE ConvertInteger(num: INTEGER;
  57. len: CARDINAL;
  58. VAR str: ARRAY OF CHAR);
  59. BEGIN
  60. IF (num < 0) AND (num >= -MAX(INTEGER)) THEN
  61. ConvertNum(-num, len, 10, TRUE, str);
  62. ELSE
  63. ConvertNum(CARDINAL(num), len, 10, num < 0, str);
  64. END;
  65. END ConvertInteger;
  66. END Conversions.