MODULE dmm$display_file_tables;
?? RIGHT := 110 ??
?? PUSH (LISTEXT := ON) ??
*copyc osd$default_pragmats
*copyc dmp$get_disk_file_descriptor_p
*copyc dmp$get_fmd_by_index
*copyc dmp$get_fau_entry
*copyc dmt$disk_file_descriptor
*copyc dmt$file_medium_descriptor
*copyc gfp$get_fde_p
*copyc gft$file_desc_entry_p
*copyc gft$file_kind
*copyc gft$file_media
*copyc gft$table_residence
*copyc gft$queue_status
*copyc clp$put_partial_display
*copyc clp$put_display
*copyc clp$new_display_line
*copyc clp$new_display_page
*copyc mmp$get_sdtx_entry_p
*copyc pmp$find_executing_task_xcb
*copyc pmp$get_legible_date_time
*copyc cmv$logical_unit_table
*copyc dmv$active_volume_table
*copyc iot$disk_type_table
*copyc pmp$convert_binary_unique_name
*copyc oss$job_paged_literal
*copyc dmp$get_level_2_ptr

  VAR
    iov$disk_type_table: [XREF] array [1 .. ioc$disk_type_count] of iot$disk_type_table;

?? POP ??

  VAR
    file_kind: [STATIC, READ, oss$job_paged_literal] array [gft$file_kind] of string (32) :=
          ['gfc$fk_job_permanent_file', 'gfc$fk_device_file', 'gfc$fk_save_2', 'gfc$fk_save_3',
          'gfc$fk_catalog', 'gfc$fk_job_local_file', 'gfc$fk_unnamed_file', 'gfc$fk_global_unnamed',
          'gfc$fk_monitor_only_unnamed'],

    media: [STATIC, READ, oss$job_paged_literal] array [gft$file_media] of string (32) :=
          ['gfc$fm_transient_segment', 'gfc$fm_mass_storage_file', 'gfc$fm_served_file'],

    csr: [STATIC, READ, oss$job_paged_literal] array [gft$table_residence] of string (32) :=
          ['gfc$tr_null_residence', 'gfc$tr_system', 'gfc$tr_job', 'gfc$tr_system_wait_recovery'];


  PROCEDURE [XDCL, #GATE] dmp$display_file_tables
    (    path: string ( * );
         full_listing: boolean;
         p: ^cell;
     VAR display_control: clt$display_control;
     VAR status: ost$status);

?? EJECT ??

    PROCEDURE display_fde;

      VAR
        queue_status: [STATIC, READ, oss$job_paged_literal] array [gft$queue_status] of string (32) :=
              ['gfc$qs_global_shared', 'gfc$qs_job_shared', 'gfc$qs_job_working_set'],
        line: string (132),
        l: integer;

      clp$new_display_line (display_control, 1, status);
      STRINGREP (line, l, ' File Descriptor Entry ', path, ' Sfid ', sfid: #(16));
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$new_display_line (display_control, 1, status);

      clp$put_partial_display (display_control, ' job_lock = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, 'locked = ', p_fde^.monitor_lock.locked: #(16), ' lock_id = ',
            p_fde^.monitor_lock.id, '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' eoi_modified flag = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.flags.eoi_modified);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' wire_eoi_page flag = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.flags.wire_eoi_page);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' active_shadow_file flag = ', clc$no_trim, amc$start,
            status);
      STRINGREP (line, l, p_fde^.flags.active_shadow_file);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' global_file_name = ', clc$no_trim, amc$start, status);
      display_binary_unique_name (p_fde^.global_file_name);
      clp$put_partial_display (display_control, ' file_hash_thread = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.file_hash_thread);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' attached_in_write_count = ', clc$no_trim, amc$start,
            status);
      STRINGREP (line, l, p_fde^.attached_in_write_count);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' attach_count = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.attach_count);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' open_count = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.open_count);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' file_kind = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, file_kind [p_fde^.file_kind]);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' file_hash = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.file_hash);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' locked_for_read = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.segment_lock.locked_for_read: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' locked_for_write = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.segment_lock.locked_for_write: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' task_queue:  ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, ' head = ', p_fde^.segment_lock.task_queue.head: #(16), '(16) ', '  tail = ',
            p_fde^.segment_lock.task_queue.tail: #(16), '(16)');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' asti = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.asti: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' eoi_byte_address = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.eoi_byte_address: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' eoi_state = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.eoi_state);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' allocation_unit_size = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.allocation_unit_size);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' transfer_unit_size = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.transfer_unit_size);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' file_limit = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.file_limit: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' queue_status = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, queue_status [p_fde^.queue_status]);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' preset_value = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.preset_value: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' time_last_modified = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.time_last_modified: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' last_segment_number = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.last_segment_number: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' global_task_id:  ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, ' index = ', p_fde^.global_task_id.index: #(16), '(16) ', ' seqno = ',
            p_fde^.global_task_id.seqno: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' stack_for_ring = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fde^.stack_for_ring: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' media = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, media [p_fde^.media]);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      CASE p_fde^.media OF
      = gfc$fm_mass_storage_file =
        clp$put_partial_display (display_control, ' disk_file_descriptor_p = ', clc$no_trim, amc$start,
              status);
        STRINGREP (line, l, p_fde^.disk_file_descriptor_p: #(16), '(16) ');
        clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      = gfc$fm_served_file =
        clp$put_partial_display (display_control, ' served_file_descriptor_p = ', clc$no_trim, amc$start,
              status);
        STRINGREP (line, l, p_fde^.served_file_descriptor_p: #(16), '(16) ');
        clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      ELSE
      CASEND;

    PROCEND display_fde;
?? EJECT ??

    PROCEDURE display_fmd;

      VAR
        allocation_style: [STATIC, READ, oss$job_paged_literal] array [dmt$allocation_styles] of
              string (10) := ['dmc$a0', 'dmc$a1', 'dmc$a2', 'dmc$a3', 'dmc$a4', 'dmc$a5', 'dmc$a6', 'dmc$a7',
              'dmc$a8', 'dmc$acyl'],
        l: integer,
        line: string (132);

      clp$new_display_line (display_control, 1, status);
      STRINGREP (line, l, ' File Medium Descriptor ', path, ' Sfid ', sfid: #(16));
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$new_display_line (display_control, 1, status);

      clp$put_partial_display (display_control, ' system_file_id = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.system_file_id.file_entry_index: #(16), '(16) ',
            p_fmd^.system_file_id.residence: #(16), '(16) ', p_fmd^.system_file_id.file_hash: #(16), '(16) ',
            ' ( ', csr [p_fmd^.system_file_id.residence], ' ) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' avt_index = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.avt_index);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' device_file_list_index = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.dfl_index);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' delete_logging_count = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.delete_logging_count);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' volume assigned = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.volume_assigned);
      clp$put_partial_display (display_control, '', clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' fmd_allocated_length = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.fmd_allocated_length: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' bytes_per_mau = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.bytes_per_mau: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' daus_per_cylinder = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.daus_per_cylinder: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' daus_per_allocation_unit = ', clc$no_trim, amc$start,
            status);
      STRINGREP (line, l, p_fmd^.daus_per_allocation_unit: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' internal_vsn = ', clc$no_trim, amc$start, status);
      display_binary_unique_name (p_fmd^.internal_vsn);
      clp$put_partial_display (display_control, ' maus_per_dau = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.maus_per_dau: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' maus_per_transfer_unit = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.maus_per_transfer_unit: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' p_next_fmd = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fmd^.p_next_fmd);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$put_partial_display (display_control, ' allocation_style = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, allocation_style [p_fmd^.allocation_style]);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      logical_unit := dmv$active_volume_table.table_p^ [p_fmd^.avt_index].logical_unit_number;

    PROCEND display_fmd;
?? EJECT ??

    PROCEDURE display_fau_entry;

      VAR
        index,
        cylinder,
        track,
        sector,
        sector_offset_within_cylinder,
        mau,
        maus_per_position: integer,
        line: string (132),
        fau_sts: [STATIC, READ, oss$job_paged_literal] array [dmt$fau_states] of string (32) :=
              ['dmc$fau_free', 'dmc$fau_invalid_data', 'dmc$fau_invalid_and_flawed', 'dmc$fau_initialized',
              'dmc$fau_initialized_and_flawed', 'dmc$fau_initialization_in_prog'],
        l: integer;

      IF p_fau_entry^.state = dmc$fau_free THEN
        RETURN; {----->
      IFEND;

      clp$put_partial_display (display_control, ' address = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_fau_entry^.dau_address);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$continue, status);
      clp$put_partial_display (display_control, ' state = ', clc$no_trim, amc$continue, status);
      clp$put_partial_display (display_control, fau_sts [p_fau_entry^.state], clc$trim, amc$continue, status);
      clp$put_partial_display (display_control, ' fmd = ', clc$no_trim, amc$continue, status);
      STRINGREP (line, l, p_fau_entry^.fmd_index);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$continue, status);
      clp$put_partial_display (display_control, ' offset = ', clc$no_trim, amc$continue, status);
      STRINGREP (line, l, (level_1_index * p_dfd^.bytes_per_level_2) +
            (level_2_index * p_dfd^.bytes_per_allocation): #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$continue, status);

      mau := p_fau_entry^.dau_address * p_fmd^.maus_per_dau;
      maus_per_position := p_fmd^.daus_per_cylinder * p_fmd^.maus_per_dau;

      index := cmv$logical_unit_table^ [logical_unit].unit_interface_table^.unit_type - 100(16) + 1;
      cylinder := mau DIV maus_per_position;
      sector_offset_within_cylinder := (mau - (cylinder * maus_per_position)) *
            iov$disk_type_table [index].sectors_per_mau;

      track := sector_offset_within_cylinder DIV iov$disk_type_table [index].sectors_per_track;
      sector := sector_offset_within_cylinder - (track * iov$disk_type_table [index].sectors_per_track);

{Check for errors in disk address.

      IF sector >= iov$disk_type_table [index].sectors_per_track THEN
        sector := -1;
      IFEND;
      IF track >= iov$disk_type_table [index].tracks_per_cylinder THEN
        track := -1;
      IFEND;
      IF cylinder >= iov$disk_type_table [index].cylinders_per_unit THEN
        cylinder := -1;
      IFEND;

      STRINGREP (line, l, ' C = ', cylinder, ' T = ', track, ' S = ', sector);

      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);


    PROCEND display_fau_entry;
?? EJECT ??

    PROCEDURE display_dfd;

      VAR
        line: string (132),
        l: integer;

      clp$new_display_line (display_control, 1, status);
      STRINGREP (line, l, ' Disk File Descriptor ', path, ' Sfid ', sfid: #(16));
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
      clp$new_display_line (display_control, 1, status);

      clp$put_partial_display (display_control, ' read_write_count = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.read_write_count);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' delete_count = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.delete_count);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' purged = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.purged);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' restricted_attach = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.restricted_attach);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' bytes_per_allocation = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.bytes_per_allocation: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' file_allocation_table = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.file_allocation_table);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' fat_upper_bound = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.fat_upper_bound);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' current_fmd_index = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.current_fmd_index);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' highest_offset_allocated = ', clc$no_trim, amc$start,
            status);
      STRINGREP (line, l, p_dfd^.highest_offset_allocated: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' bytes_per_level_2 = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.bytes_per_level_2: #(16), '(16) ');
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' file_damaged = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.file_damaged);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' damaged_detection_enabled = ', clc$no_trim, amc$start,
            status);
      STRINGREP (line, l, p_dfd^.damaged_detection_enabled);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' dfd_modified = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.dfd_modified);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' overflow_allowed = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.overflow_allowed);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' requested_allocation_size = ', clc$no_trim, amc$start,
            status);
      STRINGREP (line, l, p_dfd^.requested_allocation_size);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' requested_class = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.requested_class);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' requested_class_ordinal = ', clc$no_trim, amc$start,
            status);
      STRINGREP (line, l, p_dfd^.requested_class_ordinal);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' requested_transfer_size = ', clc$no_trim, amc$start,
            status);
      STRINGREP (line, l, p_dfd^.requested_transfer_size);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' requested_volume = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.requested_volume.recorded_vsn, p_dfd^.requested_volume.setname);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' number_of_fmds = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.number_of_fmds);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' p_fmd = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.p_fmd);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);

      clp$put_partial_display (display_control, ' fmd_modified = ', clc$no_trim, amc$start, status);
      STRINGREP (line, l, p_dfd^.fmd_modified);
      clp$put_partial_display (display_control, line (1, l), clc$trim, amc$terminate, status);
    PROCEND display_dfd;
