(* Version 1.10, Nov 1984 *)
DEFINITION MODULE NumberConversion;
(*
   Conversion between numbers and strings

The routines that convert a string to a number:
   - skip leading blanks,
   - accept always a '+' sign and for integers
     also a '-' sign,
   - skip blanks between sign and number.
Done is TRUE if the conversion is successful.

The routines that convert a number to a string:
   - if the string is too small the number is truncated
   - if the number has less digits than width, leading
     blanks are added
*)


EXPORT QUALIFIED
   MaxBase, BASE,
   StringToCard, StringToInt, StringToNum,
   CardToString, IntToString, NumToString;


CONST MaxBase = 16;


TYPE BASE = [2..MaxBase];

  
PROCEDURE StringToCard(str: ARRAY OF CHAR;
                       VAR num: CARDINAL;
                       VAR done: BOOLEAN);
(*
- Convert a string to a CARDINAL number.

in:    str    string to convert 

out:   num    converted number
       done    TRUE if successful conversion,
               FALSE if number out of range,
               or contents of string non numeric.
*)


PROCEDURE StringToInt(str: ARRAY OF CHAR;
                      VAR num: INTEGER;
                      VAR done: BOOLEAN);
(*
- Convert a string to an INTEGER number.

in:    str    string to convert 

out:   num    converted number
       done    TRUE if successful conversion,
               FALSE if  number out of range,
               or contents of string non numeric.
*)


PROCEDURE StringToNum(str: ARRAY OF CHAR;
                      base: BASE;
                      VAR num: CARDINAL;
                      VAR done: BOOLEAN);
(*
- Convert a string to a CARDINAL number.

in:   str    string to convert 
      base   the base of the number represented in
             the string

out:  num    converted number
      done   TRUE if successful conversion,
             FALSE  or number out of range,
             or contents of string not within base.
*)


PROCEDURE CardToString(num: CARDINAL;
                       VAR str: ARRAY OF CHAR;
                       width: CARDINAL);
(*
- Convert a CARDINAL number to a string.

in:   num    number to convert
      width  width of the returned string

out:  str    returned string representation of the number
*)


PROCEDURE IntToString(num: INTEGER;
                      VAR str: ARRAY OF CHAR;
                      width: CARDINAL);
(*
- Convert an INTEGER number to a string.

in:   num    number to convert
      width  width of the returned string

out:  str    returned string representation of the number
*)


PROCEDURE NumToString(num: CARDINAL;
                      base: BASE;
                      VAR str: ARRAY OF CHAR;
                      width: CARDINAL);
(*
- Convert a number to the string representation in the specified base.

in:   num    number to convert
      base    the base of conversion
      width    width of the returned string

out:  str    returned string representation of the number
*)


END NumberConversion.
