PROCEDURE dum$locate_file_media, locate_file_media, locfm (
  file_media, fm: key
      gfc$fm_transient_segment, gfc$fm_mass_storage_file, gfc$fm_served_file
    keyend = $required
  display_option, do: key
      (full, f, all)
      (brief, b)
    keyend = brief
  output, o: file = $output
  status)

" This procedure searches the system FDE table by file media.

  "$FORMAT=OFF"
  VAR
    any_found: boolean = FALSE
    current: name = $current_module
    fde: integer
    fde_table: integer = 100000000(16) + $mem($sa(gfv$fde_table_base) 8)
    gfc$fde_size: integer = $mem($sa(gfv$fde_size) 8)
    gfc$max_file_descriptor_index: integer = 0ffff(16) "maximum value of gft$file_descriptor_index"
  VAREND
  "$FORMAT=ON"

  chadm dmm$file_table_manager
  set_file_attributes output fc=legible pf=continuous pw=78

  FOR i = 0 TO gfc$max_file_descriptor_index DO
    fde = fde_table + (i * gfc$fde_size)
    IF $pv(?fde.gft$file_descriptor_entry.file_hash) <> 0FF(16) THEN
      IF $pv(?fde.gft$file_descriptor_entry.file_media) = file_media THEN
        any_found = TRUE
        put_line ' -- File entry '//$strrep(i, 16)//'(16) matches.  GFN = '//..
$pv(?fde.gft$file_descriptor_entry.global_file_name) o=output.$eoi
        IF display_option = full THEN
          dispv ?fde.gft$file_descriptor_entry o=output.$eoi
          IF file_media = gfc$fm_mass_storage_file THEN
            p_disk_file_descriptor = 100000000(16) + ..
                  $pv(?fde.gft$file_descriptor_entry.disk_file_descriptor_p)
            dispv ?p_disk_file_descriptor.dmt$disk_file_descriptor o=output.$eoi
          ELSEIF file_media = gfc$fm_served_file THEN
            p_server_descriptor = 100000000(16) + ..
                  $pv(?fde.gft$file_descriptor_entry.served_file_descriptor_p)
            dispv ?p_server_descriptor.dft$server_descriptor o=output.$eoi
          IFEND
          putl '  ------------------------ ' o=output.$eoi
        IFEND
      IFEND
    IFEND
  FOREND

  IF NOT any_found THEN
    putl ' -- None found of media '//$string(file_media) o=output.$eoi
  IFEND

  chadm current

PROCEND dum$locate_file_media