?? EJECT ??

    PROCEDURE display_binary_unique_name
      (    binary_unique_name: ost$binary_unique_name);

      VAR
        status: ost$status,
        unique_name: ost$name;

      pmp$convert_binary_unique_name (binary_unique_name, unique_name, status);
      IF NOT status.normal THEN
        RETURN; {----->
      IFEND;

      clp$put_partial_display (display_control, unique_name, clc$trim, amc$terminate, status);
      IF NOT status.normal THEN
        RETURN; {----->
      IFEND;

    PROCEND display_binary_unique_name;
?? EJECT ??

    VAR
      dau_discontinuities: integer,
      dau_discontinuities_percentage: real,
      dau_total: integer,
      daus_per_allocation_unit: dmt$daus_per_allocation,
      fmd_number: dmt$fmd_index,
      illegal_mainframe_job_file: boolean,
      level_1_index: dmt$level_1_index,
      level_2_index: dmt$level_2_index,
      line: string (132),
      line_length: integer,
      logical_unit: iot$logical_unit,
      number_of_bytes_to_allocate: amt$file_byte_address,
      number_of_fmds: dmt$fmd_index,
      p_dfd: ^dmt$disk_file_descriptor,
      p_fau_entry: ^dmt$file_allocation_unit,
      p_fde: gft$file_desc_entry_p,
      p_fmd: ^dmt$file_medium_descriptor,
      p_level_2: ^dmt$level_2_table,
      previous_dau: dmt$dau_address,
      sdtxe_p: ^mmt$segment_descriptor_extended,
      sfid: 0 .. 0ffffffff(16),
      str: string (132),
      system_file_id: gft$system_file_identifier,
      xcb_p: ^ost$execution_control_block;

    clp$new_display_page (display_control, status);

    pmp$find_executing_task_xcb (xcb_p);
    sdtxe_p := mmp$get_sdtx_entry_p (xcb_p, #SEGMENT (p));
    system_file_id := sdtxe_p^.sfid;

    #UNCHECKED_CONVERSION (system_file_id, sfid);

    gfp$get_fde_p (system_file_id, p_fde);
    display_fde;

    dmp$get_disk_file_descriptor_p (p_fde, p_dfd);
    IF p_dfd <> NIL THEN
      display_dfd;
      number_of_fmds := p_dfd^.number_of_fmds;
      FOR fmd_number := 1 TO number_of_fmds DO
        dmp$get_fmd_by_index (p_dfd, fmd_number, p_fmd);
        IF (p_fmd <> NIL) AND (p_fmd^.in_use) THEN
          IF fmd_number = 1 THEN
            daus_per_allocation_unit := p_fmd^.daus_per_allocation_unit;
          IFEND;
          display_fmd;
        IFEND;
      FOREND;
      IF full_listing THEN
        clp$new_display_line (display_control, 1, status);
        clp$put_partial_display (display_control, ' File Allocation Units', clc$trim, amc$terminate, status);
        clp$new_display_line (display_control, 1, status);
      IFEND;
      dau_total := 0;
      dau_discontinuities := 0;
      IF p_dfd^.file_allocation_table <> NIL THEN
        FOR level_1_index := 0 TO p_dfd^.fat_upper_bound DO
          dmp$get_level_2_ptr (^p_dfd^.file_allocation_table^ [level_1_index], p_level_2);
          IF p_level_2 <> NIL THEN
            FOR level_2_index := 0 TO (p_dfd^.bytes_per_level_2 DIV p_dfd^.bytes_per_allocation - 1) DO
              p_fau_entry := ^p_level_2^ [level_2_index];
              IF p_fau_entry^.state <> dmc$fau_free THEN
                dau_total := dau_total + 1;
              IFEND;
              IF (level_2_index > 0) AND (p_fau_entry^.state <> dmc$fau_free) AND
                    (p_fau_entry^.dau_address <> (previous_dau + daus_per_allocation_unit)) THEN
                dau_discontinuities := dau_discontinuities + 1;
              IFEND;
              previous_dau := p_fau_entry^.dau_address;
              IF full_listing THEN
                display_fau_entry;
              IFEND;
            FOREND;
          IFEND;
        FOREND;
      IFEND;

      clp$new_display_line (display_control, 1, status);
      clp$put_partial_display (display_control, ' Fragmentation Statistics', clc$trim, amc$terminate, status);
      clp$new_display_line (display_control, 1, status);
      STRINGREP (line, line_length, '   Allocation Unit (DAU) Total = ', dau_total);
      clp$put_partial_display (display_control, line (1, line_length), clc$trim, amc$terminate, status);
      STRINGREP (line, line_length, '   Allocation Unit (DAU) Discontinuities = ', dau_discontinuities);
      clp$put_partial_display (display_control, line (1, line_length), clc$trim, amc$terminate, status);
      dau_discontinuities_percentage := $REAL (dau_discontinuities * 100) / $REAL (dau_total);
      STRINGREP (line, line_length, '   Percentage of Discontinuities = ',
            dau_discontinuities_percentage: 6: 1, '%');
      clp$put_partial_display (display_control, line (1, line_length), clc$trim, amc$terminate, status);
    IFEND;
  PROCEND dmp$display_file_tables;
MODEND dmm$display_file_tables



