
PROCEDURE dum$display_task_file_table, display_task_file_table, distft (
  display_option, e, expansion, do: key
      (brief, b)
      (full, all, f)
    keyend = brief
  local_file_name, lfn: name = $optional
  output, o: file = $output
  )

  "$FORMAT=OFF"
  VAR
    number_of_entries: integer
    tft_entry_assignment: string
    "offsets & lengths
    gfi_offset: integer
    length: integer
    lfn_length: integer
    lfn_offset: integer
    offset: integer
    sfl_offset: integer
    tfte_length: integer
    "addresses
    address: integer
    tfte_address: integer
  VAREND
  "$FORMAT=ON"

  bat$task_file_entry field=bat$task_file_entry offset=offset length=length
  tfte_length = length/8

  bat$task_file_entry field=global_file_information offset=offset length=length
  gfi_offset = offset/8

  bat$task_file_entry field=system_file_label offset=offset length=length
  sfl_offset = offset/8

  bat$task_file_entry field=$name('local_file_name') offset=offset length=length
  lfn_offset = offset/8
  lfn_length = length/8

  display_value v=('DUM$DISPLAY_TASK_FILE_TABLE') o=output
  out = output.$eoi

  tft_address = $memory($symbol_address(bav$task_file_table))

  number_of_entries = $memory(($symbol_address(bav$tft_entry_assignment)+6), 2)
  tft_entry_assignment = $memory_string($memory($symbol_address(bav$tft_entry_assignment)), number_of_entries)

  FOR i = 1 TO number_of_entries DO
    IF ($substr(tft_entry_assignment, i, 1) = 'A') THEN
      tfte_address = tft_address + ((i-1)* tfte_length)
      IF (NOT $specified(lfn)) OR ($memory_string((tfte_address+lfn_offset), lfn_length) = $string(lfn)) THEN
        put_line l=('- **TASK_FILE_TABLE_ENTRY** '//$strrep(i)//'    Address = '//$strrep(tfte_address, 16))..
               o=out
        bat$task_file_entry a=tfte_address o=out
        IF display_option = $name('full') THEN
          address = $memory((tfte_address+gfi_offset))
          IF NOT $nil_pva(address) THEN
            put_line l=('0 **GLOBAL_FILE_INFORMATION**    Address = '//$strrep(address, 16)) o=out
            bat$global_file_information a=address o=out
          IFEND
          address = $memory((tfte_address+sfl_offset))
          IF NOT $nil_pva(address) THEN
            put_line l=('0 **SYSTEM_FILE_LABEL**    Address = '//$strrep(address, 16)) o=out
            fmt$system_file_label a=address o=out
          IFEND
        IFEND
      IFEND
    IFEND
  FOREND

PROCEND dum$display_task_file_table

