home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / M2V11-1.LHA / modula / examples / src / Frags.mod < prev    next >
Encoding:
Text File  |  1994-10-01  |  1.0 KB  |  49 lines

  1. MODULE Frags ; (* This program will read from first 4K of memory *)
  2.  
  3. IMPORT
  4.   E := Exec, Dos{37} ;
  5.  
  6. CONST
  7.   sizes   = 20 ;
  8.   minSize =  3 ;
  9.   maxSize = sizes+minSize-1 ;
  10.  
  11. PROCEDURE main( ) ;
  12.  
  13.   VAR
  14.     b      : INTEGER ;
  15.     counts : ARRAY [0..sizes-1] OF INTEGER ;
  16.     chunk  : E.MemChunkPtr ;
  17.     mem       : E.MemHeaderPtr ;
  18.  
  19. BEGIN
  20.   FOR b := 0 TO sizes-1 DO counts[b] := 0 END ;
  21.  
  22.   E.Forbid() ;
  23.   mem := E.MemHeaderPtr(E.SysBase^.MemList.lh_Head) ;
  24.   WHILE mem^.mh_Node.ln_Succ # NIL DO
  25.     chunk := mem^.mh_First ;
  26.     WHILE chunk # NIL DO
  27.       b := maxSize ;
  28.       LOOP
  29.     IF b < minSize THEN EXIT END ;
  30.     IF b IN LONGSET(chunk^.mc_Bytes) THEN INC(counts[b-minSize]); EXIT END ;
  31.     DEC(b)
  32.       END ;
  33.       chunk := chunk^.mc_Next ;
  34.     END ;
  35.     mem := E.MemHeaderPtr(mem^.mh_Node.ln_Succ) ;
  36.   END ;
  37.   E.Permit() ;
  38.  
  39.   Dos.Printf(" Free memory size distribution:\n") ;
  40.   Dos.Printf("     Size  Count\n") ;
  41.   FOR b := minSize TO maxSize DO
  42.     Dos.Printf(" %8ld: %4ld\n", {b}, counts[b-minSize])
  43.   END
  44.  
  45. END main ;
  46.  
  47. BEGIN main()
  48. END Frags.
  49.