MODULE ofm$queue_files_display;
?? RIGHT := 110 ??

{ Purpose: VED QF

?? NEWTITLE := 'Global Declarations Referenced By This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc oss$job_paged_literal
*copyc oss$task_shared
*copyc ost$halfword
*copyc ost$status
?? POP ??
*copyc clp$close_display
*copyc clp$put_display
*copyc dpp$clear_window
*copyc dpp$put_next_line
*copyc jmp$get_job_counts
*copyc jmp$get_output_counts
*copyc jmp$get_qfile_counts
*copyc ofp$build_system_line
*copyc ofp$open_display
*copyc osp$disestablish_cond_handler
*copyc osp$establish_block_exit_hndlr
*copyc jmv$job_class_table_p
*copyc jmv$max_service_class_in_use
*copyc jmv$maximum_job_class_in_use
*copyc jmv$service_classes
*copyc osv$task_shared_heap
?? OLDTITLE ??
?? NEWTITLE := '[xdcl, #gate] OFP$QUEUE_FILES_DISPLAY', EJECT ??

  PROCEDURE [XDCL, #GATE] ofp$queue_files_display
    (    wid: dpt$window_id;
         display_name: ost$name;
         file_name: amt$local_file_name;
         initial_call: boolean;
     VAR status: ost$status);

    VAR
      v$general_title: [READ, oss$job_paged_literal] string (18) := 'Queue File Display',
      v$job_class_title: [READ, oss$job_paged_literal] string (78) :=
            ' Job Class Name               Queued     Initiated       Swapped     Completed',
      v$qfile_title: [READ, oss$job_paged_literal] string (78) :=
            ' Queue Name           Deferred      Queued   Initiated  Terminated   Completed',
      v$service_class_title: [READ, oss$job_paged_literal] string (75) :=
            ' Service Class Name                      Active     Initiated       Swapped',
      v$title_line: [READ, oss$job_paged_literal] string (78) :=
            ' -----------------------------------------------------------------------------';

    VAR
      v$previous_data_for_display: [STATIC, oss$task_shared] boolean := FALSE,
      v$system_line_info: [STATIC, oss$task_shared] ^oft$system_line_info := NIL;

    VAR
      display_control: clt$display_control,
      j: integer,
      job_class: jmt$job_class,
      job_counts: jmt$job_counts,
      output_counts: jmt$output_counts,
      qfile_counts: jmt$qfile_counts,
      service_class: jmt$service_class_index,
      str: string (80),
      total_job_class_count: jmt$job_class_count,
      total_service_class_count: jmt$service_class_count;

?? NEWTITLE := 'p$abort_handler', EJECT ??

    PROCEDURE p$abort_handler
      (    condition: pmt$condition;
           condition_information: ^pmt$condition_information;
           save_area: ^ost$stack_frame_save_area;
       VAR handler_status: ost$status);

      VAR
        ignore_status: ost$status;

      IF wid = 0 THEN
        clp$close_display (display_control, ignore_status);
      IFEND;

    PROCEND p$abort_handler;
?? OLDTITLE ??
?? NEWTITLE := '[inline] p$put_line', EJECT ??

    PROCEDURE [INLINE] p$put_line
      (    str: string ( * <= 80));

      VAR
        status: ost$status;

      IF wid <> 0 THEN
        dpp$put_next_line (wid, str, status);
      ELSE
        clp$put_display (display_control, str, clc$trim, status);
      IFEND;

    PROCEND p$put_line;
?? OLDTITLE ??
?? EJECT ??

    status.normal := TRUE;
    IF wid = 0 THEN
      osp$establish_block_exit_hndlr (^p$abort_handler);
    IFEND;
    IF initial_call THEN
      ofp$open_display (file_name, wid, dpc$wc_sharing, dpc$wk_table, v$general_title, display_control,
            status);
      IF NOT status.normal THEN
        RETURN; {----->
      IFEND;
    IFEND;

{ Establish base values for the display if they do not already exist.
    IF NOT v$previous_data_for_display THEN
      ALLOCATE v$system_line_info IN osv$task_shared_heap^;
      v$system_line_info^.initialized := FALSE;
      v$previous_data_for_display := TRUE;
    IFEND;

    ofp$build_system_line (v$system_line_info^, str);
    IF wid <> 0 THEN
      dpp$clear_window (wid, status);
    IFEND;

    jmp$get_job_counts (job_counts, status);
    jmp$get_output_counts (output_counts, status);
    jmp$get_qfile_counts (qfile_counts, status);

    p$put_line (str);
    p$put_line (' ');

{General Job Counts:
    p$put_line ('Job Counts:');
    STRINGREP (str, j, ' Initiated  : ', job_counts.initiated_jobs: 6, '     ', ' Queued     : ',
          job_counts.queued_jobs: 6);
    p$put_line (str (1, j));
    STRINGREP (str, j, ' Interactive: ', job_counts.interactive_jobs: 6, '     ', ' Batch      : ',
          job_counts.initiated_jobs - job_counts.interactive_jobs: 6);
    p$put_line (str (1, j));

{Job Class Counts:
    p$put_line (' ');
    p$put_line (v$job_class_title);
    p$put_line (v$title_line);

    total_job_class_count.queued_jobs := 0;
    total_job_class_count.initiated_jobs := 0;
    total_job_class_count.swapped_jobs := 0;
    total_job_class_count.completed_jobs := 0;

    FOR job_class := jmc$system_job_class TO jmv$maximum_job_class_in_use DO
      IF jmv$job_class_table_p^ [job_class].defined THEN
        total_job_class_count.queued_jobs := total_job_class_count.queued_jobs + job_counts.
              job_class_counts [job_class].queued_jobs;
        total_job_class_count.initiated_jobs := total_job_class_count.initiated_jobs +
              job_counts.job_class_counts [job_class].initiated_jobs;
        total_job_class_count.swapped_jobs := total_job_class_count.swapped_jobs +
              job_counts.job_class_counts [job_class].swapped_jobs;
        total_job_class_count.completed_jobs := total_job_class_count.completed_jobs +
              job_counts.job_class_counts [job_class].completed_jobs;

        STRINGREP (str, j, ' ', jmv$job_class_table_p^ [job_class].name (1, 20),
              ': ', job_counts.job_class_counts [job_class].queued_jobs: 13, ' ',
              job_counts.job_class_counts [job_class].initiated_jobs: 13, ' ', job_counts.
              job_class_counts [job_class].swapped_jobs: 13, ' ',
              job_counts.job_class_counts [job_class].completed_jobs: 13);
        p$put_line (str (1, j));
      IFEND;
    FOREND;
    p$put_line (v$title_line);
    STRINGREP (str, j, ' Total': 21, ': ', total_job_class_count.queued_jobs: 13, ' ',
          total_job_class_count.initiated_jobs: 13, ' ', total_job_class_count.swapped_jobs: 13, ' ',
          total_job_class_count.completed_jobs: 13);
    p$put_line (str (1, j));

{Service Class Counts:
    p$put_line (' ');
    p$put_line (v$service_class_title);
    p$put_line (v$title_line (1, STRLENGTH (v$service_class_title)));

    total_service_class_count.scheduler_initiated_jobs := 0;
    total_service_class_count.swapped_jobs := 0;

    FOR service_class := jmc$system_service_class TO jmv$max_service_class_in_use DO
      IF (jmv$service_classes [service_class] <> NIL) AND (jmv$service_classes [service_class]^.attributes.
            defined) THEN
        total_service_class_count.scheduler_initiated_jobs :=
              total_service_class_count.scheduler_initiated_jobs + job_counts.
              service_class_counts [service_class].scheduler_initiated_jobs;
        total_service_class_count.swapped_jobs := total_service_class_count.swapped_jobs +
              job_counts.service_class_counts [service_class].swapped_jobs;

        STRINGREP (str, j, ' ', jmv$service_classes [service_class]^.attributes.name (1, 31),
              ': ', job_counts.service_class_counts [service_class].scheduler_initiated_jobs -
              job_counts.service_class_counts [service_class].swapped_jobs: 13, ' ',
              job_counts.service_class_counts [service_class].scheduler_initiated_jobs: 13, ' ',
              job_counts.service_class_counts [service_class].swapped_jobs: 13);
        p$put_line (str (1, j));
      IFEND;
    FOREND;
    p$put_line (v$title_line (1, STRLENGTH (v$service_class_title)));
    STRINGREP (str, j, ' Total': 32, ': ', total_service_class_count.scheduler_initiated_jobs -
          total_service_class_count.swapped_jobs: 13, ' ', total_service_class_count.
          scheduler_initiated_jobs: 13, ' ', total_service_class_count.swapped_jobs: 13);
    p$put_line (str (1, j));

{Output Queue Counts
    p$put_line (' ');
    p$put_line (v$qfile_title);
    p$put_line (v$title_line);
    STRINGREP (str, j, ' Output Queue': 17, ': ', output_counts.state_data [jmc$deferred_output]: 11, ' ',
          output_counts.state_data [jmc$queued_output]: 11, ' ', output_counts.
          state_data [jmc$initiated_output]: 11, ' ', output_counts.state_data [jmc$terminated_output]: 11,
          ' ', output_counts.state_data [jmc$completed_output]: 11);
    p$put_line (str (1, j));

{Generic Queue Counts
    STRINGREP (str, j, ' Generic Queue': 17, ': ', qfile_counts.state_data [jmc$deferred_qfile]: 11, ' ',
          qfile_counts.state_data [jmc$queued_qfile]: 11, ' ',
          qfile_counts.state_data [jmc$initiated_qfile]: 11, ' ', qfile_counts.
          state_data [jmc$terminated_qfile]: 11, ' ', qfile_counts.state_data [jmc$completed_qfile]: 11);
    p$put_line (str (1, j));

    IF wid = 0 THEN
      clp$close_display (display_control, status);
      osp$disestablish_cond_handler;
    IFEND;

  PROCEND ofp$queue_files_display;
?? OLDTITLE ??
MODEND ofm$queue_files_display;

