?? RIGHT := 110 ??
*copyc osd$default_pragmats
?? NEWTITLE := 'rhm$change_dual_state_environ' ??

MODULE rhm$change_dual_state_environ;

{
{ PURPOSE:
{   This module contains the processor for the command that allow the users to change their link
{   attributes in order to be able to use interstate communication commands (REPLACE_FILE, GET_FILE,
{   CREATE_INTERSTATE_CONNECTION, and PRINT_FILE with the Dual_State_Routing_Parameter).

?? NEWTITLE := '  Global Declarations', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc clt$parameter_list
*copyc cle$ecc_file_reference
*copyc ofe$error_codes
*copyc ost$status
?? POP ??
*copyc avp$configuration_administrator
*copyc clp$get_value
*copyc clp$scan_parameter_list
*copyc rhp$update_dual_state_environ
*copyc osp$set_status_abnormal

?? TITLE := '  [XDCL, #GATE] rhp$change_dual_state_environ', EJECT ??
*copy rhh$change_dual_state_environ

  PROCEDURE [XDCL, #GATE] rhp$change_dual_state_environ (
         parameter_list: clt$parameter_list;
     VAR status: ost$status);

{         PDT change_ds_link_envir_pdt (
{           display_charge_link_attribute, dcla: boolean = TRUE
{           display_family_link_attribute, dfla: boolean = TRUE
{           display_project_link_attribute, dpla: boolean = TRUE
{           display_user_link_attribute, dula: boolean = TRUE
{           status)

?? PUSH (LISTEXT := ON) ??

  VAR
    change_ds_link_envir_pdt: [STATIC, READ, cls$pdt] clt$parameter_descriptor_table := [
      ^change_ds_link_envir_pdt_names, ^change_ds_link_envir_pdt_params];

  VAR
    change_ds_link_envir_pdt_names: [STATIC, READ, cls$pdt_names_and_defaults] array [1 .. 9] of
      clt$parameter_name_descriptor := [['DISPLAY_CHARGE_LINK_ATTRIBUTE', 1], ['DCLA', 1], [
      'DISPLAY_FAMILY_LINK_ATTRIBUTE', 2], ['DFLA', 2], ['DISPLAY_PROJECT_LINK_ATTRIBUTE', 3], ['DPLA', 3], [
      'DISPLAY_USER_LINK_ATTRIBUTE', 4], ['DULA', 4], ['STATUS', 5]];

  VAR
    change_ds_link_envir_pdt_params: [STATIC, READ, cls$pdt_parameters] array [1 .. 5] of
      clt$parameter_descriptor := [

{ DISPLAY_CHARGE_LINK_ATTRIBUTE DCLA }
    [[clc$optional_with_default, ^change_ds_link_envir_pdt_dv1], 1, 1, 1, 1, clc$value_range_not_allowed,
      [NIL, clc$boolean_value]],

{ DISPLAY_FAMILY_LINK_ATTRIBUTE DFLA }
    [[clc$optional_with_default, ^change_ds_link_envir_pdt_dv2], 1, 1, 1, 1, clc$value_range_not_allowed,
      [NIL, clc$boolean_value]],

{ DISPLAY_PROJECT_LINK_ATTRIBUTE DPLA }
    [[clc$optional_with_default, ^change_ds_link_envir_pdt_dv3], 1, 1, 1, 1, clc$value_range_not_allowed,
      [NIL, clc$boolean_value]],

{ DISPLAY_USER_LINK_ATTRIBUTE DULA }
    [[clc$optional_with_default, ^change_ds_link_envir_pdt_dv4], 1, 1, 1, 1, clc$value_range_not_allowed,
      [NIL, clc$boolean_value]],

{ STATUS }
    [[clc$optional], 1, 1, 1, 1, clc$value_range_not_allowed, [NIL, clc$variable_reference,
      clc$array_not_allowed, clc$status_value]]];

  VAR
    change_ds_link_envir_pdt_dv1: [STATIC, READ, cls$pdt_names_and_defaults] string (4) := 'TRUE';

  VAR
    change_ds_link_envir_pdt_dv2: [STATIC, READ, cls$pdt_names_and_defaults] string (4) := 'TRUE';

  VAR
    change_ds_link_envir_pdt_dv3: [STATIC, READ, cls$pdt_names_and_defaults] string (4) := 'TRUE';

  VAR
    change_ds_link_envir_pdt_dv4: [STATIC, READ, cls$pdt_names_and_defaults] string (4) := 'TRUE';

?? POP ??

    VAR
      attribute_value: clt$value,
      display_charge: boolean,
      display_family: boolean,
      display_project: boolean,
      display_user: boolean;

    status.normal := TRUE;

    IF NOT avp$configuration_administrator () THEN
      osp$set_status_abnormal ('OF', ofe$sou_not_active, 'configuration_administration', status);
      RETURN;
    IFEND;

    clp$scan_parameter_list (parameter_list, change_ds_link_envir_pdt, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    clp$get_value ('DISPLAY_CHARGE_LINK_ATTRIBUTE', 1, 1, clc$low, attribute_value, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    display_charge := attribute_value.bool.value;

    clp$get_value ('DISPLAY_FAMILY_LINK_ATTRIBUTE', 1, 1, clc$low, attribute_value, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    display_family := attribute_value.bool.value;

    clp$get_value ('DISPLAY_PROJECT_LINK_ATTRIBUTE', 1, 1, clc$low, attribute_value, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    display_project := attribute_value.bool.value;

    clp$get_value ('DISPLAY_USER_LINK_ATTRIBUTE', 1, 1, clc$low, attribute_value, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    display_user := attribute_value.bool.value;

    rhp$update_dual_state_environ (display_charge, display_family,
        display_project, display_user);

  PROCEND rhp$change_dual_state_environ;

MODEND rhm$change_dual_state_environ;
