GET "LibHdr"

GLOBAL {
  g0:0 };

LET DescribeHeap() BE {
   LET g = @G0
   LET p = blockList;
   WriteF("Free chain %x6", VCAR(GetVec-16));
   UNTIL !p=0 DO {
      LET len = !p;
      writef("*n%x6/%x6: ", p+1, (p+1)<<2)
      TEST len<0 THEN { // used block
	 WriteF("Allocated Block of %n BCPL words", -len-1);
	 TEST g = p+1
	    THEN WriteS(" (Global vector)")
	 ELSE IF stackbase = p+1
	    THEN WriteS(" (Current stack)");
	 len := -len }

      ELSE // freeblock
	 WriteF("Free Block of %n BCPL words: next %x6", len-1, p!1);


      p := p+len  } // next block

   NewLine() }

