%begin;                            !Autochop
%include "clients.inc"
%include "inc:util.IMP"
%include "inc:fs.IMP"
%list
@16_3fa8 %byteinteger ls,lp,rs,rp

%recordformat f(%integer fs,fp,cs,cp,time)
%constinteger min=1,max=31
%integer pos=min
%record(f)%array slot(min:max)
%record(f)ourselves
%string(127)dummy

%integerfn r time
%integer d,m,y,h,min
  %routine verify(%integer k)
    %signal 3 %unless nextsymbol=k; skipsymbol
  %end
  read(d); verify('/')
  read(m); verify('/')
  read(y); verify(' ')
  read(h); verify('.')
  read(min)
  %result = ((((y-76)*12+m-1)*31+d-1)*24+h)*60+min
%end

%routine p time(%integer time)
%integer d,m,y,h,min
  %integerfn strip(%integer dividend)
  %integer r
    r = rem(time,dividend); time = time//dividend
    %result = r
  %end
  %routine p(%integer n)
    printsymbol('0') %if n<10; write(n,0)
  %end
  min = strip(60)
  h = strip(24)
  d = strip(31)+1
  m = strip(12)+1
  y = time+76
  p(d); printsymbol('/')
  p(m); printsymbol('/')
  p(y); spaces(2)
  p(h); printsymbol('.')
  p(min)
%end

%routine read record(%record(f)%name r)
  r = 0
  r_fs = 16_14; read(r_fp)
  rhex(r_cs); read(r_cp)
  r_time = rtime; r_time = rtime
%end

%routine write record(%record(f)%name r)
  phex2(r_fs); phex2(r_fp); spaces(2)
  phex2(r_cs); phex2(r_cp); spaces(2)
  ptime(r_time); spaces(2)
  %if r_cs > client max %then printstring("Somewhere unknown") %c
                        %else printstring(whereabouts(r_cs))
  spaces(2)
%end

%routine chop
%byte four=12
  etherwrite(fsport,four,1)
  %cycle
  %repeatuntil ack&1<<fsport#0
%end

%routine alias(%record(f)%name r)
  ethc = 15; twait
  ethc = 7; twait
  ethd = r_cs; twait
  fsport = r_cp
  etheropen(fsport,r_fs<<8+r_fp)
%end

%routine swop(%integer i,j)
%record(f)%name a,b
%record(f)c
  a == slot(i); b == slot(j)
  %returnif a_time<=b_time
  c = a; a = b; b = c
%end

%routine sort(%integer lo,hi)
%integer i,j
  %for i = lo,1,hi-1 %cycle
    swop(i,j) %for j = i+1,1,hi
  %repeat
%end

%routine do pass
%integer sym,i
  %on 9 %start
    closeinput; selectinput(0)
    sort(min,pos-1)
    %for i = min,1,pos-1 %cycle
      write record(slot(i))
      %cycle
        readsymbol(sym); %exitif sym=nl
        sym = sym!32
        %stopif sym='e'
      %repeatuntil sym='y' %or sym='n'
      %if sym='y' %start
        alias(slot(i)); chop
        alias(ourselves)
      %finish
      readsymbol(sym) %while sym#nl
    %repeat
    %return
  %finish
  %cycle
    %signal 9 %if pos>max
    read record(slot(pos)); pos = pos+1
  %repeat
%end

%on 9 %start
  %stop
%finish

ourselves = 0
ourselves_fs = rs; ourselves_fp = rp
ourselves_cs = ls; ourselves_cp = lp

dummy = cliparam
printstring("'Y' to chop, 'N' or nothing not to, 'E' or ^Z to exit"); newline
printstring("  It is now "); printstring(date." ".time); newline

openinput(1,"$:ports"); selectinput(1)
do pass

%endofprogram
