?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE : Interactive Facility' ??
?? NEWTITLE := '  [XDCL] iip$ascii_170_to_hex' ??
MODULE iim$ascii_170_to_hex;


{ Global Constants and Types
*copyc IFV$MODULE_FOR_C180
*copyc oss$job_paged_literal
?? SET (LIST := OFF) ??
*copyc iit$application_names_messages
?? SET (LIST := ON) ??

?? TITLE := 'PROCEDURE [XDCL] iip$ascii_170_to_hex', EJECT ??

  PROCEDURE [XDCL] iip$ascii_170_to_hex (ascii: iit$170_ascii_word;
    VAR hex: string ( * ));

    VAR
      length: integer,
      i: integer,
      hex_digits: [STATIC, READ, oss$job_paged_literal] array [0 .. 0f(16)] of char := ['0', '1', '2', '3',
        '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];

{ Determine the number of hex digits to convert

    IF STRLENGTH (hex) < 15 THEN
      length := STRLENGTH (hex) - 1;
    ELSE
      length := 14;
    IFEND;

{ Convert half-bytes (nibbles) to hexadecimal digits

    FOR i := 0 TO length DO
      IF i < 8 THEN
        hex (i + 1) := hex_digits [ascii.left_nibble [i]];
      ELSE
        hex (i + 1) := hex_digits [ascii.right_nibble [i - 8]];
      IFEND;
    FOREND;

{ Blank fill any remaining characters in the hex string

    FOR i := 16 TO STRLENGTH (hex) DO
      hex (i) := ' ';
    FOREND;
  PROCEND iip$ascii_170_to_hex;
MODEND
