?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE SCL Interpreter: Convert Character To Graphic' ??
MODULE clm$convert_char_to_graphic;

{
{ PURPOSE:
{    This module contains the utility convert character to graphic which is
{    used by display command processors.
{
?? NEWTITLE := 'Global Declarations', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc oss$job_paged_literal
*copyc ost$status
*copyc ost$string
?? POP ??
*copyc clv$hex_digits
?? TITLE := 'clp$convert_char_to_graphic', EJECT ??

  PROCEDURE [XDCL, #GATE] clp$convert_char_to_graphic
    (    ch: char;
     VAR char_string: ost$string;
     VAR status: ost$status);

    VAR
      control_characters: [STATIC, READ, oss$job_paged_literal] array [$CHAR (0) .. $CHAR (20(16))] of
            string (3) := ['NUL', 'SOH', 'STX', 'ETX', 'EOT', 'ENQ', 'ACK', 'BEL', 'BS', 'HT', 'LF', 'VT',
            'FF', 'CR', 'SO', 'SI', 'DLE', 'DC1', 'DC2', 'DC3', 'DC4', 'NAK', 'SYN', 'ETB', 'CAN', 'EM',
            'SUB', 'ESC', 'FS', 'GS', 'RS', 'US', 'SP'];

    CASE ch OF
    = $CHAR (0) .. $CHAR (20(16)) =
      char_string.value (1, 3) := control_characters [ch];
      char_string.size := 3 - $INTEGER (char_string.value (3) = ' ');
    = $CHAR (21(16)) .. $CHAR (7e(16)) =
      char_string.value (1) := ch;
      char_string.size := 1;
    = $CHAR (7f(16)) =
      char_string.value := 'DEL';
      char_string.size := 3;
    = $CHAR (80(16)) .. $CHAR (0ff(16)) =
      char_string.value := '0xx(16)';
      char_string.value (2) := clv$hex_digits [$INTEGER (ch) DIV 16];
      char_string.value (3) := clv$hex_digits [$INTEGER (ch) MOD 16];
      char_string.size := 7;
    ELSE
      char_string.value := 'UNKNOWN';
      char_string.size := 7;
    CASEND;

  PROCEND clp$convert_char_to_graphic;

MODEND clm$convert_char_to_graphic;
