%begin
%include "i:util.inc"
%list
%constinteger esc=27
%integer sym,col

%routine gotoxy(%integer line,col)

   printsymbol(esc);printsymbol('Y')
   printsymbol(line+' ');printsymbol(col+' ')
%end

%routine hzline(%integer length)
%integer col,sym

   sym = '`'
   printsymbol(sym) %for col = 1,1,length
%end

%routine bottomline(%integer width,boxes)
%integer no,sym

   %for no = 0,1,boxes %cycle
      %if no = 0 %then sym = 'e' %c
      %elseif no = boxes %then sym = 'm' %c
      %else sym = 'c'
      printsymbol(sym)
      hzline(width-1) %if no # boxes
   %repeat    
%end

%routine centreline(%integer width,boxes)
%integer no,sym

   %for no = 0,1,boxes %cycle
      %if no = 0 %then sym = 'n' %c
      %elseif no = boxes %then sym = 'o' %c
      %else sym = 'b'
      printsymbol(sym)
      hzline(width-1) %if no # boxes
   %repeat    
%end

%routine topline(%integer width,boxes)
%integer no,sym

   %for no = 0,1,boxes %cycle
      %if no = 0 %then sym = 's' %c
      %elseif no = boxes %then sym = 'l' %c
      %else sym = 'd'
      printsymbol(sym)
      hzline(width-1) %if no # boxes
   %repeat    
%end

%routine sides(%integer line,col,width,boxes)
%integer no,sym

   sym = 'a'
   %for no = 0,1,boxes %cycle
      gotoxy(line,col+(no * width))
      printsymbol(sym)
   %repeat
%end

%routine grid(%integer line,col,no along,no down,width,depth)
%integer side,down

   gotoxy(line,col)
   topline(width,no along)
   %for down = 1,1,no down %cycle
      sides(line+side+((depth+1)*(down-1)),col,width,no along) %C
                                                %for side = 1,1,depth
      gotoxy(line+(down * (depth+1)),col)
      centreline(width,no along) %if down # no down
   %repeat
   bottomline(width,no along)
%end

printsymbol(esc);printsymbol('v')
sym='F'
printsymbol(esc);printsymbol(sym)
grid(5,2,4,2,19,2)
sym = 'G'
printsymbol(esc);printsymbol(sym)
%endofprogram
