?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE SCL interpreter: job management commands' ??
MODULE clm$job_management_commands;

{ PURPOSE:
{   This module contains the SCL command processors for the NOS/VE operator
{ job management commands.

?? NEWTITLE := 'Global Declarations Referenced by this Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc amt$local_file_name
*copyc clt$file_reference
*copyc jme$queued_file_conditions
*copyc jmt$system_supplied_name
*copyc ost$status
?? POP ??
*copyc clp$get_value
*copyc clp$scan_parameter_list
*copyc cmp$check_lcu_lock_set
*copyc jmp$change_dispatching_priority
*copyc jmp$convert_string_to_disp_pr
*copyc jmp$system_job
*copyc osp$generate_message
*copyc osp$idle_resume_system_job
*copyc osp$set_status_abnormal
*copyc osp$terminate_system
?? TITLE := 'clp$change_priority_command', EJECT ??

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

{    PDT change_priority_pdt (
{      job_name, jn : NAME = $REQUIRED
{      dispatching_priority, dp : KEY default, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 = ..
{            default
{      STATUS)

?? PUSH (LISTEXT := ON) ??

  VAR
    change_priority_pdt: [STATIC, READ, cls$pdt] clt$parameter_descriptor_table := [^change_priority_pdt_names
  , ^change_priority_pdt_params];

  VAR
    change_priority_pdt_names: [STATIC, READ, cls$pdt_names_and_defaults] array [1 .. 5] of
  clt$parameter_name_descriptor := [['JOB_NAME', 1], ['JN', 1], ['DISPATCHING_PRIORITY', 2], ['DP', 2], [
  'STATUS', 3]];

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

{ JOB_NAME JN }
    [[clc$required], 1, 1, 1, 1, clc$value_range_not_allowed, [NIL, clc$name_value, 1, osc$max_name_size]],

{ DISPATCHING_PRIORITY DP }
    [[clc$optional_with_default, ^change_priority_pdt_dv2], 1, 1, 1, 1, clc$value_range_not_allowed, [^
  change_priority_pdt_kv2, clc$keyword_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_priority_pdt_kv2: [STATIC, READ, cls$pdt_names_and_defaults] array [1 .. 11] of ost$name := [
  'DEFAULT','P1','P2','P3','P4','P5','P6','P7','P8','P9','P10'];

  VAR
    change_priority_pdt_dv2: [STATIC, READ, cls$pdt_names_and_defaults] string (7) := 'default';

?? POP ??

    VAR
      value: clt$value,
      job_name: clt$value,
      supplied: boolean,
      dispatching_priority: jmt$dispatching_priority;

    status.normal := TRUE;

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

    clp$get_value ('JOB_NAME', 1, 1, clc$low, job_name, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    clp$get_value ('DISPATCHING_PRIORITY', 1, 1, clc$low, value, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    jmp$convert_string_to_disp_pr (value.name.value, dispatching_priority, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    jmp$change_dispatching_priority (job_name, dispatching_priority, status);

  PROCEND clp$change_priority_command;
?? TITLE := 'clp$terminate_system_command', EJECT ??

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

{   PDT terminate_system_cmd_pdt (
{     status)

?? PUSH (LISTEXT := ON) ??

    VAR
      terminate_system_cmd_pdt: [STATIC, READ, cls$pdt] clt$parameter_descriptor_table :=
            [^terminate_system_cmd_pdt_names, ^terminate_system_cmd_pdt_params];

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

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

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

?? POP ??


    status.normal := TRUE;
    clp$scan_parameter_list (parameter_list, terminate_system_cmd_pdt, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

{ Verify that the LCU lock is not set before terminating the system.

    cmp$check_lcu_lock_set (status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    osp$terminate_system (status);

  PROCEND clp$terminate_system_command;
MODEND clm$job_management_commands;
