sync on
set display mode 1024,768,32
dim color(11,15) as dword
 
 
 
type imagepoint
   xpos as integer
   ypos as integer
endtype
 
dim color_check(-1) as imagepoint
#constant max_width=800
#constant max_height = 600
global canvas_width
global canvas_height
global draw_mode as string
global spray_size=12
global brush_size=1
global brush_style=0
global color5
global color6
global undo_level=50
global across
global down
global noise_level=1
global psycho_level=1
 
draw_mode="pencil"
color6=rgb(255,255,255)
 
 
 
 
for a = 0 to 11
for b = 0 to 15
read color(a,b)
next b
next a
 
for rr = 1 to 12
create bitmap 1,20,20
for a = 0 to 19
for b = 0 to 19
read x
ink x,0
dot b,a
next b:next a
get image rr,0,0,19,19,1
delete bitmap 1
next rr
 
for rr = 1 to 2
create bitmap 1,10,10
for a = 0 to 9
for b = 0 to 9
read x
ink x,0
dot b,a
next b:next a
get image rr+500,0,0,9,9,1
delete bitmap 1
next rr
 
 
 
 
 draw_interface()
 make_canvas(128,128)
 
 
 
 
drawing=1
do
 
 
ink rgb(212,209,201),0
for a = 0 to 5
   box 4+a*25,219,25+a*25,240
next a
 
box 5,245,160,270
box 99,174,120,195
box 5,321,55,341
 
 
ink 0,0
 
 
 
 
select draw_mode
   case "pencil"
      box 4,219,25,240
   endcase
   case "flood"
      box 29,219,50,240
   endcase
   case "spray"
      box 54,219,75,240
   endcase
   case "box"
      box 79,219,100,240
   endcase
   case "circle"
      box 104,219,125,240
   endcase
   case "line"
      box 129,219,150,240
   endcase
endselect
 
if brush_style=1 then box 99,174,120,195
 
center text 15,245,str$(brush_size)
center text 65,245,str$(spray_size)
center text 15,325,str$(Noise_level)
center text 40,325,str$(Psycho_level)
text 60,302,"Filters"
text 35,372,"New Canvas"
text 60,402,"Save/Load"
 
paste image 1,5,220
paste image 2,30,220
paste image 3,55,220
paste image 4,80,220
paste image 5,105,220
paste image 6,130,220
 
paste image 11,5,300
paste image 12,30,300
 
paste image 501,5,288
paste image 502,16,288
paste image 501,30,288
paste image 502,41,288
 
paste image 7,5,400
paste image 9,30,400
paste image 10,5,370
paste image 8,100,175
 
paste image 501,5,208
paste image 502,16,208
paste image 501,55,208
paste image 502,66,208
 
ink color6,0
box 40,170,70,200
ink color5,0
box 2,170,32,200
 
 
mx=mousex():my=mousey()
ucm=mouseclick()
if drawing=1 and ucm=0
   drawing=0
   inc undo_level
   if undo_level>80
      shift_undo()
      undo_level=80
   endif
   get image undo_level,across,down,across+canvas_width,down+canvas_height,1
 
endif
 
 
if mx>=across and mx<=across+canvas_width and my>=down and my<=down+canvas_height and ucm>0 and ucm<3
   if ucm=1 then ink color5,0
   if ucm=2 then ink color6,0
 
   if draw_mode="pencil"
      if drawing=1
         line oldmx,oldmy,mx,my
         if brush_size>1
            for a=mx-brush_size+1 to mx+brush_size-1
               for b = my-brush_size+1 to my+brush_size-1
               x1=a:x2=oldmx+(a-mx):y1=b:y2=oldmy+(b-my)
               if x1<across then x1=across
               if x2<across then x2=across
               if y1<down then y1=down
               if y2<down then y2=down
               if x1>across+canvas_width then x1=across+canvas_width
               if x2>across+canvas_width then x2=across+canvas_width
               if y1>down+canvas_height then y1=down+canvas_height
               if y2>down+canvas_height then y2=down+canvas_height
               if brush_style=1
                  if a>mx
                     ink color6,0
                  else
                     ink color5,0
                  endif
               endif
 
               line x1,y1,x2,y2
            next b: next a
         endif
      endif
 
      for a = mx-brush_size+1 to mx+brush_size-1
         for b = my-brush_size+1 to my+brush_size-1
         if a>=across and a<=across+canvas_width and b>=down and b<=down+canvas_height
            dot a,b
         endif
      next b:next a
      oldmx=mx:oldmy=my:drawing=1
   endif
 
   if draw_mode="flood"
      color_test=point(mx,my)
      if ucm=1
         if color_test<>color5 then flood(mx,my,color5,color_test)
      else
         if color_test<>color6 then flood(mx,my,color6,color_test)
      endif
      drawing=1
      repeat
      until mouseclick()=0
   endif
 
 
   if draw_mode="spray"
 
      where=rnd(359)
      rad=rnd(spray_size)
      newx=newxvalue(mx,where,rad)
      newy=newzvalue(my,where,rad)
      if newx>=across and newx<=across+canvas_width and newy>=down and newy<=down+canvas_height then dot newx,newy
      drawing=1
   endif
 
   if draw_mode="box"
      make_box(mx,my,ucm,0)
      drawing=1
   endif
 
   if draw_mode="line"
      make_line(mx,my,ucm,0)
      drawing=1
   endif
 
   if draw_mode="circle"
      make_circle(mx,my,ucm,0)
      add_undo()
      ink 0,0
      box 170,0,screen width(),screen height()
 
      paste image undo_level,across,down
 
   endif
 
 
