?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE Interstate Communication : Set Abnormal Condition' ??
MODULE icm$set_status_abnormal;

{ PURPOSE:
{   This module contains the procedure to set the error status for certain
{   Interstate Communication errors.
{
{ DESIGN:
{   Move the code from other Interstate Communication modules.

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc ice$error_codes
*copyc mld$memory_link_declarations
*copyc ost$status
?? POP ??
*copyc osp$append_status_parameter
*copyc osp$set_status_abnormal
*copyc osv$170_os_type

?? TITLE := '[XDCL] icp$set_status_abnormal', EJECT ??
*copy ich$set_status_abnormal

  PROCEDURE [XDCL] icp$set_status_abnormal
    (VAR status: ost$status);

    VAR
      length: integer,
      message: string (3),
      partner_state: string (6),
      partner_state_length: integer;

{ Set up dual state system indicator.

    IF osv$170_os_type = osc$ot7_dual_state_nos THEN
      partner_state := 'NOS';
      partner_state_length := 3;
    ELSE
      partner_state := 'NOS/BE';
      partner_state_length := 6;
    IFEND;

    CASE status.condition OF
    = mlc$message_truncated =
      osp$set_status_abnormal (icc$interstate_communication_id, ice$mismatching_code,
            partner_state (1, partner_state_length), status);
    = mlc$system_name_no_match =
      osp$set_status_abnormal (icc$interstate_communication_id, ice$receiver_already_signed_on,
            partner_state (1, partner_state_length), status);
    = mlc$receiver_not_signed_on =
      osp$set_status_abnormal (icc$interstate_communication_id, ice$receiver_not_signed_on,
            partner_state (1, partner_state_length), status);
      osp$append_status_parameter (osc$status_parameter_delimiter, partner_state (1, partner_state_length),
            status);
      osp$append_status_parameter (osc$status_parameter_delimiter, partner_state (1, partner_state_length),
            status);
    ELSE
      STRINGREP (message, length, status.condition);
      osp$set_status_abnormal (icc$interstate_communication_id, ice$unexpected_ml_error, message (1, length),
            status);
    CASEND;

  PROCEND icp$set_status_abnormal;

MODEND icm$set_status_abnormal;
