%begin
   %include "mach:extl1.imp"

   %integer i, c, cb, cd, cdb, ct, ctb, z=0
   %integer %function f(%integer x)
      x = 31-x&31
      x = x*x
      x = (x//31)&31
      %result = 31-x
   %end

   clear
   offset(168, 256)
   colour map(i) = z %for i = 1, 1, 255
   %for i = 255, -1, 1 %cycle
      colour(i)
      disc(511, 511, i<<1)
   %repeat
   cb = 0
   cdb = 1
   ctb = 0
   %cycle
      c = cb
      cd = cdb
      ct = ctb
      %for i = 1, 1, 255 %cycle
         %if c=31 %start
            cd = -1
         %else %if c=0
            ct = ct!!31
            %if ct&31=0 %start
               ct = ct!!(31<<5)
               %if ct&(31<<5)=0 %start
                  ct = ct!!(31<<10)
                  %if ct&(31<<10)=0 %start
                     ct = 31
                  %finish
               %finish
            %finish
            cd = 1
         %finish
         colour map(i) = (c+c<<5+c<<10)&ct
         c = c+cd
      %repeat
      %if cb=31 %start
         cdb = -1
      %else %if cb=0
         cdb = 1
         ctb = ctb!!31
         %if ctb&31=0 %start
            ctb = ctb!!(31<<5)
            %if ctb&(31<<5)=0 %start
               ctb = ctb!!(31<<10)
               %if ctb=0 %start
                  ctb = 31
               %finish
            %finish
         %finish
      %finish
      cb = cb+cdb
   %repeat
!  cb = 0
!  %cycle
!     c = cb
!     %for i = 1, 2, 511 %cycle
!        colour map(i) = c
!        c = (c+1)&16_7FFF
!     %repeat
!     cb = (cb-1)&16_7FFF
!  %repeat
%end %of %program
