?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE File Server : VED FS Display', EJECT ??
MODULE dfm$operator_displays;

{   PURPOSE:
{     This module contains procedures that drive the file server displays.
{     This provides common interfaces for displaying both to the operator
{     console and to a file.
{   NOTE:
{
{ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{     Test Tool decks TTM#CHECK_FILE_SERVER_STATE and TTM$UNDO_SERVER are VERY
{     dependent upon the format of the generated display. Any change to this
{     deck may cause one or more of the DF System Tests to fail. BEFORE
{     TRANSMITTING ANY CHANGE TO THIS DECK, RUN ALL OF THE DF SYSTEM TESTS !
{ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc dfi$display
*copyc dft$display_identifier
*copyc ofd$type_definition
*copyc ofe$error_codes
*copyc oss$job_paged_literal
*copyc oss$task_private
*copyc ost$status
*copyc ost$string
*copyc pmt$condition
*copyc pmt$condition_information
?? POP ??
*copyc clp$close_display
*copyc clp$convert_integer_to_string
*copyc clp$new_display_page
*copyc clp$put_display
*copyc dfp$display_client_mainframes
*copyc dfp$display_queues
*copyc dfp$display_served_family_table
*copyc dfv$file_server_debug_enabled
*copyc dpp$clear_window
*copyc dpp$put_next_line
*copyc ofp$build_system_line
*copyc ofp$open_display
*copyc osp$disestablish_cond_handler
*copyc osp$establish_condition_handler
*copyc osp$get_cause_of_idle
*copyc pmp$continue_to_cause

?? OLDTITLE ??
?? NEWTITLE := '[XDCL] dfp$file_server_display ', EJECT ??

  PROCEDURE [XDCL] dfp$file_server_display
    (    wid: dpt$window_id;
         display_name: ost$name;
         file_name: amt$local_file_name;
         initial_call: boolean;
     VAR status: ost$status);

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

{ PURPOSE:
{   This procedure provides clean-up processing when a task abort occurs.

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

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

    PROCEND abort_handler;

?? OLDTITLE, EJECT ??

    VAR
      display_identifier: dft$display_identifier,
      idle_code: syt$180_idle_code,
      display_line: string (80),
      ignore_status: ost$status,
      message_written: boolean,
      nothing_to_display: [READ, oss$job_paged_literal] string (56) :=
            '                        *** No File Server Defined. ***',
      title: [READ, oss$job_paged_literal] string (19) :=
            'File Server Display';

    status.normal := TRUE;
    message_written := FALSE;
    IF wid = 0 THEN
      osp$establish_condition_handler (^abort_handler, TRUE);
      display_identifier.display_type := dfc$listing_display;
    ELSE
      display_identifier.display_type := dfc$console_display;
      display_identifier.wid := wid;
    IFEND;

    IF initial_call THEN
      ofp$open_display (file_name, wid, dpc$wc_sharing, dpc$wk_table, title,
          display_identifier.display_control, status);
      IF NOT status.normal THEN
        RETURN;
      IFEND;
    IFEND;

    IF wid <> 0 THEN
      dpp$clear_window (wid, status);
    IFEND;
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    dfp$display_queues (display_identifier, message_written, ignore_status);

    IF message_written THEN
      dfp$display (' ', display_identifier, status);
    IFEND;

    dfp$display_served_family_table (display_identifier, message_written, ignore_status);

    IF message_written THEN
      dfp$display (' ', display_identifier, status);
    IFEND;

    IF dfv$file_server_debug_enabled THEN
      osp$get_cause_of_idle (idle_code);
      IF (idle_code = syc$ic_system_terminated) THEN
        dfp$display (' ', display_identifier, status);
        dfp$display (' CLIENT MAINFRAME DISPLAY DISABLED DURING TERMINATE_SYSTEM ',
            display_identifier, status);
      ELSE
        dfp$display_client_mainframes (display_identifier, message_written, ignore_status);
      IFEND;
    IFEND;

    IF NOT message_written THEN
      dfp$display (' ', display_identifier, status);
      dfp$display (nothing_to_display, display_identifier, status);
    IFEND;

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

  PROCEND dfp$file_server_display;
?? TITLE := '[XDCL] dfp$display ', EJECT ??

  PROCEDURE [XDCL] dfp$display
    (    s: string ( * <= 125);
     VAR display_identifier: dft$display_identifier;
     VAR status: ost$status);

    status.normal := TRUE;
    CASE display_identifier.display_type OF
    = dfc$console_display =
      dpp$put_next_line (display_identifier.wid, s, status);
    = dfc$listing_display =
      clp$put_display (display_identifier.display_control, s, clc$trim, status);
    = dfc$trace_display =
      display (s);
    ELSE
    CASEND;

  PROCEND dfp$display;
?? OLDTITLE ??
?? OLDTITLE ??
MODEND dfm$operator_displays;
