  PROCEDURE [INLINE] dmp$get_number_of_faus
    (    p_dfd: ^dmt$disk_file_descriptor;
     VAR number_of_faus: dmt$fau_entries);

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

    VAR
      level_1_start,
      level_1_index: dmt$level_1_index,
      level_2_start,
      level_2_index: dmt$level_2_index,
      p_fmd: ^dmt$file_medium_descriptor,
      p_fau: ^dmt$file_allocation_unit,
      p_level_1: ^dmt$level_1_table,
      p_level_2: ^dmt$level_2_table;

    {Find highest offset allocated, return fau index that it represents

    dmp$get_level_1_ptr (p_dfd, p_level_1);
    IF p_level_1 <> NIL THEN
      level_1_start := p_dfd^.fat_upper_bound;
      level_2_start := p_dfd^.bytes_per_level_2 DIV p_dfd^.bytes_per_allocation - 1;
      FOR level_1_index := level_1_start DOWNTO 0 DO
        dmp$get_level_2_ptr (^p_level_1^ [level_1_index], p_level_2);
        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
              number_of_faus := (level_1_index * (p_dfd^.bytes_per_level_2 DIV
                    p_dfd^.bytes_per_allocation)) + level_2_index + 1;
              RETURN; {----->
            IFEND;
          FOREND;
        IFEND;
      FOREND;
    ELSE
      number_of_faus := 0;
    IFEND;

  PROCEND dmp$get_number_of_faus;

*copyc dmp$get_level_1_ptr
*copyc dmp$get_level_2_ptr
?? POP ??
