PROC activate_network_log, actnl (
  groups, group, g        : list 1..16, 1..2 of any = ((CATENET,1))
  maximum_connections, mc : integer 1..1000 = 1000
  maximum_log_cycles, mlc : integer 2..999 = 999
  maximum_log_size, mls   : integer or key none = none
  interval, i             : integer 1..1440 or key none = none
  status                  : var of status = $optional
  )

  create_variable nav$status kind=status
  create_variable nav$ignore_status kind=status
  create_variable nav$parameter_list kind=string

actnl_block: ..
  BLOCK

    EXIT actnl_block WHEN NOT nav$status.normal

    nav$parameter_list = 'group=('

    FOR set_count = 1 TO $set_count(group) DO
      nav$parameter_list = nav$parameter_list // '('
      FOR nav$value_count = 1 TO $value_count(group, set_count) DO
        nav$parameter_list = nav$parameter_list // $strrep($value(group, set_count, nav$value_count))
        IF (nav$value_count = $value_count(group, set_count)) AND (set_count = $set_count(group)) THEN
          nav$parameter_list = nav$parameter_list // ')'
        ELSEIF (nav$value_count = $value_count(group, set_count)) AND (set_count < $set_count(group)) THEN
          nav$parameter_list = nav$parameter_list // ') '
        ELSE
          nav$parameter_list = nav$parameter_list // ','
        IFEND
      FOREND
    FOREND

    nav$parameter_list = nav$parameter_list // ') '
    nav$parameter_list = nav$parameter_list // 'maximum_connections=' // $strrep(..
          $value(maximum_connections)) // ' '
    nav$parameter_list = nav$parameter_list // 'maximum_log_cycles=' // $strrep(..
          $value(maximum_log_cycles)) // ' '
    nav$parameter_list = nav$parameter_list // 'maximum_log_size=' // $strrep($value(maximum_log_size)) //..
           ' '
    nav$parameter_list = nav$parameter_list // 'interval=' // $strrep($value(interval))

    delete_system_task name=network_log status=nav$status
    IF NOT nav$status.normal AND ($condition(nav$status.condition) <> 'OSE$SYSTEM_TASK_NOT_DEFINED') THEN
      EXIT actnl_block
    ELSE
      nav$status.normal = true
    IFEND

    FOR set_count = 1 TO $set_count(groups) DO
      value_kind = $value_kind(groups, set_count, 1)
      IF value_kind <> 'NAME' THEN
        nav$status = $status(false, 'NA', nae$invalid_log_group_name, $strrep($value(groups, set_count, 1)))
        EXIT actnl_block
      IFEND
      value_kind = $value_kind(groups, set_count, 2)
      IF value_kind = 'INTEGER' THEN
        priority = $value(groups, set_count, 2)
        IF (priority > 255) OR (priority < 1) THEN
          nav$status = $status(false, 'NA', nae$invalid_log_group_priority, $strrep(priority))
        IFEND
      ELSEIF value_kind = 'UNKNOWN' THEN
        priority = 1
      ELSE
        nav$status = $status(false, 'NA', nae$invalid_log_group_priority, value)
      IFEND
      EXIT actnl_block WHEN NOT nav$status.normal
    FOREND

    define_system_task name=network_log l=$system.osf$operator_library_46d m=nam$bound_log_manager ..
          p=nav$parameter_list automatic_restart=false deactivate_task_option=terminate ..
          idle_task_option=terminate restart_after_idle=true lm=$null lmo=none tel=warning status=nav$status
    EXIT actnl_block WHEN NOT nav$status.normal

    activate_system_task network_log status=nav$status

  BLOCKEND actnl_block

  IF nav$status.normal THEN
    display_value 'Network log activated.' o=$response
  IFEND

  EXIT_PROC WITH nav$status WHEN NOT nav$status.normal

PROCEND activate_network_log
