%include "inc:util.imp"
%include "iff:graphinc.imp"
%begin

%routine iff self test(%integer mode)
   %integer rc,i,j
   %halfintegerarray cmap(0:255)
   %real s60
   %constreal tl = 64
   rc = iff open frame("scratch", "GRAPH self-test", mode)
   %if rc=0 %start

  %for i = 0, 16, 240 %cycle
     CMap (i+0)  = 0
     CMap (i+1)  = 31
     CMap (i+2)  = 31<<5
     CMap (i+3)  = 31<<5+31
     CMap (i+4)  = 31<<10
     CMap (i+5) = 31<<10+31
     CMap (i+6) = 31<<10+31<<5
     CMap (i+7) = 31<<10+31<<5+31
     CMap (i+8) = 31<<10+31<<5+31
     CMap (i+9) = 31<<10+31<<5
     CMap (i+10) = 31<<10+31
     CMap (i+11) = 31<<10
     CMap (i+12) = 31<<5+31
     CMap (i+13) = 31<<5
     CMap (i+14) = 31
     CMap (i+15) = 0
  %repeat
  update colour map(cmap(0))

      clear
      colour(25)

triangle(20,20, 120,150, 270,120); ->end
      %for i=0, 4, 252 %cycle
         %for j=0, 4, 252 %cycle
            plot(i,j)
         %repeat
      %repeat
    
      colour(50)
      fill(32, 32, 224, 224)
      colour(75)
      line(0, 64, 256, 192)
      line(0, 192, 256, 64)

      line(64, 0, 192, 256)
      line(192, 0, 64, 256)

      colour(100)
      hline(0, 256, 256); vline(256, 0, 256)
      hline(0, 256, 0); vline(0, 0, 256)
      !Equilateral triangle, side tl, centred.
      s60 = 0.5*sqrt(3)
      colour(125)
      triangle(int(128-tl/2), int(128-tl*s60/3), %c
                   int(128+tl/2), int(128-tl*s60/3), %c
                   int(128),      int(128+tl*2*s60/3))
      colour(150)
      trapeze(1, 256, 1, 64, 192, 64)
      trapeze(1, 256, 256, 64, 192, 192)
      colour(48)
      hline(0, 256, 128)
      vline(128, 0, 256)
end:
      iff close frame
      printstring("Image complete"); newline
   %finishelse printstring("Couldn't open file") %and newline
%end

%integer mode
prompt("Mode:"); read(mode)
iff self test(mode)
%endofprogram