endif
 
 
 
 
 
 
test_buttons()
 
 
 
 
 
if keystate(29)=1 and keystate(44)=1 and undo_level>10 and image exist(undo_level-1)
   paste image undo_level-1,across,down
   dec undo_level
   delete image undo_level+1
   repeat
   until scancode()=0
endif
 
 
 
sync
loop
 
`palette
data 16777215,5063201,4672801,3624225,2575649,2182444,2182460,2182476,2178381,2174285,2498893,3613005,4661581,5054786,5054770,5054754
data 5713687,5719831,5199639,3626775,2053911,1529638,1529663,1529687,1523799,1517399,1972055,3544919,5183319,5707592,5707568,5707544
data 6433804,6441996,5792268,3629580,1532428,811553,811585,811618,803426,795234,1444962,3542114,5639266,6425678,6425645,6425613
data 7153921,7164417,6319361,3632385,1010945,93467,93508,93548,83309,73069,917869,3539309,6160749,7143763,7143723,7143683
data 10052419,10060611,9410883,7248195,5151043,4430168,4430200,4430233,4422041,4413849,5063577,7160729,9257881,10044293,10044260,10044228
data 11492909,11505197,10465069,7253805,4108077,2993997,2994045,2994094,2981807,2969519,3943855,7155119,10300847,11480464,11480416,11480367
data 12867608,12884248,11519000,3064856,7324696,1623106,1623171,1623235,1607108,1590468,2889924,7084228,11344068,12851355,12851291,12851226
data 14308098,14328834,12573186,7330306,2021890,186935,187016,187096,166874,146138,1770202,7078618,12321498,14287527,14287446,14287365
data 14325872,14335856,13490800,10869360,8313456,7395978,7396018,7396057,7386074,7375834,8155354,10776794,13332698,14315713,14315673,14315634
data 15504222,15517790,14347358,10873950,7466078,6220929,6220982,6221035,6207724,6194156,7298796,10772204,14180076,15490762,15490709,15490656
data 16617293,16634189,15269197,10943821,6618445,5111160,5111226,5111292,5094653,5077757,6376957,10702333,15027709,16600531,16600465,16600399
data 12566463,11711154,10921638,10066329,9211020,8421504,7566195,6710886,5855577,5000268,4210752,3355443,2500134,1710618,855309,0
 
`penciltool
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,0,0,0,16777215,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,0,12517376,12517376,12517376,0,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,12517376,16777215,16777215,0,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,12517376,16777215,0,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,0,12636233,0,0,0,16777215,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,0,12636233,11649842,10465069,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,12636233,11649842,0,0,13947080,16777215,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,13947080,0,12636233,11649842,10465069,0,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,0,11649842,10465069,0,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,0,12636233,11649842,10465069,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,0,0,10465069,0,0,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,0,0,0,0,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,0,0,0,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,0,0,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,0,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,13947080
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
 
 
`Fill Tool
 
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,4193787,4193787,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,4193787,16777215,4193787,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,11344068,11344068,9704872,16777215,4193787,16777215,16777215,16777215,4193787,4193787,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,11344068,9704872,9704872,12632256,175274,16777215,16777215,16777215,4193787,16777215,16777215,4193787,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,11344068,9704872,9704872,12632256,175274,11344068,11344068,11344068,175274,11344068,11344068,0,0,4193787,13947080,16777215,13947080,16777215
data 16777215,13947080,11344068,9704872,12632256,175274,11344068,11344068,11344068,175274,11344068,11344068,0,0,0,0,4193787,13947080,16777215,13947080
data 13947080,16777215,11344068,9704872,12632256,175274,175274,11344068,175274,11344068,11344068,0,0,0,0,0,9704872,4193787,13947080,16777215
data 16777215,13947080,11344068,9704872,9704872,13947080,16777215,175274,11344068,11344068,0,0,0,0,0,11344068,9704872,4193787,16777215,13947080
data 13947080,16777215,11344068,11344068,9704872,16777215,13947080,175274,11344068,0,0,0,0,0,11344068,9704872,175274,16777215,13947080,16777215
data 16777215,13947080,11344068,11344068,9704872,13947080,16777215,13947080,175274,0,0,0,0,11344068,9704872,175274,16777215,13947080,16777215,13947080
data 13947080,16777215,11344068,11344068,9704872,16777215,13947080,16777215,13947080,175274,0,0,11344068,9704872,175274,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,11344068,9704872,13947080,16777215,13947080,16777215,13947080,175274,9704872,9704872,175274,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,11344068,9704872,16777215,13947080,16777215,13947080,16777215,13947080,175274,175274,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,9704872,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
 
 
`Spray Tool
 
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,32768,16777215,32768,16777215,13947080,191,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,32768,12632256,65280,32768,191,191,191,0,0,0,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,65280,12632256,65280,12632256,65280,16777215,0,0,16777215,16777215,0,0,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,65280,12632256,32768,16777215,13947080,0,16777215,16777215,0,0,16711680,0,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,32768,12632256,65280,16777215,13947080,16777215,0,16777215,0,0,16711680,16711680,16711680,0,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,32768,12632256,65280,16777215,13947080,0,0,0,8388608,0,16711680,16711680,16711680,0,13947080,16777215
data 16777215,13947080,16777215,65280,12632256,32768,16777215,13947080,16777215,13947080,0,0,0,8388608,0,16711680,16711680,16711680,0,13947080
data 13947080,16777215,13947080,16777215,65280,16777215,13947080,16777215,13947080,16777215,13947080,0,0,0,8388608,0,16711680,16711680,0,16777215
data 16777215,13947080,16777215,32768,12632256,65280,16777215,13947080,16777215,13947080,16777215,13947080,0,0,0,8388608,0,0,16777215,13947080
data 13947080,16777215,13947080,16777215,32768,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,0,0,16777215,13947080,16777215
data 16777215,13947080,16777215,65280,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,32768,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,65280,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
 
