%begin; ! Forget loaded files

%include "inc:util.imp"
%include "inc:dict.imp"

%record(dictf)%name d
%string(255)s,param
%integername w1,w2
%integer tag,sym,freed = 0

%predicate chosen
%string(255)t
  %if param=",*," %start
    printstring(s); newline
    %true
  %finish
  %if param=",," %start
    printstring(s); prompt(" ")
    readsymbol(sym) %and sym=sym&95 %until sym='Y' %or sym='N' %or sym=nl
    %if sym='Y' %start
      readsymbol(sym) %while sym#nl
      %true
    %finish
    readsymbol(sym) %while sym#nl
    %false
  %finish
  t = ",".s.","
  %trueif param -> (t)
  %false
%end

param = ",".cliparam.","
prompt(" ")
restart:
d == fildict
%cycle
  tag = d_beg+8
  %while tag<d_pos %cycle
    tag = tag+4 %until byteinteger(tag)=0
    tag = tag+4
    w1 == integer(tag); w2 == integer(tag+4)
    %if (w2+3)>>2=(freebot+3)>>2 %and w1<w2 %start
      transname(tag,s)
      %if chosen %start
        freed = freed+w2-w1
        freebot = w1
        w1 = -1; w2 = -1
        ->restart
      %finish
    %finish
    tag = tag+8
  %repeat
  %exitif d_alt=0
  d == record(d_alt)
%repeat
write((freed+512)>>10,0); printstring(" kbytes freed"); newline

%endofprogram
