
  FUNCTION [INLINE] gfp$count_all_fdes
    (    residence: gft$table_residence): integer;

?? PUSH (LISTEXT := ON) ??

    VAR
      control_p: ^gft$file_descriptor_control,
      count: integer,
      index: integer,
      rma: integer,
      seg: integer;

    count := 0;
    IF residence <> gfc$tr_null_residence THEN
      IF residence = gfc$tr_system THEN
        seg := osc$segnum_mainframe_wired;
      ELSE
        seg := osc$segnum_job_fixed_heap;
      IFEND;

      control_p := #ADDRESS (1, seg, gfc$fde_control_table_base);
      index := UPPERBOUND (control_p^.in_use_words);
      i#real_memory_address (#LOC (control_p^.in_use_words [index]), rma);
      WHILE (rma < 0) OR (control_p^.in_use_words [index] = 0) DO
        index := index - 1;
        i#real_memory_address (#LOC (control_p^.in_use_words [index]), rma);
      WHILEND;
      index := index * 64 + 64;

      REPEAT
        IF control_p^.in_use_bits [index] THEN
          count := count + 1;
        IFEND;
        index := index - 1;
      UNTIL index < 0;
    IFEND;

    gfp$count_all_fdes := count;
  FUNCEND gfp$count_all_fdes;

*copyc gfc$constants
*copyc gft$file_descriptor_control
*copyc gft$table_residence
*copyc i#real_memory_address
?? POP ??