`box
 
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13947080,16777215
data 16777215,13947080,16777215,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16777215,13947080
data 13947080,16777215,13947080,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13947080,16777215
data 16777215,13947080,16777215,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16777215,13947080
data 13947080,16777215,13947080,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13947080,16777215
data 16777215,13947080,16777215,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16777215,13947080
data 13947080,16777215,13947080,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13947080,16777215
data 16777215,13947080,16777215,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16777215,13947080
data 13947080,16777215,13947080,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13947080,16777215
data 16777215,13947080,16777215,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16777215,13947080
data 13947080,16777215,13947080,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
 
`circle
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,0,0,0,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,0,0,16777215,16777215,16777215,16777215,16777215,0,0,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215,16777215,16777215
data 16777215,16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215,16777215
data 16777215,16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215,16777215
data 16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215
data 16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215
data 16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215
data 16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215
data 16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215
data 16777215,16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215,16777215
data 16777215,16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215,16777215
data 16777215,16777215,16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,0,0,16777215,16777215,16777215,16777215,16777215,0,0,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,0,0,0,0,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
 
`line
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,0,0,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215
 
`save
 
data 16777215,13947080,16777215,13947080,16777215,13947080,65280,65280,65280,65280,65280,65280,65280,65280,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,0,0,0,0,0,65280,65280,65280,65280,65280,65280,65280,65280,0,0,0,0,0,16777215
data 16777215,0,3618815,3618815,3618815,3618815,65280,65280,65280,65280,65280,65280,65280,65280,3618815,3618815,3618815,3618815,0,13947080
data 13947080,0,255,16777215,16777215,16777215,65280,65280,65280,65280,65280,65280,65280,65280,255,255,255,3618815,0,16777215
data 16777215,0,255,16777215,16777215,16777215,65280,65280,65280,65280,65280,65280,65280,65280,255,255,255,3618815,0,13947080
data 13947080,0,255,16777215,16777215,16777215,65280,65280,65280,65280,65280,65280,65280,65280,255,255,255,3618815,0,16777215
data 16777215,0,255,255,255,255,65280,65280,65280,65280,65280,65280,65280,65280,255,255,255,3618815,0,13947080
data 13947080,0,255,255,255,255,65280,65280,65280,65280,65280,65280,65280,65280,255,255,255,3618815,0,16777215
data 16777215,0,255,255,255,255,65280,65280,65280,65280,65280,65280,65280,65280,255,255,255,3618815,0,13947080
data 13947080,0,255,255,255,255,65280,65280,65280,65280,65280,65280,65280,65280,255,255,255,3618815,0,16777215
data 16777215,0,255,65280,255,255,65280,65280,65280,65280,65280,65280,65280,65280,255,255,65280,3618815,0,13947080
data 13947080,0,255,255,65280,255,65280,65280,65280,65280,65280,65280,65280,65280,255,65280,255,3618815,0,16777215
data 16777215,0,255,255,255,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280,255,255,3618815,0,13947080
data 13947080,0,255,255,255,255,65280,65280,65280,65280,65280,65280,65280,65280,255,255,255,3618815,0,16777215
data 16777215,0,255,255,255,255,255,65280,65280,65280,65280,65280,65280,255,255,255,255,3618815,0,13947080
data 13947080,0,255,255,255,255,255,255,65280,65280,65280,65280,255,255,255,255,255,3618815,0,16777215
data 16777215,0,255,255,255,255,255,255,255,65280,65280,255,255,255,255,255,255,3618815,0,13947080
data 13947080,0,255,255,255,255,255,255,255,8421504,8421504,255,255,255,255,255,255,3618815,0,16777215
data 16777215,0,255,255,255,255,255,255,255,8421504,8421504,255,255,255,255,255,255,3618815,0,13947080
data 13947080,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16777215
 
 
`dual
data 33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,0,0,0,33023,33023,0,33023,33023,0,33023,33023,0,0,33023,33023,0,33023,33023,33023
data 33023,0,33023,0,0,33023,0,33023,33023,0,33023,0,33023,33023,0,33023,0,33023,33023,33023
data 33023,0,33023,33023,0,33023,0,33023,33023,0,33023,0,33023,33023,0,33023,0,33023,33023,33023
data 33023,0,33023,33023,0,33023,0,33023,33023,0,33023,0,0,0,0,33023,0,33023,33023,33023
data 33023,0,33023,33023,0,33023,0,33023,33023,0,33023,0,33023,33023,0,33023,0,33023,33023,33023
data 33023,0,33023,0,0,33023,0,33023,33023,0,33023,0,33023,33023,0,33023,0,33023,33023,33023
data 33023,0,0,0,33023,33023,33023,0,0,33023,33023,0,33023,33023,0,33023,0,0,0,33023
data 33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,16711680,16711680,16711680,255,255,255,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,16711680,16711680,16711680,255,255,255,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,16711680,16711680,16711680,255,255,255,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,16711680,16711680,16711680,255,255,255,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,16711680,16711680,16711680,255,255,255,33023,33023,33023,33023,33023,33023,33023,33023
data 33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023,33023
 
 
`load
data 16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,16711680,16711680,13947080,16777215,13947080,16777215,13947080,16777215,13947080,16777215,13947080
data 13947080,0,0,0,0,0,0,0,16711680,16711680,16711680,16711680,0,0,0,0,0,0,0,16777215
data 16777215,0,3618815,3618815,3618815,3618815,3618815,16711680,16711680,16711680,16711680,16711680,16711680,3618815,3618815,3618815,3618815,3618815,0,13947080
data 13947080,0,255,16777215,16777215,16777215,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,255,3618815,0,16777215
data 16777215,0,255,16777215,16777215,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,13947080
data 13947080,0,255,16777215,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,3618815,0,16777215
data 16777215,0,255,16711680,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,16711680,3618815,0,13947080
data 13947080,0,16711680,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,16711680,0,16777215
data 16777215,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,13947080
data 13947080,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,16777215
data 16777215,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,13947080
data 13947080,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,16777215
data 16777215,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,13947080
data 13947080,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,16777215
data 16777215,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,13947080
data 13947080,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,16777215
data 16777215,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,13947080
data 13947080,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,16777215
data 16777215,0,255,255,255,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,16711680,255,255,3618815,0,13947080
data 13947080,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16777215
 
