
{ DECK: IOT$TAPE_JOB_UNIT_DESCRIPTOR

  TYPE
    iot$tape_job_unit_descriptor = record
      io_id: iot$io_id,

{ completion_q_index is the index into iov$tape_completion_q_table and iov$wired_tape_tables
{ for this logical_unit.

      completion_q_index: iot$no_of_tape_units,
      pageable_tape_requests: iot$pageable_tape_requests,
      pending_pageable_requests: array [1 .. ioc$max_multiple_tape_requests] of ^iot$tape_request,

{ Blocks_read/written includes recovery operations. The blocks_read counter also includes all
{ forspaces/backspaces executed on the tape unit.

      blocks_read: integer,
      blocks_written: integer,

{ Blocks_read/written_for_accounting does not include recovery operations. This is a total
{ accumulation count from the time the tape was assigned until unload time. The read counter
{ does not include any forspaces or backspaces as they are in the blocks_skipped counter.

      blocks_read_for_accounting,
      blocks_written_for_accounting,

{ Blocks_read/written_for_byte_count is the counts for that particular instance of open. At the time
{ a close is issued, the byte counts are incremented by taking these block_counts and multiplying
{ by the max_block_length for the instance of open. On multi-file labelled tapes, the max_block_length
{ can vary from file to file. These counts are cleared at close of file.

      blocks_read_for_byte_count: integer,
      blocks_written_for_byte_count: integer,

{ Bytes_read/written is a total accumulation of bytes processed from the time the tape was assigned
{ until the tape was unloaded.

      bytes_read: integer,
      bytes_written: integer,

{ Blocks_skipped is the total number of forespaces/backspaces (does not include recovery operations)
{ that were executed from the time the tape was asigned until the tape was unloaded.  With Release
{ 1.4.1, the tape block manager will not use the hardware function of SKIP_TAPEMARK, but will
{ forespace/backspace until the tapemark is encountered.  This mechanism of searching for a tapemark
{ allows channel sharing and functionally does what is involved for the hardware in a SKIP_TAPEMARK.

      blocks_skipped: integer,

{ Block_count is the number of IRG's (Inter_Record_Gaps) from loadpoint (includes tapemarks) at the
{ present physical position of the tape file.

      block_count: integer,

{ Tapemark count is the number of Tapemarks that can be counted from loadpoint at the present physical
{ position of the tape file.

      tapemark_count: integer,

      tape_unit_density: integer,
      io_requests_count: integer,
      tape_error_log_entry: boolean,
      task_terminated_during_recovery: boolean,
      block_in_error: -1 .. ioc$max_tape_blocks_to_process,
      last_request: iot$tape_request_types,
      controller_type: cmt$controller_type,
      min_block_length: amt$min_block_length,
      max_block_length: amt$max_block_length,
      position_uncertain: boolean,
      format_parameters: iot$tape_format_parameters,
      single_double_track_corrections: integer,
      free_running_clock: integer,
      consecutive_erases: 0 .. 0ffff(16),
      positioning_to_tapemark: boolean,
      cartridge_tape_last_good_bid: iot$cartridge_tape_bid,
      ccc_cart_buffer_underruns: 0 .. 0ffff(16),
      error_block_forespace_count: 0 .. 0ffff(16),
      bid_index: iot$bid_index,
      bid_window: iot$bid_window,
      historical_bid_index: iot$bid_index,
      historical_bid_window: iot$bid_window,
    recend;

  TYPE
    iot$tape_format_parameters = packed record
      define_code_translation: 0 .. 1,
      code_translation: 0 .. 7,
      define_ad: 0 .. 1,
      ad_mode: 0 .. 3,
      define_unit_no: boolean,
      hardware_unit_number: 0 .. 0f(16),
      fill: 0 .. 1,
      define_vertical_parity: 0 .. 1,
      vertical_parity: 0 .. 1,
      define_density: 0 .. 1,
      density: 0 .. 3,
      define_min_block_length: 0 .. 1,
      min_block_length: 0 .. 1f(16),
      define_disable_error_correction: 0 .. 1,
      disable_hardware_correction: 0 .. 1,
      fill1: 0 .. 3ff(16),
      read_max_byte_count: 0 .. 0fffffff(16),
    recend;

?? PUSH (LISTEXT := ON) ??
*copyc amt$max_block_length
*copyc osd$virtual_address
*copyc amt$access_level
*copyc amt$attribute_source
*copyc amt$average_record_length
*copyc amt$block_type
*copyc amt$collate_table
*copyc amt$collation_value
*copyc amt$data_padding
*copyc amt$error_exit_procedure
*copyc amt$error_limit
*copyc amt$estimated_record_count
*copyc amt$file_access_selections
*copyc amt$file_attribute_keys
*copyc amt$file_attributes
*copyc amt$file_byte_address
*copyc amt$file_identifier
*copyc amt$file_length
*copyc amt$file_limit
*copyc amt$file_organization
*copyc amt$file_position
*copyc amt$forced_write
*copyc amt$global_file_position
*copyc amt$index_padding
*copyc amt$internal_code
*copyc amt$key_length
*copyc amt$key_position
*copyc amt$key_type
*copyc amt$label_exit_procedure
*copyc amt$label_options
*copyc amt$label_type
*copyc amt$local_file_name
*copyc amc$mau_length
*copyc amt$max_block_length
*copyc amt$max_record_length
*copyc amt$message_control
*copyc amt$min_block_length
*copyc amt$min_record_length
*copyc amt$padding_character
*copyc amt$record_limit
*copyc amt$record_type
*copyc amt$records_per_block
*copyc amt$return_option
*copyc amt$user_info
*copyc amt$vertical_print_density
*copyc ost$status
*copyc cmt$controller_type
*copyc iot$io_id
*copyc iot$no_of_tape_units
*copyc iot$pageable_tape_requests
*copyc iot$tape_block_id_area
*copyc iot$tape_request_types
?? POP ??
