
PROCEDURE dum$display_number_of_files, display_number_of_files, disnof (
  output, o: file = $output
  )

  "$FORMAT=OFF"
  VAR
    cdu_number: integer=0
    entry_assignment: string
    number_of_entries: integer
    number_of_files: integer=0
    "offsets & lengths
    cycle_description_offset: integer
    entries_length: integer
    entries_offset: integer
    entry_assignment_offset: integer
    length: integer
    next_cdu_offset: integer
    offset: integer
    "addresses
    cdu_address: integer
    entries_address: integer
    entry_assignment_address: integer
  VAREND
  "$FORMAT=ON"

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

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

  fmt$cycle_description_unit field=next_cycle_description_unit offset=offset length=length
  next_cdu_offset = offset/8

  cdu_address = $memory($symbol_address(fmv$initial_cdu_pointer))


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

  WHEN any_fault DO
    put_line l=(' number_of_cdus >= '//$strrep(cdu_number), ' number_of_files >= '//$strrep(number_of_files)..
          ) o=out
  WHENEND

  REPEAT
    cdu_number = cdu_number + 1
    entry_assignment_address = $memory((cdu_address+entry_assignment_offset))
    number_of_entries = $memory((cdu_address+entry_assignment_offset+6), 2)
    entry_assignment = $memory_string(entry_assignment_address, number_of_entries)
    entries_address = $memory((cdu_address+entries_offset))

    FOR i = 1 TO number_of_entries DO
      IF $substr(entry_assignment, i, 1) = 'A' THEN
        number_of_files = number_of_files + 1
      IFEND
    FOREND

    cdu_address = $memory((cdu_address+next_cdu_offset))
  UNTIL $nil_pva(cdu_address)

  put_line l=(' number_of_cdus = '//$strrep(cdu_number), ' number_of_files = '//$strrep(number_of_files)) ..
        o=out

PROCEND dum$display_number_of_files