`newcanvas
data 12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215
data 16777215,12632256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16777215,12632256
data 12632256,16777215,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,8421440,8421440,8421440,8421440,0,12632256,16777215
data 16777215,12632256,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,8421440,8421440,8421440,0,16777215,12632256
data 12632256,16777215,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,8421440,8421440,0,12632256,16777215
data 16777215,12632256,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,8421440,0,16777215,12632256
data 12632256,16777215,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,0,12632256,16777215
data 16777215,12632256,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,16777215,12632256
data 12632256,16777215,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,12632256,16777215
data 16777215,12632256,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,16777215,12632256
data 12632256,16777215,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,12632256,16777215
data 16777215,12632256,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,16777215,12632256
data 12632256,16777215,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,12632256,16777215
data 16777215,12632256,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,16777215,12632256
data 12632256,16777215,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,12632256,16777215
data 16777215,12632256,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,16777215,12632256
data 12632256,16777215,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,12632256,16777215
data 16777215,12632256,0,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,16777088,0,16777215,12632256
data 12632256,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12632256,16777215
data 16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256,16777215,12632256
 
`noise
data 16776960,16776960,16776960,16776960,8421376,16776960,16776960,16776960,8421376,16776960,16776960,16776960,16776960,16776960,16776960,8421376,8421376,16776960,16776960,16776960
data 16776960,16776960,16776960,8421376,16776960,16776960,16776960,16776960,8421376,8421376,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960
data 8421376,16776960,16776960,16776960,8421376,8421376,16776960,16776960,8421376,16776960,16776960,8421376,16776960,8421376,16776960,16776960,16776960,16776960,16776960,16776960
data 16776960,16776960,16776960,8421376,16776960,16776960,16776960,16776960,16776960,16776960,16776960,8421376,8421376,16776960,8421376,8421376,16776960,16776960,16776960,16776960
data 16776960,16776960,16776960,16776960,16776960,16776960,8421376,8421376,16776960,16776960,8421376,16776960,8421376,16776960,16776960,8421376,8421376,16776960,16776960,16776960
data 16776960,16776960,8421376,8421376,16776960,16776960,16776960,8421376,16776960,16776960,8421376,8421376,16776960,16776960,8421376,16776960,16776960,8421376,16776960,16776960
data 8421376,16776960,8421376,16776960,16776960,16776960,16776960,16776960,16776960,8421376,8421376,16776960,8421376,8421376,16776960,16776960,16776960,16776960,16776960,16776960
data 16776960,16776960,16776960,8421376,8421376,16776960,16776960,16776960,8421376,16776960,16776960,8421376,8421376,16776960,16776960,16776960,16776960,8421376,16776960,16776960
data 16776960,16776960,16776960,8421376,16776960,8421376,16776960,8421376,16776960,8421376,8421376,8421376,16776960,8421376,8421376,8421376,16776960,8421376,8421376,8421376
data 16776960,16776960,8421376,16776960,16776960,16776960,16776960,16776960,16776960,16776960,8421376,8421376,16776960,16776960,16776960,16776960,16776960,16776960,16776960,8421376
data 8421376,8421376,8421376,16776960,8421376,16776960,16776960,8421376,8421376,8421376,16776960,8421376,8421376,16776960,8421376,8421376,8421376,8421376,16776960,8421376
data 8421376,16776960,16776960,16776960,16776960,8421376,8421376,8421376,16776960,16776960,16776960,8421376,16776960,16776960,8421376,16776960,8421376,16776960,8421376,16776960
data 16776960,8421376,16776960,16776960,8421376,16776960,8421376,16776960,16776960,16776960,8421376,16776960,8421376,16776960,8421376,16776960,8421376,16776960,16776960,16776960
data 16776960,8421376,16776960,8421376,16776960,16776960,8421376,16776960,16776960,16776960,8421376,16776960,16776960,16776960,8421376,8421376,8421376,16776960,16776960,8421376
data 16776960,16776960,16776960,16776960,8421376,8421376,8421376,16776960,16776960,8421376,16776960,8421376,8421376,8421376,16776960,16776960,8421376,16776960,16776960,16776960
data 16776960,16776960,16776960,16776960,16776960,8421376,16776960,8421376,8421376,8421376,8421376,8421376,16776960,8421376,8421376,8421376,16776960,16776960,16776960,8421376
data 16776960,16776960,16776960,16776960,16776960,8421376,16776960,8421376,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960
data 8421376,16776960,16776960,16776960,16776960,8421376,8421376,8421376,8421376,16776960,16776960,16776960,16776960,8421376,8421376,16776960,16776960,8421376,8421376,8421376
data 8421376,16776960,8421376,16776960,16776960,16776960,16776960,16776960,8421376,8421376,16776960,8421376,16776960,16776960,16776960,8421376,8421376,8421376,16776960,16776960
data 16776960,8421376,8421376,16776960,16776960,8421376,8421376,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960,16776960,8421376,8421376,8421376,16776960
 
