12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- (*
- (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
- See the copyright notice in the ACK home directory, in the file "Copyright".
- *)
- (*$R-*)
- IMPLEMENTATION MODULE Conversions;
- (*
- Module: numeric-to-string conversions
- Author: Ceriel J.H. Jacobs
- Version: $Id$
- *)
- PROCEDURE ConvertNum(num, len, base: CARDINAL;
- neg: BOOLEAN;
- VAR str: ARRAY OF CHAR);
- VAR i: CARDINAL;
- r: CARDINAL;
- tmp: ARRAY [0..20] OF CHAR;
- BEGIN
- i := 0;
- REPEAT
- r := num MOD base;
- num := num DIV base;
- IF r <= 9 THEN
- tmp[i] := CHR(r + ORD('0'));
- ELSE
- tmp[i] := CHR(r - 10 + ORD('A'));
- END;
- INC(i);
- UNTIL num = 0;
- IF neg THEN
- tmp[i] := '-';
- INC(i)
- END;
- IF len > HIGH(str) + 1 THEN len := HIGH(str) + 1; END;
- IF i > HIGH(str) + 1 THEN i := HIGH(str) + 1; END;
- r := 0;
- WHILE len > i DO str[r] := ' '; INC(r); DEC(len); END;
- WHILE i > 0 DO str[r] := tmp[i-1]; DEC(i); INC(r); END;
- WHILE r <= HIGH(str) DO
- str[r] := 0C;
- INC(r);
- END;
- END ConvertNum;
- PROCEDURE ConvertOctal(num, len: CARDINAL; VAR str: ARRAY OF CHAR);
- BEGIN
- ConvertNum(num, len, 8, FALSE, str);
- END ConvertOctal;
- PROCEDURE ConvertHex(num, len: CARDINAL; VAR str: ARRAY OF CHAR);
- BEGIN
- ConvertNum(num, len, 16, FALSE, str);
- END ConvertHex;
- PROCEDURE ConvertCardinal(num, len: CARDINAL; VAR str: ARRAY OF CHAR);
- BEGIN
- ConvertNum(num, len, 10, FALSE, str);
- END ConvertCardinal;
- PROCEDURE ConvertInteger(num: INTEGER;
- len: CARDINAL;
- VAR str: ARRAY OF CHAR);
- BEGIN
- IF (num < 0) AND (num >= -MAX(INTEGER)) THEN
- ConvertNum(-num, len, 10, TRUE, str);
- ELSE
- ConvertNum(CARDINAL(num), len, 10, num < 0, str);
- END;
- END ConvertInteger;
- END Conversions.
|