?? TITLE := 'MODULE iim$restore_term_conn_atributes [2,2,3]' ??
*copyc osd$default_pragmats
MODULE iim$restore_term_conn_atributes;

?? PUSH (LISTEXT := ON) ??
*copyc iip$connection_to_vt_attributes
*copyc iiv$connection_desc_ptr
?? POP ??

{ Purpose:  This interface is only called during the processing of ATTACH_JOB
{           on standalone CDCNET connections to restore the reconnected job's
{           actual_connection_attributes which were active when the job was
{           disconnected.
{
{ Design:   All the values in the actual_connection_attributes field of the
{           connection's CONNECTION_DESCRIPTION are reactivated at the terminal
{           by passing these values in a call to the interface
{           IIP$CONNECTION_TO_VT_ATTRIBUTES.
{
{           This code resides in ring 2 so that it can access the pointer to
{           the CONNECTION_DESCRIPTION.  It is GATED because its sole caller
{           is privileged to run in a higher ring, ring 3.


  PROCEDURE [XDCL, #GATE] iip$restore_term_conn_atributes
    (VAR status: ost$status);

    VAR
      i: ifc$min_connection_key .. ifc$max_connection_key,
      actual_attributes: ^ift$connection_attributes;

    PUSH actual_attributes: [$INTEGER (ifc$min_connection_key) +
          1 .. $INTEGER (ifc$max_connection_key) + 1];
    FOR i := ifc$min_connection_key TO ifc$max_connection_key DO
      CASE i OF
      = ifc$attention_character_action =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$attention_character_action;
        actual_attributes^ [$INTEGER (i) + 1].attention_character_action :=
              iiv$connection_desc_ptr^.actual_connection_attributes.attention_character_action.value;
      = ifc$break_key_action =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$break_key_action;
        actual_attributes^ [$INTEGER (i) + 1].break_key_action :=
              iiv$connection_desc_ptr^.actual_connection_attributes.break_key_action.value;
      = ifc$input_block_size =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$input_block_size;
        actual_attributes^ [$INTEGER (i) + 1].input_block_size :=
              iiv$connection_desc_ptr^.actual_connection_attributes.input_block_size.value;
      = ifc$input_editing_mode =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$input_editing_mode;
        actual_attributes^ [$INTEGER (i) + 1].input_editing_mode :=
              iiv$connection_desc_ptr^.actual_connection_attributes.input_editing_mode.value;
      = ifc$input_output_mode =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$input_output_mode;
        actual_attributes^ [$INTEGER (i) + 1].input_output_mode :=
              iiv$connection_desc_ptr^.actual_connection_attributes.input_output_mode.value;
      = ifc$partial_char_forwarding =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$partial_char_forwarding;
        actual_attributes^ [$INTEGER (i) + 1].partial_character_forwarding :=
              iiv$connection_desc_ptr^.actual_connection_attributes.partial_char_forwarding.value;
      = ifc$store_backspace_character =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$store_backspace_character;
        actual_attributes^ [$INTEGER (i) + 1].store_backspace_character :=
              iiv$connection_desc_ptr^.actual_connection_attributes.store_backspace_character.value;
      = ifc$store_nuls_dels =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$store_nuls_dels;
        actual_attributes^ [$INTEGER (i) + 1].store_nuls_dels :=
              iiv$connection_desc_ptr^.actual_connection_attributes.store_nuls_dels.value;
      = ifc$trans_character_mode =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$trans_character_mode;
        actual_attributes^ [$INTEGER (i) + 1].trans_character_mode :=
              iiv$connection_desc_ptr^.actual_connection_attributes.trans_character_mode.value;
      = ifc$trans_forward_character =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$trans_forward_character;
        actual_attributes^ [$INTEGER (i) + 1].trans_forward_character :=
              iiv$connection_desc_ptr^.actual_connection_attributes.trans_forward_character.value;
      = ifc$trans_length_mode =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$trans_length_mode;
        actual_attributes^ [$INTEGER (i) + 1].trans_length_mode :=
              iiv$connection_desc_ptr^.actual_connection_attributes.trans_length_mode.value;
      = ifc$trans_timeout_mode =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$trans_timeout_mode;
        actual_attributes^ [$INTEGER (i) + 1].trans_timeout_mode :=
              iiv$connection_desc_ptr^.actual_connection_attributes.trans_timeout_mode.value;
      = ifc$trans_message_length =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$trans_message_length;
        actual_attributes^ [$INTEGER (i) + 1].trans_message_length :=
              iiv$connection_desc_ptr^.actual_connection_attributes.trans_message_length.value;
      ELSE
{     = ifc$trans_terminate_character =
        actual_attributes^ [$INTEGER (i) + 1].key := ifc$trans_terminate_character;
        actual_attributes^ [$INTEGER (i) + 1].trans_terminate_character :=
              iiv$connection_desc_ptr^.actual_connection_attributes.trans_terminate_character.value;
      CASEND;
    FOREND;

    iip$connection_to_vt_attributes (iiv$connection_desc_ptr, actual_attributes^, status);

  PROCEND iip$restore_term_conn_atributes;
MODEND iim$restore_term_conn_atributes;