`psycho
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,16711680,16711680,16711680,16776960,16776960,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16711680,16711680,16711680,16711680,16711680,16776960,16776960,16776960,16776960,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16711680,16711680,16711680,16711680,16711680,16711680,16776960,16776960,16776960,16776960,16776960,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,65535,65535,16711680,16711680,16711680,16711680,16711680,16776960,16776960,16776960,16776960,255,255,16777215,16777215,16777215,16777215
data 16777215,16777215,65535,65535,65535,65535,16711680,16711680,16711680,16711680,16776960,16776960,16776960,255,255,255,255,16777215,16777215,16777215
data 16777215,16777215,65535,65535,65535,65535,65535,16711680,16711680,16711680,16776960,16776960,255,255,255,255,255,16777215,16777215,16777215
data 16777215,65535,65535,65535,65535,65535,65535,65535,16711680,16711680,16776960,255,255,255,255,255,255,255,16777215,16777215
data 16777215,65535,65535,32768,32768,32768,32768,32768,32768,16711680,255,255,255,255,255,255,255,255,16777215,16777215
data 16777215,32768,32768,32768,32768,32768,32768,16711808,16711808,16711935,16711935,16711935,16711935,16711935,16711935,16711935,16711935,16711935,16777215,16777215
data 16777215,32768,32768,32768,32768,32768,16711808,16711808,16711808,16776960,16711935,16711935,16711935,16711935,16711935,16711935,16711935,16711935,16777215,16777215
data 16777215,16777215,32768,32768,32768,16711808,16711808,16711808,16711808,16776960,16776960,16711935,16711935,16711935,16711935,16711935,16711935,16777215,16777215,16777215
data 16777215,16777215,32768,32768,16711808,16711808,16711808,16711808,16711808,16776960,16776960,16776960,16711935,16711935,16711935,16711935,16711935,16777215,16777215,16777215
data 16777215,16777215,16777215,16711808,16711808,16711808,16711808,16711808,16711808,16776960,16776960,16776960,16776960,16711935,16711935,16711935,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16711808,16711808,16711808,16711808,16711808,16776960,16776960,16776960,16776960,16776960,16711935,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16711808,16711808,16711808,16711808,16776960,16776960,16776960,16776960,16776960,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16777215,16711808,16711808,16711808,16776960,16776960,16776960,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
data 16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215
 
 
 
 
`add
data 16711935,16711935,16711935,16711935,16711935,16711935,16711935,16711935,16711935,16711935
data 16711935,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388608
data 16711935,8388736,8388736,8388736,16777215,16777215,8388736,8388736,8388736,8388608
data 16711935,8388736,8388736,8388736,16777215,16777215,8388736,8388736,8388736,8388608
data 16711935,8388736,16777215,16777215,16777215,16777215,16777215,16777215,8388736,8388608
data 16711935,8388736,16777215,16777215,16777215,16777215,16777215,16777215,8388736,8388608
data 16711935,8388736,8388736,8388736,16777215,16777215,8388736,8388736,8388736,8388608
data 16711935,8388736,8388736,8388736,16777215,16777215,8388736,8388736,8388736,8388608
data 16711935,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388608
data 8388608,8388608,8388608,8388608,8388608,8388608,8388608,8388608,8388608,8388608
 
