MODULE nam$debug_network_pp;
?? RIGHT := 110 ??
?? PUSH (LISTEXT := ON) ??
*copyc clp$get_value
*copyc clp$scan_parameter_list
*copyc clp$test_parameter
*copyc jme$queued_file_conditions
*copyc jmp$system_job
*copyc nap$send_debug_mode_to_pp
*copyc nlv$configured_network_devices
*copyc nlp$get_nonexclusive_access
*copyc nlp$release_nonexclusive_access
*copyc nlt$network_device_list
*copyc osp$set_status_abnormal
*copyc osp$status_condition_code
?? POP ??
?? NEWTITLE := 'NAM$DEBUG_NETWORK_PP' ??

?? TITLE := '  NAP$DEBUG_NETWORK_PP', EJECT ??

  PROCEDURE [XDCL, #GATE] nap$debug_network_pp
    (    program_parameters: clt$parameter_list;
     VAR status: ost$status);

{ PDT debug_network_pp_pdt (
{   debug_mode: boolean = false
{   status)

?? PUSH (LISTEXT := ON) ??

    VAR
      debug_network_pp_pdt: [STATIC, READ, cls$pdt] clt$parameter_descriptor_table :=
            [^debug_network_pp_pdt_names, ^debug_network_pp_pdt_params];

    VAR
      debug_network_pp_pdt_names: [STATIC, READ, cls$pdt_names_and_defaults] array [1 .. 2] of
            clt$parameter_name_descriptor := [['DEBUG_MODE', 1], ['STATUS', 2]];

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

{ DEBUG_MODE }
      [[clc$optional], 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]]];

?? POP ??

    CONST
      nac$debug_mode_on = 0,
      nac$debug_mode_off = 1;

    VAR
      debug_mode: nac$debug_mode_on .. nac$debug_mode_off,
      i: integer,
      network_device_list: ^nlt$network_device_list,
      parameter_specified: boolean,
      value: clt$value;

    status.normal := TRUE;
    debug_mode := nac$debug_mode_off;

    IF NOT jmp$system_job () THEN
      osp$set_status_abnormal ('JM', jme$must_be_system_job, 'nap$debug_network_pp', status);
      RETURN;
    IFEND;

    clp$scan_parameter_list (program_parameters, debug_network_pp_pdt, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    clp$test_parameter ('DEBUG_MODE', parameter_specified, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    IF parameter_specified THEN
      clp$get_value ('DEBUG_MODE', 1, 1, clc$low, value, status);
      IF NOT status.normal THEN
        RETURN;
      IFEND;
      IF value.bool.value THEN
        debug_mode := nac$debug_mode_on;
      IFEND;
    IFEND;
    nlp$get_nonexclusive_access (nlv$configured_network_devices.access_control);
    network_device_list := nlv$configured_network_devices.network_device_list;
    FOR i := LOWERBOUND (network_device_list^) TO UPPERBOUND (network_device_list^) DO
      IF (network_device_list^[i].path_status <> nlc$path_down) AND
            (network_device_list^[i].state = nlc$normal) THEN
        nap$send_debug_mode_to_pp (network_device_list^[i].pp_number, debug_mode);
      IFEND;
    FOREND;
    nlp$release_nonexclusive_access (nlv$configured_network_devices.access_control);

  PROCEND nap$debug_network_pp;

MODEND nam$debug_network_pp;
