%begin; !WIR2: Analyse .wir file

%include "inc:level1.imp"

%constinteger maxint = (-1)>>1, minint = \maxint
%integer mincol=maxint,maxcol=minint,
         minrow=maxint,maxrow=minint,
         minmac=maxint,maxmac=minint,
         minx=maxint,maxx=minint,
         miny=maxint,maxy=minint
%integer row,col,code,num,x=0,y=0,width,height

%routine range(%integername max,min)
  max = num %if num>max
  min = num %if num<min
%end

%routine show(%integer max,min,%string(255)s)
  printstring(s); space; write(min,0)
  printsymbol(':'); write(max,0); newline
%end

%routine draw it all
@16_3f00-24 %integerfn muldiv(%integer a,b,c)
  %routine point(%integer x,y)
    ring(687-muldiv(x-minx,687,width),511-muldiv(y-miny,511,height),5)
  %end
  %routine draw(%integer dx,dy)
  %integer fx,fy,tx,ty
    fx = muldiv(x-minx,687,width); fy = muldiv(y-miny,511,height)
    tx = muldiv(x+dx-minx,687,width); ty = muldiv(y+dy-miny,511,height)
    line(687-fx,511-fy,687-tx,511-ty)
    x = x+dx; y = y+dy
  %end
  %on 9 %start
    %return
  %finish
  clear
  resetinput
  width = maxx-minx; height = maxy-miny
  x = 0; y = 0
  point(0,0)
  %cycle
    readsymbol(code); skipsymbol %if nextsymbol='+'; read(num)
    %if code='X' %start
      draw(num,0)
    %elseif code='Y'
      draw(0,num)
    %elseif code='D'
      col = num//1000; row = rem(num,1000)
!     printstring("Column"); write(col,2)
!     printstring(", Row"); write(row,3)
!     printstring(",  X"); write(x-minx,6)
!     printstring(",  Y"); write(y-miny,6)
!     newline
      point(x,y)
    %elseif code='M'
      colour(num) %unless num=0
    %finish
  %repeat
%end

%on 9 %start
! show(maxmac,minmac,"M code")
! show(maxcol,mincol,"Column")
! show(maxrow,minrow,"Row")
! show(maxx,minx,"X abs")
! show(maxy,miny,"Y abs")
  printstring("Pass 2"); newline
  draw it all
  printstring("Start point "); write(-minx,0); write(-miny,1); newline
  %stop
%finish

printstring("Pass 1"); newline
openinput(1,cliparam); selectinput(1)
%cycle
  readsymbol(code); skipsymbol %if nextsymbol='+'; read(num)
  %if code='M' %start
    range(maxmac,minmac)
  %elseif code='D'
    col = num//1000; row = rem(num,1000)
    num = col; range(maxcol,mincol) %unless col!row=0
    num = row; range(maxrow,minrow) %unless col!row=0
  %elseif code='X'
    x = x+num; num = x; range(maxx,minx)
  %elseif code='Y'
    y = y+num; num = y; range(maxy,miny)
  %finish
%repeat

%end