`subtract
data 16711935,16711935,16711935,16711935,16711935,16711935,16711935,16711935,16711935,16711935
data 16711935,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388608
data 16711935,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388608
data 16711935,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388608
data 16711935,8388736,16777215,16777215,16777215,16777215,16777215,16777215,8388736,8388608
data 16711935,8388736,16777215,16777215,16777215,16777215,16777215,16777215,8388736,8388608
data 16711935,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388608
data 16711935,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388608
data 16711935,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388736,8388608
data 8388608,8388608,8388608,8388608,8388608,8388608,8388608,8388608,8388608,8388608
 
 
 
 
function test_buttons()
mx=mousex():my=mousey():ucm=mouseclick()
if mx>=5 and mx<=25 and my>=220 and my<=240 and ucm=1 then draw_mode="pencil"
if mx>=30 and mx<=50 and my>=220 and my<=240 and ucm=1 then draw_mode="flood"
if mx>=55 and mx<=75 and my>=220 and my<=240 and ucm=1 then draw_mode="spray"
if mx>=80 and mx<=100 and my>=220 and my<=240 and ucm=1 then draw_mode="box"
if mx>=105 and mx<=125 and my>=220 and my<=240 and ucm=1 then draw_mode="circle"
if mx>=130 and mx<=150 and my>=220 and my<=240 and ucm=1 then draw_mode="line"
 
if mx>=5 and mx<=15 and my>=208 and my<=218 and brush_size<10 and ucm=1 then inc brush_size:repeat:until mouseclick()=0
if mx>=16 and mx<=26 and my>=208 and my<=218 and brush_size>1 and ucm=1 then dec brush_size:repeat:until mouseclick()=0
if mx>=55 and mx<=65 and my>=208 and my<=218 and spray_size<99 and ucm=1 then inc spray_size:repeat:until mouseclick()=0
if mx>=66 and mx<=76 and my>=208 and my<=218 and spray_size>1 and ucm=1 then dec spray_size:repeat:until mouseclick()=0
if mx>=5 and mx<=15 and my>=288 and my<=298 and Noise_level<20 and ucm=1 then inc noise_level:repeat:until mouseclick()=0
if mx>=16 and mx<=26 and my>=288 and my<=298 and noise_level>1 and ucm=1 then dec noise_level:repeat:until mouseclick()=0
if mx>=30 and mx<=40 and my>=288 and my<=298 and psycho_level<20 and ucm=1 then inc psycho_level:repeat:until mouseclick()=0
if mx>=41 and mx<=50 and my>=288 and my<=298 and psycho_level>1 and ucm=1 then dec psycho_level:repeat:until mouseclick()=0
 
 
 
 
 
if mx>1 and mx<162 and my>1 and my<122 and ucm=1 then color5=point(mx,my)
if mx>1 and mx<162 and my>1 and my<122 and ucm=2 then color6=point(mx,my)
 
 
 
if mx>=100 and mx<=120 and my>=175 and my<=195 and ucm=1
   if brush_style=1
      brush_style=0
   else
      brush_style=1
   endif
   repeat
   until mouseclick()=0
endif
 
 
 if mx>=5 and mx<=25 and my>=400 and my<=420 and ucm=1 then save_image()
 if mx>=30 and mx<=50 and my>=400 and my<=420 and ucm=1 then load_image()
 if mx>=5 and mx<=25 and my>=370 and my<=390 and ucm=1 then pick_new()
 if mx>=5 and mx<=25 and my>=300 and my<=320 and ucm=1 then noise(noise_level)
 if mx>=30 and mx<=50 and my>=300 and my<=320 and ucm=1 then blur(psycho_level)
 
 
 
endfunction
 
 
 
function shift_undo()
for a = 51 to 80
   make memblock from image a,a
next a
for a=51 to 79
   make image from memblock a,a+1
   delete memblock a+1
next a
endfunction
 
function flood(xpos,ypos,new,old)
 
array insert at top color_check()
color_check(0).xpos=xpos
color_check(0).ypos=ypos
lock pixels
ink new,0
dot xpos,ypos
 
repeat
if array count(color_check())>maxel then maxel=array count(color_check())
   for a = array count(color_check()) to 0 step -1
      curx=color_check(a).xpos
      cury=color_check(a).ypos
      edge_reached=0
 
      if point(curx-1,cury)=old and curx-1>=across
         dot curx-1,cury
         array insert at bottom color_check()
         color_check(array count(color_check())).xpos=curx-1
         color_check(array count(color_check())).ypos=cury
      else
         inc edge_reached
      endif
 
      if point(curx+1,cury)=old and curx+1<=across+canvas_width
         dot curx+1,cury
         array insert at bottom color_check()
         color_check(array count(color_check())).xpos=curx+1
         color_check(array count(color_check())).ypos=cury
      else
         inc edge_reached
      endif
 
      if point(curx,cury-1)=old and cury-1>=down
         dot curx,cury-1
         array insert at bottom color_check()
         color_check(array count(color_check())).xpos=curx
         color_check(array count(color_check())).ypos=cury-1
      else
         inc edge_reached
      endif
 
      if point(curx,cury+1)=old and cury+1<=down+canvas_height
         dot curx,cury+1
         array insert at bottom color_check()
         color_check(array count(color_check())).xpos=curx
         color_check(array count(color_check())).ypos=cury+1
      else
         inc edge_reached
      endif
 
      if edge_reached=4
         array delete element color_check(),a
      endif
   next a
 
 
until array count(color_check())<0
unlock pixels
endfunction maxel
 
function make_box(startx,starty,choice,mode)
repeat
until mouseclick()=0
repeat
paste image undo_level,across,down
if choice=1
   ink color5,0
else
   ink color6,0
endif
if startx<=mousex()
   x1=startx
   x2=mousex()
else
   x1=mousex()
   x2=startx
endif
 
if starty<=mousey()
   y1=starty
   y2=mousey()
else
   y1=mousey()
   y2=starty
endif
 
if x1<across then x1=across
if x2>across+canvas_width then x2=across+canvas_width
if y1<down then y1=down
if y2>down+canvas_height then y2=down+canvas_height
 
box x1,y1,x2,y2
if brush_style=1
   if choice=1
      ink color6,0
   else
      ink color5,0
   endif
   if brush_size=1
      box x1+brush_size,y1+brush_size,x2-brush_size,y2-brush_size-1
   else
      box x1+(brush_size-1)*2,y1+(brush_size-1)*2,x2-(brush_size-1)*2,y2-(brush_size-1)*2
   endif
endif
sync
until mouseclick()=choice
repeat
until mouseclick()=0
endfunction
 
function make_line(startx,starty,choice,mode)
linemode=check_for_double()
repeat
   repeat
      paste image undo_level,across,down
      if choice=1
         ink color5,0
      else
         ink color6,0
      endif
 
      mx=mousex():my=mousey()
 
 
      if mx<across then mx=across
      if mx>across+canvas_width then mx=across+canvas_width
      if my<down then my=down
      if my>down+canvas_height then my=down+canvas_height
 
      line startx,starty,mx,my
      if brush_size>1
         for a=mx-brush_size+1 to mx+brush_size-1
               for b = my-brush_size+1 to my+brush_size-1
               x1=a:x2=startx+(a-mx):y1=b:y2=starty+(b-my)
               if x1<across then x1=across
               if x2<across then x2=across
               if y1<down then y1=down
               if y2<down then y2=down
               if x1>across+canvas_width then x1=across+canvas_width
               if x2>across+canvas_width then x2=across+canvas_width
               if y1>down+canvas_height then y1=down+canvas_height
               if y2>down+canvas_height then y2=down+canvas_height
               if brush_style=1
                  if a>mx
                     ink color6,0
                  else
                     ink color5,0
                  endif
               endif
 
               line x1,y1,x2,y2
            next b: next a
      endif
 
      sync
   until mouseclick()=choice
   newcheck=check_for_double()
   if linemode>0 and newcheck=0
      startx=mx:starty=my
      add_undo()
   else
      done=1
   endif
until done=1
repeat
until mouseclick()=0
 
endfunction
 
function check_for_double()
   repeat
   until mouseclick()=0
   starttime=timer()+100
   repeat
      if mouseclick()>0 then clicked=1
   until starttime<timer() or clicked>0
endfunction clicked
 
function add_undo()
   inc undo_level
   if undo_level>80
      shift_undo()
      undo_level=80
   endif
   get image undo_level,across,down,across+canvas_width,down+canvas_height,1
endfunction
 
 
function make_circle(startx,starty,choice,mode)
   get image 800,0,0,170,screen height(),1
 
   repeat
   until mouseclick()=0
   repeat
   ink 0,0
      box 171,0,screen width(),screen height()
      paste image undo_level,across,down
 
      if choice=1
         ink color5,0
      else
         ink color6,0
      endif
 
      mx=mousex():my=mousey()
 
 
      if mx<across then mx=across
      if mx>across+canvas_width then mx=across+canvas_width
      if my<down then my=down
      if my>down+canvas_height then my=down+canvas_height
 
      rad=abs(startx-mx)
      circle startx,starty,rad
 
      if brush_size>1
 
        for circount = 0-brush_size to brush_size
           circle startx,starty,rad+circount
           circle startx-1,starty-1,rad+circount
           circle startx+1,starty+1,rad+circount
           circle startx-1,starty+1,rad+circount
           circle startx+1,starty-1,rad+circount
           if brush_size>2
               circle startx+2,starty+2,rad+circount
               circle startx-2,starty-2,rad+circount
               circle startx-2,starty+2,rad+circount
               circle startx+2,starty-2,rad+circount
           endif
           if brush_style=1
               if circount>0
                  if choice=1
                     ink color6,0
                  else
                     ink color5,0
                  endif
               endif
           endif
 
        next circount
      endif
      paste image 800,0,0
 
      sync
   until mouseclick()=choice
 
repeat
until mouseclick()=0
 
endfunction
 
 
function enter_text(x,y)
 
   word$=""
   clear entry buffer
   repeat
   ink rgb(255,255,255),0
   box x,y,x+120,y+20
   ink 0,0
 
 
   x$=entry$(1)
 
   if x$<>""
       word$=word$+left$(x$,1)
       clear entry buffer
       repeat
       until scancode()=0
   endif
   sc=scancode()
   if sc=14 and len(word$)>0
      word$=left$(word$,len(word$)-1)
      repeat
      until scancode()=0
   endif
 
   text x,y,word$
   tl=text width(word$)
   if blink=0
      ink rgb(255,255,255),0
      box x+text width(word$)+2,y,x+text width(word$)+8,y+text height("W")
   else
      ink rgb(100,100,100),0
      box x+text width(word$)+2,y,x+text width(word$)+8,y+text height("W")
   endif
   if blinkspeed<timer()
      if blink=0
         blink=1
      else
         blink=0
      endif
      blinkspeed=timer()+250
   endif
   remstart
      ` this is to test what words were parsed and their lengths
      if array count(words())>-1
      for a=0 to array count(words())
      print words(a);"-";str$(len(words(a)))
      next a
      endif
   remend
   sync
   until scancode()=28
   repeat
      until scancode()=0
      ink rgb(212,209,201),0
      box x,y,x+140,y+21
      ink color5,0
