  PROCEDURE [INLINE] dmp$get_previous_fau_entry
    (    p_dfd: ^dmt$disk_file_descriptor;
         byte_address: amt$file_byte_address;
         fmd_index: dmt$fmd_index;
     VAR p_previous_fau_entry: ^dmt$file_allocation_unit);

?? PUSH (LISTEXT := ON) ??
?? RIGHT := 110 ??

    VAR
      level_1_start: integer,
      level_1_index: dmt$level_1_index,
      level_2_start: integer,
      level_2_index: dmt$level_2_index,
      p_level_1: ^dmt$level_1_table,
      p_level_2: ^dmt$level_2_table;

    level_1_start := byte_address DIV p_dfd^.bytes_per_level_2;
    level_2_start := ((byte_address MOD p_dfd^.bytes_per_level_2) DIV p_dfd^.bytes_per_allocation) - 1;
    IF level_2_start < 0 THEN
      level_1_start := level_1_start - 1;
      IF level_1_start < 0 THEN
        p_previous_fau_entry := NIL;
        RETURN; {----->
      IFEND;
      level_2_start := p_dfd^.bytes_per_level_2 DIV p_dfd^.bytes_per_allocation - 1;
    IFEND;

    dmp$get_level_1_ptr (p_dfd, p_level_1);
    FOR level_1_index := level_1_start DOWNTO 0 DO
      p_level_2 := dmf$level_2_ptr (^p_level_1^ [level_1_index]);
      IF p_level_2 <> NIL THEN
        FOR level_2_index := level_2_start DOWNTO 0 DO
          IF p_level_2^ [level_2_index].state <> dmc$fau_free THEN
            IF p_level_2^ [level_2_index].fmd_index = fmd_index THEN
              p_previous_fau_entry := ^p_level_2^ [level_2_index];
              RETURN; {----->
            IFEND;
          IFEND;
        FOREND;
      IFEND;
      level_2_start := p_dfd^.bytes_per_level_2 DIV p_dfd^.bytes_per_allocation - 1;
    FOREND;

    p_previous_fau_entry := NIL;

  PROCEND dmp$get_previous_fau_entry;
*copyc dmp$get_level_1_ptr
*copyc dmf$level_2_ptr
*copyc dmp$get_fau_entry
?? POP ??
