?? RIGHT := 110 ??

  PROCEDURE [INLINE] dmp$get_fau_entry_and_fmd
    (    p_dfd: ^dmt$disk_file_descriptor;
         byte_address: amt$file_byte_address;
     VAR p_fau_entry: ^dmt$file_allocation_unit;
     VAR p_fmd: ^dmt$file_medium_descriptor);

?? PUSH (LISTEXT := ON) ??

    VAR
      level_1_index: dmt$level_1_index,
      level_2_index: dmt$level_2_index,
      p_level1: ^dmt$level_1_table,
      p_level2: ^dmt$level_2_table;

    p_fmd := NIL;
    p_fau_entry := NIL;

    {Note:
    {If p_fau is returned NIL then table space is not allocated
    {If p_fmd is returned NIL then disk space is not allocated

    IF p_dfd^.file_allocation_table <> NIL THEN
      level_1_index := byte_address DIV p_dfd^.bytes_per_level_2;
      IF level_1_index <= p_dfd^.fat_upper_bound THEN
        p_level1 := #ADDRESS (1, #SEGMENT (p_dfd), #OFFSET (p_dfd^.file_allocation_table));
        p_level2 := dmf$level_2_ptr (^p_level1^ [level_1_index]);
        IF p_level2 <> NIL THEN
          level_2_index := (byte_address MOD p_dfd^.bytes_per_level_2) DIV p_dfd^.bytes_per_allocation;
          p_fau_entry := ^p_level2^ [level_2_index];
          IF p_fau_entry^.state > dmc$fau_free THEN
            dmp$get_fmd_by_index (p_dfd, p_fau_entry^.fmd_index, p_fmd);
          IFEND;
        IFEND;
      IFEND;
    IFEND;

  PROCEND dmp$get_fau_entry_and_fmd;

*copyc dmt$file_allocation_descriptor
*copyc dmt$sparse_allocation
*copyc dmp$get_fmd_by_index
*copyc dmf$level_2_ptr
?? POP ??