endfunction word$
 
function save_image()
 file$=enter_text(5,430)
 file$=file$+".bmp"
 if file exist(file$)
   delete file file$
 endif
 save image file$,undo_level
endfunction
 
function blur(amount)
get image 1999,across,down,across+canvas_width,down+canvas_width,1
lock pixels
for c = 0 to amount
   for a = across to across+canvas_width-2
      for b = down to down+canvas_height-2
         x1=point(a,b):x2=point(a+1,b)
         x3=(x1+x2)/2
         dot a,b,x3
      next b
   next a
   for a = across to across+canvas_width-2
      for b = down to down+canvas_height-2
         x1=point(a,b):x2=point(a,b+1)
         x3=(x1+x2)/2
         dot a,b,x3
      next b
   next a
next c
 
 
   unlock pixels
   get image 1998,across,down,across+canvas_width,down+canvas_width,1
   paste image 1999,across,down
   paste image 1998,across+1,down+1
   ink 0,0
   box across+canvas_width+1,down,across+canvas_width+4,down+canvas_height+3
 
 
   add_undo()
   repeat
   until spacekey()=0
endfunction
 
 
function noise(amount)
lock pixels
 
   for a = across to across+canvas_width
      for b = down to down+canvas_height
 
         x1=point(a,b)
         col1=rgbr(x1):col2=rgbg(x1):col3=rgbb(x1)
         col1=col1+rnd(amount*10)-rnd(amount*10)
         col2=col2+rnd(amount*10)-rnd(amount*10)
         col3=col3+rnd(amount*10)-rnd(amount*10)
         if col1<0 then col1=0
         if col2<0 then col2=0
         if col3<0 then col3=0
         if col1>255 then col1=255
         if col2>255 then col2=255
         if col3>255 then col3=255
         ink rgb(col1,col2,col3),0
 
 
 
         dot a,b
      next b
   next a
 
   unlock pixels
 
 
   add_undo()
   repeat
   until spacekey()=0
