| 
% programmer : alex boge
 % purpose : fun
 % ------------------------------------------------------------------
 import GUI
 var main_run : int
 main_run := Window.Open ("nooffscreenonly,nobuttonbar")
 var x, y, size, co : int
 var x1, y1, button : int
 var co_l : int := black
 x1 := -99
 y1 := -99
 var first : int                 % The menus.
 var item : array 1 .. 3 of int         % The menu items.
 var name : array 1 .. 3 of string :=
 init ("New", "Open", "Save")
 var second : int
 var item1 : array 1 .. 3 of int
 var name1 : array 1 .. 3 of string :=
 init ("Cut", "Copy", "Paste")
 
 procedure colou_r
 if x < 100 and button = 1 and whatdotcolour (x, y) = 1 then
 co_l := 1
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 2 then
 co_l := 2
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 3 then
 co_l := 3
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 4 then
 co_l := 4
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 5 then
 co_l := 5
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 6 then
 co_l := 6
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 7 then
 co_l := 7
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 8 then
 co_l := 8
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 9 then
 co_l := 9
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 10 then
 co_l := 10
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 11 then
 co_l := 11
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 12 then
 co_l := 12
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 13 then
 co_l := 13
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 14 then
 co_l := 14
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 15 then
 co_l := 15
 end if
 if x < 100 and button = 1 and whatdotcolour (x, y) = 16 then
 co_l := 16
 end if
 end colou_r
 
 proc d_colours
 % default colours
 drawline (100, 1, 100, maxy, black)
 drawfillbox (1, 360, 10, 370, 1)
 drawfillbox (12, 360, 22, 370, 2)
 drawfillbox (24, 360, 34, 370, 3)
 drawfillbox (36, 360, 46, 370, 4)
 drawfillbox (48, 360, 58, 370, 5)
 drawfillbox (60, 360, 70, 370, 6)
 drawfillbox (72, 360, 82, 370, 7)
 drawfillbox (84, 360, 94, 370, 8)
 % start second row of default colours
 drawfillbox (1, 348, 10, 358, 9)
 drawfillbox (12, 348, 22, 358, 10)
 drawfillbox (24, 348, 34, 358, 11)
 drawfillbox (36, 348, 46, 358, 12)
 drawfillbox (48, 348, 58, 358, 13)
 drawfillbox (60, 348, 70, 358, 14)
 drawfillbox (72, 348, 82, 358, 15)
 drawfillbox (84, 348, 94, 358, 16)
 end d_colours
 
 d_colours
 
 proc cut
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 colou_r
 if x < 100 and button = 1 and y < 320 then
 exit
 end if
 if x < 100 and button = 1 and y > 375 then
 exit
 end if
 if button = 1 and x > 100 then
 x1 := x
 y1 := y
 Pic.ScreenSave (100, 1, maxx, maxy, "screen.bmp")
 loop
 colou_r
 mousewhere (x, y, button)
 drawbox (x1, y1, x, y, co_l)
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 drawbox (x1, y1, x, y, white)
 drawfillbox (100, 1, maxx, maxy, white)
 Pic.ScreenLoad ("screen.bmp", 100, 1, picCopy)
 GUI.Refresh
 if button = 0 then
 Pic.ScreenSave (x1, y1, x, y, "clipboard.bmp")
 drawfillbox (x1, y1, x, y, white)
 exit
 end if
 end loop
 end if
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end cut
 
 proc copy
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 
 if x < 100 and button = 1 and y < 320 then
 exit
 end if
 if x < 100 and button = 1 and y > 375 then
 exit
 end if
 if button = 1 and x > 100 then
 x1 := x
 y1 := y
 Pic.ScreenSave (100, 1, maxx, maxy, "screen.bmp")
 loop
 colou_r
 mousewhere (x, y, button)
 drawbox (x1, y1, x, y, co_l)
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 drawbox (x1, y1, x, y, white)
 drawfillbox (100, 1, maxx, maxy, white)
 Pic.ScreenLoad ("screen.bmp", 100, 1, picCopy)
 GUI.Refresh
 if button = 0 then
 Pic.ScreenSave (x1, y1, x, y, "clipboard.bmp")
 exit
 end if
 end loop
 end if
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end copy
 
 proc paste
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 if button = 1 then
 Pic.ScreenLoad ("clipboard.bmp", x, y, picCopy)
 View.Update
 exit
 end if
 end loop
 View.Update
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end paste
 
 procedure Erase
 drawfillbox (101, 1, maxx, maxy, white)
 end Erase
 
 procedure Open_file
 var prompt_file : int
 var fileName : string
 prompt_file := Window.Open ("graphics:320,25")
 put "Name of file: " ..
 get fileName
 Window.Hide (prompt_file)
 Window.SetActive (main_run)
 var pic1 : int := Pic.FileNew (fileName + ".bmp")
 if pic1 = 0 then
 else
 var pic2 : int := Pic.Scale (pic1, maxx - 100, maxy)
 Pic.Draw (pic2, 101, 1, picCopy)
 end if
 end Open_file
 
 procedure Save
 var prompt_save : int
 prompt_save := Window.Open ("graphics:200;30")
 var file_name : string
 put "Save as: " ..
 get file_name
 Window.Hide (prompt_save)
 Window.SetActive (main_run)
 Pic.ScreenSave (101, 1, maxx, maxy, file_name + ".bmp")
 end Save
 
 % Create the menus
 first := GUI.CreateMenu ("File")
 item (1) := GUI.CreateMenuItem (name (1), Erase)
 item (2) := GUI.CreateMenuItem (name (2), Open_file)
 item (3) := GUI.CreateMenuItem (name (3), Save)
 second := GUI.CreateMenu ("Edit")
 item1 (1) := GUI.CreateMenuItem (name1 (1), cut)
 drawfillbox (101, 1, maxx, maxy, white)
 item1 (2) := GUI.CreateMenuItem (name1 (2), copy)
 item1 (3) := GUI.CreateMenuItem (name1 (3), paste)
 % --------------------- argh problems here---------------------
 procedure drawdots
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 colou_r
 if x < 100 and button = 1 and y < 320 then
 exit
 end if
 if x < 100 and button = 1 and y > 375 then
 exit
 end if
 if x1 = -99 and y1 = -99 then
 x1 := x
 y1 := y
 end if
 if button = 1 and x > 100 then
 drawline (x1, y1, x, y, co_l)
 x1 := x
 y1 := y
 end if
 if button = 0 then
 x1 := -99
 y1 := -99
 GUI.Refresh
 end if
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end drawdots
 
 proc quiting
 break
 % loop
 %     mousewhere (x, y, button)
 %     locate (1, 1)
 %     put y
 %     View.Update
 % end loop
 end quiting
 
 procedure line1
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 colou_r
 if button = 1 and x < 100 and y < 320 then
 exit
 end if
 if x < 100 and button = 1 and y > 375 then
 exit
 end if
 if button = 1 and x > 100 then
 x1 := x
 y1 := y
 Pic.ScreenSave (100, 1, maxx, maxy, "screen.bmp")
 Pic.ScreenSave (1, 370, 100, maxy, "screen1.bmp")
 loop
 colou_r
 mousewhere (x, y, button)
 drawline (x1, y1, x, y, co_l)
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 drawline (x1, y1, x, y, white)
 drawfillbox (100, 1, maxx, maxy, white)
 Pic.ScreenLoad ("screen.bmp", 100, 1, picCopy)
 GUI.Refresh
 if button = 0 then
 drawline (x1, y1, x, y, co_l)
 exit
 end if
 end loop
 end if
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end line1
 
 procedure box1
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 colou_r
 if x < 100 and button = 1 and y < 320 then
 exit
 end if
 if x < 100 and button = 1 and y > 375 then
 exit
 end if
 if button = 1 and x > 100 then
 x1 := x
 y1 := y
 Pic.ScreenSave (100, 1, maxx, maxy, "screen.bmp")
 loop
 colou_r
 mousewhere (x, y, button)
 drawbox (x1, y1, x, y, co_l)
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 drawbox (x1, y1, x, y, white)
 drawfillbox (100, 1, maxx, maxy, white)
 Pic.ScreenLoad ("screen.bmp", 100, 1, picCopy)
 GUI.Refresh
 if button = 0 then
 drawbox (x1, y1, x, y, co_l)
 exit
 end if
 end loop
 end if
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end box1
 
 procedure box2
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 colou_r
 if x < 100 and button = 1 and y < 320 then
 exit
 end if
 if x < 100 and button = 1 and y > 375 then
 exit
 end if
 if button = 1 and x > 100 then
 x1 := x
 y1 := y
 Pic.ScreenSave (100, 1, maxx, maxy, "screen.bmp")
 loop
 colou_r
 mousewhere (x, y, button)
 drawfillbox (x1, y1, x, y, co_l)
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 drawfillbox (x1, y1, x, y, white)
 drawfillbox (100, 1, maxx, maxy, white)
 Pic.ScreenLoad ("screen.bmp", 100, 1, picCopy)
 GUI.Refresh
 if button = 0 then
 drawfillbox (x1, y1, x, y, co_l)
 exit
 end if
 end loop
 end if
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end box2
 
 procedure colour_get
 var winID : int
 winID := Window.Open ("title:colours,graphics:500,220,position:middle;center")
 var a, b : int
 a := 1
 b := 5
 for i : 0 .. 140
 drawfillbox (a, 1, b, 100, i)
 a := a + 5
 b := b + 5
 View.Update
 end for
 % =========================
 var c, v : int
 c := 1
 v := 5
 for i : 140 .. 255
 drawfillbox (c, 100, v, 200, i)
 c := c + 5
 v := v + 5
 View.Update
 end for
 var x, y, button : int
 loop
 mousewhere (x, y, button)
 View.Update
 if button = 1 then
 co_l := whatdotcolour (x, y)
 Window.Hide (winID)
 exit
 end if
 end loop
 end colour_get
 
 procedure erase
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 if x < 100 and button = 1 and y < 320 then
 exit
 end if
 if x < 100 and button = 1 and y > 375 then
 exit
 end if
 if button = 1 and x > 105 then
 drawfillbox (x - 5, y - 5, x + 5, y + 5, white)
 end if
 View.Update
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end erase
 
 proc p_brush
 var the_x : int
 var the_y : int
 loop
 View.Set ("offscreenonly")
 mousewhere (x, y, button)
 colou_r
 if button = 1 and x > 110 then
 loop
 mousewhere (x, y, button)
 randint (the_x, x - 10, x + 10)
 randint (the_y, y - 10, y + 10)
 if sqrt (((the_x - x) * (the_x - x)) + ((the_y - y) * (the_y - y))) < 10 then
 drawdot (the_x, the_y, co_l)
 end if
 View.UpdateArea (100, 1, maxx, maxy)
 if button = 0 then
 exit
 end if
 end loop
 end if
 if button = 1 and x < 100 and y < 345 then
 exit
 end if
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end p_brush
 
 procedure circleE
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 colou_r
 if x < 100 and button = 1 and y < 320 then
 exit
 end if
 if x < 100 and button = 1 and y > 375 then
 exit
 end if
 colou_r
 if button = 1 and x > 100 then
 x1 := x
 y1 := y
 Pic.ScreenSave (100, 1, maxx, maxy, "screen.bmp")
 loop
 mousewhere (x, y, button)
 drawoval (x1 + (x - x1), y1 + (y - y1), x - x1, y - y1, co_l)
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 drawbox (x1, y1, x, y, white)
 drawoval (100, 1, maxx, maxy, white)
 Pic.ScreenLoad ("screen.bmp", 100, 1, picCopy)
 GUI.Refresh
 if button = 0 then
 drawoval (x1 + (x - x1), y1 + (y - y1), x - x1, y - y1, co_l)
 exit
 end if
 end loop
 end if
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end circleE
 
 procedure circleF
 View.Set ("offscreenonly")
 loop
 mousewhere (x, y, button)
 colou_r
 if x < 100 and button = 1 and y < 320 then
 exit
 end if
 if x < 100 and button = 1 and y > 375 then
 exit
 end if
 colou_r
 if button = 1 and x > 100 then
 x1 := x
 y1 := y
 Pic.ScreenSave (100, 1, maxx, maxy, "screen.bmp")
 loop
 mousewhere (x, y, button)
 drawfilloval (x1 + (x - x1), y1 + (y - y1), x - x1, y - y1, co_l)
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 drawbox (x1, y1, x, y, white)
 drawfilloval (100, 1, maxx, maxy, white)
 Pic.ScreenLoad ("screen.bmp", 100, 1, picCopy)
 GUI.Refresh
 if button = 0 then
 drawfilloval (x1 + (x - x1), y1 + (y - y1), x - x1, y - y1, co_l)
 exit
 end if
 end loop
 end if
 View.UpdateArea (100, 1, maxx, maxy)
 GUI.Refresh
 end loop
 drawfillbox (1, 1, 100, maxy, white)
 Pic.ScreenLoad ("screen1.bmp", 1, 370, picCopy)
 d_colours
 GUI.Refresh
 View.Set ("nooffscreenonly")
 end circleF
 
 procedure buttons
 var dot : int := GUI.CreateButton (1, 3, 20, "Hand Draw", drawdots)
 var Quit : int := GUI.CreateButton (1, 60, 50, "Quit", quiting)
 var line : int := GUI.CreateButton (1, 30, 50, "Line", line1)
 var box : int := GUI.CreateButton (1, 90, 20, "Box", box1)
 var fillb : int := GUI.CreateButton (50, 90, 10, "Fill", box2)
 var custc : int := GUI.CreateButton (1, 320, 50, "Custom", colour_get)
 var Erase : int := GUI.CreateButton (1, 120, 50, "Erase", erase)
 var pbrush : int := GUI.CreateButton (1, 150, 50, "Spray Paint", p_brush)
 var circle : int := GUI.CreateButton (1, 210, 50, "Circle", circleE)
 var cirlcef : int := GUI.CreateButton (1, 180, 50, "Fill", circleF)
 end buttons
 
 buttons
 View.UpdateArea (100, 1, maxx, maxy)
 
 loop
 exit when GUI.ProcessEvent
 View.UpdateArea (100, 1, maxx, maxy)
 end loop
 
 
 |