
PROCEDURE dum$display_path_table, display_path_table, dispt (
  display_option, d, depth, do: key
      (path_description_entry, pde)
      (cycle_description, cd)
      (full, all, f)
    keyend = path_description_entry
  output, o: file = $output
  status)

  "$FORMAT=OFF"
  VAR
    entry_assignment: string
    number_of_entries: integer
    pdu_number: integer=0
    "offsets & lengths
    entries_offset: integer
    entry_assignment_offset: integer
    length: integer
    next_pdu_offset: integer
    offset: integer
    pde_length: integer
    "addresses
    entries_address: integer
    entry_assignment_address: integer
    pde_address: integer
    pdu_address: integer
    page_status: status
  VAREND
  "$FORMAT=ON"

  fmt$path_description_unit field=next_path_description_unit offset=offset length=length
  next_pdu_offset = offset/8

  fmt$path_description_unit field=entry_assignment offset=offset length=length
  entry_assignment_offset = offset/8

  fmt$path_description_unit field=entries offset=offset length=length
  entries_offset = offset/8

  fmt$path_description_entry field=fmt$path_description_entry offset=offset length=length
  pde_length = length/8

  pdu_address = $memory($symbol_address(fmv$initial_pdu_pointer))


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

  REPEAT
    pdu_number = pdu_number + 1
    put_line ('- **PATH_DESCRIPTION_UNIT** '//..
$strrep(pdu_number, 16)//'    Address = '//$strrep(pdu_address, 16)) o=out
    fmt$path_description_unit a=pdu_address o=out

    entry_assignment_address = $memory((pdu_address+entry_assignment_offset))
    number_of_entries = $memory((pdu_address+entry_assignment_offset+6), 2)
    entry_assignment = $memory_string(entry_assignment_address, number_of_entries)
    entries_address = $memory((pdu_address+entries_offset))

    put_line l=' ENTRY_ASSIGNMENT STRING' o=out
    put_line l=' '//$substr(entry_assignment, 1, number_of_entries) o=out

    FOR i = 1 TO number_of_entries DO
      IF $substr(entry_assignment, i, 1) = 'A' THEN
        pde_address = entries_address + ((i-1)* pde_length)
        put_line l=('0', '  **PATH_DESCRIPTION_ENTRY** '//..
$strrep(i)//'    Address = '//$strrep(pde_address, 16)) o=out
        dum$display_pde $offset(pde_address) do=display_option o=out status=page_status
        IF NOT page_status.normal THEN
         disv page_status o=out
        IFEND
      IFEND
    FOREND

    pdu_address = $memory((pdu_address+next_pdu_offset))
  UNTIL $nil_pva(pdu_address)

PROCEND dum$display_path_table