endfunction
 
function make_canvas(x,y)
   if x>max_width then x=max_width
   if y>max_height then y=max_height
   Canvas_width=x:canvas_height=y
   ink rgb(255,255,255),0
   lock pixels
   across=(screen width()-canvas_width)/2+85
   down=((screen height()-10)-canvas_height)/2
   for a = across to across+canvas_width
      for b = down to down+canvas_height
         dot a,b
      next b
   next a
   unlock pixels
endfunction
 
function load_image()
   file$=enter_text(5,430)
   file$=file$+".bmp"
   if file exist(file$)=0 then exitfunction
   load bitmap file$,1
   canvas_width=bitmap width(1)
   canvas_height=bitmap height(1)
   if canvas_width>800 then canvas_width=800
   if canvas_height>600 then canvas_height=600
   undo_level=50
   get image undo_level,0,0,canvas_width,canvas_height,1
   delete bitmap 1
   set current bitmap 0
   across=(screen width()-canvas_width)/2+85
   down=((screen height()-10)-canvas_height)/2
   draw_interface()
   paste image undo_level,across,down
   add_undo()
 
 
 
 
 
endfunction
 
function draw_interface()
cls
ink rgb(212,209,201),0
box 0,0,165,screen height()
ink rgb(255,255,255),0
box 2,2,161,121
 
 
 
 
for a = 0 to 11
for b = 0 to 15
ink color(a,b),0
box b*10+2,a*10+2,b*10+11,a*10+11
next b
next a
endfunction
 
function pick_new()
   text 5,600,"Width (max 800)"
   text 5,650,"Height (max 600)"
   repeat
      wid$=enter_text(5,620)
      valid=0
      picked=0
      for a = 1 to len(wid$)
         xx$=mid$(wid$,a)
 
         if xx$="1" or xx$="2" or xx$="3" or xx$="4" or xx$="5" or xx$="6" or xx$="7" or xx$="8" or xx$="9" or xx$="0" then inc valid
      next a
      if valid=len(wid$)
         value1=val(wid$)
         if value1>0 and value1<=800
            canvas_width=value1
            picked=1
         endif
      endif
   until picked=1
   repeat
      wid$=enter_text(5,670)
      valid=0
      picked=0
      for a = 1 to len(wid$)
         xx$=mid$(wid$,a)
 
         if xx$="1" or xx$="2" or xx$="3" or xx$="4" or xx$="5" or xx$="6" or xx$="7" or xx$="8" or xx$="9" or xx$="0" then inc valid
      next a
      if valid=len(wid$)
         value1=val(wid$)
         if value1>0 and value1<=600
            canvas_height=value1
            picked=1
         endif
      endif
   until picked=1
   draw_interface()
   make_canvas(canvas_width,Canvas_height)
   undo_level=50
   get image undo_level,across,down,across+canvas_width,down+canvas_height,1
endfunction