?? LEFT := 1, RIGHT := 110 ??
*copy osd$default_pragmats
MODULE bam$display_tape_tables;

{ This module provides the command DISPLAY_TAPE_TABLES.  This command simply establishes
{ pointers to the tables used by BAM$TAPE_BLOCK_MANAGER_RING3, then calls PMP$ABORT.
{ With the appropriate program description (one which specifies abort_file=$local.command)
{ this will cause control to be passed to the interactive debug facility.  Debug commands
{ can then be used to examine the tape_block_manager tables.

  PROCEDURE [XREF] bap$tape_bm_fetch_tables_ptr (VAR segment: integer;
    VAR offset: integer;
    VAR status: ost$status);

?? PUSH (LISTEXT := OFF) ??
*copyc pmp$abort
*copyc osp$set_status_abnormal
*copyc clp$scan_parameter_list
?? POP ??
*copyc bat$tape_buffer_grp_descriptor
*copyc bat$tape_buffer_grp_descriptor
*copyc bat$tape_block
*copyc bat$tape_block_buffer_index
*copyc bat$tape_block_mgmt_descriptor
*copyc bat$tape_block_position
*copyc bat$tape_block_type
*copyc bat$tape_buffer_information
*copyc bat$tape_buffer_group_index
*copyc bat$tape_buffer_group_state
*copyc bat$tape_buffer_grp_descriptor
*copyc bat$tape_buffer_information
*copyc bat$tape_io_direction
*copyc bat$tape_read_block_description
*copyc iot$read_tape_description
*copyc iot$write_tape_description
*copyc iot$tape_block_count
*copyc iot$tape_io_status
?? EJECT ??
  VAR
    bgd: ^bat$tape_buffer_grp_descriptor := NIL,
    b: ^bat$tape_block := NIL,
    bbi: ^bat$tape_block_buffer_index := NIL,
    bmd: ^bat$tape_block_mgmt_descriptor := NIL,
    bp: ^bat$tape_block_position := NIL,
    bt: ^bat$tape_block_type := NIL,
    bgi: ^bat$tape_buffer_group_index := NIL,
    bgs: ^bat$tape_buffer_group_state := NIL,
    bi: ^bat$tape_buffer_information := NIL,
    iod: ^bat$tape_io_direction := NIL,
    rbd: ^bat$tape_read_block_description := NIL,
    is: ^iot$tape_io_status := NIL;
?? EJECT ??
  PROCEDURE [XDCL] bap$display_tape_tables (plist: clt$parameter_list; VAR status: ost$status);

    VAR
      segment: integer,
      offset: integer;

    bap$tape_bm_fetch_tables_ptr (segment,offset,status);
    IF NOT status.normal THEN
      pmp$abort(status);
    IFEND;

    bmd := #ADDRESS (0d(16), segment, offset);
    bgd := bmd^.buffer_group[1];
    bi := ^bgd^.block_buffer[1];
    b := bi^.block_buffer;

    osp$set_status_abnormal('BA',0,'Ready to display tape block manager tables.',status);
    pmp$abort(status);

  PROCEND bap$display_tape_tables;

MODEND bam$display_tape_tables;
