'============================
'   BB_v06_POND_v05.txt      
'============================

'...v0.41 BUGS
'... FillPolygon draws outline when not asked to.
'... sgn(1) --> 0
'... elseif ... only 1 allowed per "if...endif" structure
'... (restriction, not bug)...BB does not permit superfluous brackets in math expressions. (They could be useful to coder).

'...V0.6 bugs
'...error calling SOW functions


'WISHLIST
'... Open and load from (user dialog selected) text file
'... Write text to user nominated file
'... Save_Graphics_Area_to_File
'... record graphics area to mpeg
'... record sound to mpeg
'... Multiple "elseif" in an "If..endif" structure.
'... Simple 3D object visualization with lights, cameras
'... In-browser code editing and debugging
'... Save app as standard html+ file(set) inc. BASIC source code, assets (images, sounds)
'... Allow external JS functions (library or user collected) to be called by BASIC code
'... Basic GUI library (buttons, dialogs, checkboxes, multiline textboxes, listboxes, etc.)
'... Ability for user to access local OS folder system, e.g. for file selection.
'... GUI designer (version 999!) 
'... Joystick support
'... Mouse Cursor select from range or hide



'...SOW notes
'... BB does not allow simple javascript var xx=123, requires var xx as number: xx=123
'... BB does not like the brackets in a statement like: If (condition) then
'... BB does not allow += operator
'... BB format of IF THEN ELSEIF ELSE ENDIF Upper or Lower case usage not clear to me
'... BB allows Elseif
'... in BB xxx= SOW_Handle_Mouse_Event()....dont forget the brackets! and a final space before the comment quote

'                                                  
'             OUTLINE of POND program              
'                                                  
'... Outline                                       
'... Key Variables                                 
'... Arrays                                        
'... Global Variables                              
'... Value Assignments                             
'... OnLoad   (initialization)                     
'... OnUpdate (time step)                          
'... OnDraw   (                                    
'...      GRAFITI                                  
'...      MOVE THE peaS                            
'...          *PEA_ACCELERATION                    
'...          apply Pop                            
'...      DRAW SHAPES                              
'...      Move & Plot RECTANGLES                   
'...      PLOT BANNERS                             
'...      DRAW BUTTON STUFF                        
'...      Draw MouseMode Indicator                 
'...      Draw all buttons                         
'...      CHECK FOR MOUSE STUFF                    
'... MOUSE EVENT HANDLERS                          
'...	sow check for mouse left button depressed  
'...    OnMouseMoved                               
'...    OnMouseReleased                            
'...    sow handle mouse event                     
'... *SOFT BUTTONS                                 
'...    *SOW_DEFINE_BUTTONS                        
'...    sow define button                          
'...    sow draw button                            
'...    SOW_Soft_Button_Click_Handler              
'...    sow draw mousemode indicators              
'... OnKeyPressed                                  
'... SOW_make_new_pea                              
'... sow set color                                 
'... sow colorint to rgb                           
'... sow rgb to integer                            
'... sow check if 2Dpoint inside 2Dbox             
'... SOW_Zap_pea_at_MousePos                       
'... SOW_Get_User_Input_str                        
'... SOW_Plot_Banner_Text 
'                         
'                         
'... MESSING ABOUT                                 



                                                  
'... KEY VARIABLES                                 
'                                                  


'''''KEYVAL(PAGE_TITLE,str,POND)
'''''KEYVAL(CANVAS01_ID,str,My_Kanvas_A) 
'''''KEYVAL(CANVAS01_WIDTH,int,700)  
'''''KEYVAL(CANVAS01_HEIGHT,int,500) 
var CANVAS01_WIDTH as number 
CANVAS01_WIDTH=700

var CANVAS01_HEIGHT as number  
CANVAS01_HEIGHT=500

var maxNumpeas as number
var maxNumpeasForArray as number
maxNumpeas=2000
maxNumpeasForArray=1+maxNumpeas

'                                                  
'... ARRAYS                                        
'                                                  
var  mypeas_PosX[maxNumpeasForArray] as array 
var  mypeas_PosY[maxNumpeasForArray] as array
var  mypeas_VelX[maxNumpeasForArray] as array
var  mypeas_VelY[maxNumpeasForArray] as array
var  mypeas_Radius[maxNumpeasForArray] as array
var  mypeas_FillColor[maxNumpeasForArray][3] as array
var  mypeas_Mood[maxNumpeasForArray] as array
var  mypeas_Type[maxNumpeasForArray] as array

var  RposCenX[maxNumpeasForArray] as array
var  RposCenY[maxNumpeasForArray] as array
var  RposXmin[maxNumpeasForArray] as array
var  RposXmax[maxNumpeasForArray] as array
var  RposYmin[maxNumpeasForArray] as array
var  RposYmax[maxNumpeasForArray] as array
var  moiRects_VelX[maxNumpeasForArray] as array
var  moiRects_VelY[maxNumpeasForArray] as array
          
'-------------------------------------------
'... VAR statements                         
'                                           
'                                           

var iii as number    '''''
var jjj as number    '''''
var pos_x  as number ''''' 400
var pos_y  as number ''''' 300
var vel_X  as number ''''' 2
var vel_Y  as number ''''' 4

var i_posX  as number ''''' 20
var i_posY  as number ''''' 20
var nextpea_velX  as number ''''' 0.5
var nextpea_velY  as number ''''' 0.5
var numpeas  as number ''''' 128
var numRects  as number ''''' 12
var pea_rad  as number ''''' 10.0
var pea_fillStyle  as number ''''' "#444444"

var VelMag  as number ''''' 1.0
var Increase_VelMag  as number ''''' IsFalse
var Decrease_VelMag  as number ''''' IsFalse

var usr_string  as string ''''' ""
var Pos_x  as number ''''' 0 
var Pos_y  as number ''''' 0

var Mov_Rect_Pos_X as number '''''0
var Mov_Rect_Pos_Y as number '''''0
var MR_dX as number '''''
var MR_dY as number '''''

var User_Click_Mode as string '''''""
var Tcolor  as string ''''' ""
var Tfont  as string ''''' ""
var Purge_Zapped_peas  as number ''''' IsFalse

var brocol_Yellow     as string ''''' "#FFFF00"
var brocol_Cyan       as string ''''' "#00FFFF" 
var brocol_Magenta    as string ''''' "#FF00FF" 
var brocol_Red        as string ''''' "#FF0000"
var brocol_Green      as string ''''' "#00FF00" 
var brocol_Blue       as string ''''' "#0000FF" 
var brocol_White      as string ''''' "#FFFFFF" 
var brocol_Black      as string ''''' "#000000" 

Var mouse_event_Str as string	' a global button variable
Var g_mousex as number	' to hold the mouse x value
Var g_mousey as number	' to hold the y

var mouse_event_X as number
var	mouse_event_Y as number
var mouse_button_left_drag_Active as number	
var mouse_button_Left_released_softButtonNum as number
var mouse_button_Left_released_softButtonName as string

var Mouse_Mode_name as string
var Mouse_Mode_num as number
var spray_peas_wait_var as number
var spray_peas_wait_const as number
    spray_peas_wait_const = 0.02 '...wait period (secs) between spraying successive peas.

var	Buttons_Name[100] as array
var Buttons_Command[100] as array
var Buttons_Label[100] as array
''var	Buttons_State[100] as array  '... 1 = "ON"   0 = "OFF"
var	Buttons_Color[100] as array
var Buttons_Xmin[100] as array
var Buttons_Xmax[100] as array
var Buttons_Ymin[100] as array
var Buttons_Ymax[100] as array

var numButtons as number
var Bnum as number
var Bname as string
var BcolorON as number
var BcolorOFF as number
var Xmin as number
var Xmax as number
var Ymin as number
var Ymax as number

var SinceLoadTime as number
var SOW_ColorInt_to_RGB_OUTstr as string
var nextpeaRadius as number
var deltapeaRadius as number

	var TposX as number
	var TposY as number
	var Bname as string
	var Bwidth as number
	var Bheight as number
	var Bcolor as number
	
	var xxx as number
    var sss as string
	var Earthling_Input_str as string
	var dXX as number
	var dYY as number
	var RectColor as number
	var TextColor as number
	var scaleX as number
	var scaleY as number	
	var pea_Speed_Mag as number
	var delta_pea_Speed_Mag_Factor as number
	
	pea_Speed_Mag =1
	delta_pea_Speed_Mag_Factor =1.1
	var peaType as string
	var NextPeaType as string
	NextPeaType = "Circle"

	var oText as string

	var Release_The_frog as number
	var frog_posX as number
	var frog_posY as number
	var frog_dPos_X as number
	var frog_dPos_Y as number
	var frog_velX as number
	var frog_velY as number
	var frog_velMag as number
	var frog_velMag_Initial as number
	frog_velMag_Initial = 50
	
	var frog_Bearing as number
	var frog_head_Radius as number
	frog_head_Radius = 20
	var frog_Target_Pea_Rad as number
	var frog_Target_Pea_Num as number
	
	
	
' dolphin

' MIXED Var and values
	var bRed as number
	var bGreen as number
	var bBlue as number

	var IsTrue as number
	IsTrue=1
	var IsFalse as number
	IsFalse=0

	var junk as number
	var sow_colorBits as number
	sow_colorBits=256 '...16 '...numbers of colorBits in system
	var sow_colorBits_colorBits as number
	
	var Attract_Peas_to_Mouse_Position as number
	Attract_Peas_to_Mouse_Position = false
	var Repulse_Peas_from_Mouse_Position as number
	Repulse_Peas_from_Mouse_Position = false
	var deltaTup as number
	
	
' ASSIGN VALUES
iii=0
jjj=0
pos_x = 400
pos_y = 300
vel_X = 2
vel_Y = 4

i_posX = 20
i_posY = 20
nextpea_velX = 0.5
nextpea_velY = 0.5
numpeas = 128
numRects = 12
pea_rad = 10.0


VelMag = 1.0
Increase_VelMag = IsFalse
Decrease_VelMag = IsFalse


Pos_x = 0 
Pos_y = 0

Mov_Rect_Pos_X=0
Mov_Rect_Pos_Y=0
MR_dX=0
MR_dY=0

Purge_Zapped_peas = IsFalse

User_Click_Mode=""
Tcolor = ""
Tfont = ""

usr_string = ""
pea_fillStyle = "#444444"
brocol_Yellow    = "#FFFF00"
brocol_Cyan      = "#00FFFF" 
brocol_Magenta   = "#FF00FF" 
brocol_Red       = "#FF0000"
brocol_Green     = "#00FF00" 
brocol_Blue      = "#0000FF" 
brocol_White     = "#FFFFFF" 
brocol_Black     = "#000000" 

'-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' FunctionS 



Var sndDing as number	' a variable to hold the sound


'----------------------------------------------------------------------------------------------------------------------------------------------
' ONLOAD                       
'                              
'                              
Function OnLoad()

	var xxx as number

	'... this is the callback OnLoad.  It gets called one time when the web page loads
	'... put in variables that need to be initialized
	'... load sounds and images in here also
	
	'...SOUNDS
	setBackgroundColor(255,128,128)
	sndDing = SoundLoad("sfx/ding.ogg", "sfx/ding.mp3")


	'...BUTTONS
	
	xxx = SOW_Define_Buttons()
	

    '--------------------------------------
    '...initialize  peas
	nextpeaRadius=1 
	deltapeaRadius=0.25
	
	peaType = "Triangle"
	
    for iii = 1 to numpeas STEP 1    


		mypeas_Type[iii]= peaType
		mypeas_PosX[iii] = i_posX   
		mypeas_PosY[iii] = i_posY  
		mypeas_VelX[iii] = nextpea_velX   
		mypeas_VelY[iii] = nextpea_velY
		
        mypeas_Radius[iii] =  nextpeaRadius '12 + iii/4
        mypeas_Mood[iii] = 1
		
		bRed   = Int(255*i_posX/CANVAS01_WIDTH)
		bGreen = Int(iii+100*i_posY/CANVAS01_HEIGHT)
		bBlue  = Int(0.5* bRed + 0.3* bGreen)
		
		mypeas_FillColor[iii][0] = bRed 
		mypeas_FillColor[iii][1] = bGreen 
		mypeas_FillColor[iii][2] = bBlue
		
        '...Increment the initial values for the next pea
        i_posX = i_posX+2
        i_posY = i_posY+2
        nextpea_velX = nextpea_velX +.05
        nextpea_velY = nextpea_velY +.05
		nextpeaRadius=nextpeaRadius + deltapeaRadius

    next iii           

    '-------------------------------------------------------------------------
    '... Initialize Rectangles (these are presently not considered as peas)

    var Rect_Centre_i_posX as number
    var Rect_Centre_i_posY as number
    var Rect_X_width as number
    var Rect_Y_height as number
    var mmX as number
    var mmY as number
	
     Rect_Centre_i_posX = 200
     Rect_Centre_i_posY = 200
     Rect_X_width = 32
     Rect_Y_height = 16
     mmX = 16
     mmY = 12	

    for jjj =  1 to numRects 'STEP 1
        
        
        '...adjust Centre Position
        Rect_Centre_i_posX =  Rect_Centre_i_posX+mmX
        Rect_Centre_i_posY =  Rect_Centre_i_posY+mmY

        '...define XY limits
        RposXmin[jjj] = Rect_Centre_i_posX - Rect_X_width/2
        RposXmax[jjj] = Rect_Centre_i_posX + Rect_X_width/2
        RposYmin[jjj] = Rect_Centre_i_posY - Rect_Y_height/2
        RposYmax[jjj] = Rect_Centre_i_posY + Rect_Y_height/2        
        
        RposCenX[jjj] = Rect_Centre_i_posX
        RposCenY[jjj] = Rect_Centre_i_posY
        
        '...define Velocity
        moiRects_VelX[jjj] =  Rect_Centre_i_posX/100 '...or whatever
        moiRects_VelY[jjj] =  Rect_Centre_i_posY/100
            

    next jjj

    '...-------------------------------------------------
    '...Initialize LABELS
    Mov_Rect_Pos_X=0
    Mov_Rect_Pos_Y=0
    MR_dX=0.0
    MR_dY=0.2

''''' old browzic END Function   '...SOW_Init_Play_Objects() 

EndFunction '''''...Function OnLoad()


'----------------------------------------------------------------------------------------------------------------------------------------------------
'                                                                                                            
'     ON UPDATE                    ...should contain delta_time sensitive stuff                              
'                                                                                                            

Function OnUpdate(dT as number)
	
'muppet
	
	deltaTup = dT
	var ZapType as string
	var New_Pea_Type as string
	var Do_Spray_Peas as number
	Do_Spray_Peas = false
	 
	Attract_Peas_to_Mouse_Position = false
	Repulse_Peas_from_Mouse_Position = false
	
	SinceLoadTime = SinceLoadTime + deltaTup	
	
	
	'--------------------------------------------------------------------
	if mouse_button_left_drag_Active == true then
		
		if Mouse_Mode_name == "Mouse_Spray_Circles" then
			Do_Spray_Peas = true
			NextPeaType = "Circle"
		elseif Mouse_Mode_name == "Mouse_Spray_Triangles" then
			Do_Spray_Peas = true
			NextPeaType = "Triangle"
		endif
		
		if Do_Spray_Peas == true then   
		   if spray_peas_wait_var < spray_peas_wait_const then
				
				spray_peas_wait_var = spray_peas_wait_var + deltaTup
				
		   else '...time to spray a new pea at current mouse position
				
				spray_peas_wait_var = 0
				mouse_event_X = MouseX()
				mouse_event_Y = MouseY()
				
				junk = SOW_make_new_pea (mouse_event_X, mouse_event_Y)
				if junk = false then
					Mouse_Mode_name=""
				endif
		   endif
		
		endif
		
		if Mouse_Mode_name == "Mouse_Flame_Peas" then  
		'msgbox("FLAMING")
		
				'...Get current mouse position
				mouse_event_X = MouseX()
				mouse_event_Y = MouseY()	

				'...Find youngest pea pricked by flaming mouse position and Zap it
				ZapType = "FLAME"
				xxx = SOW_Zap_pea_at_MousePos(ZapType, mouse_event_X,mouse_event_Y)
				
		endif
		
		if Mouse_Mode_name == "Mouse_Pop_Peas" then
		
				'...Get current mouse position
				mouse_event_X = MouseX()
				mouse_event_Y = MouseY()			
				'...Find youngest pea pricked by flaming mouse position and Zap it
				ZapType="POP"
				xxx = SOW_Zap_pea_at_MousePos(ZapType, mouse_event_X,mouse_event_Y)
		endif
		
		if Mouse_Mode_name == "Mouse_Attract_Peas" then
		
				Attract_Peas_to_Mouse_Position = true
				'...Get current mouse position
				mouse_event_X = MouseX()
				mouse_event_Y = MouseY()
				
		elseif Mouse_Mode_name == "Mouse_Repulse_Peas" then
		
				Repulse_Peas_from_Mouse_Position = true
				'...Get current mouse position
				mouse_event_X = MouseX()
				mouse_event_Y = MouseY()				
		endif
	endif

EndFunction '...Function OnUpdate()   
'...                                  


'------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'                                                                
'       ON DRAW                                                  
'... this is the callback OnDraw, 
'... it is called once per game loop 
'... (hmmm, surely we should be able to call it at lower frew to the OnUpdate routine)
'... Put all of your drawing commands in here                    

Function OnDraw()


	
	'var prompt_string  as string
	'var default_string as string
	
	
	'prompt_string  ="Give me your name"
	'default_string ="John Smith"
	'msgbox(prompt_string+default_string)
	'response=inputbox(prompt_string,default_string)


	' GRAFITI
	
	'...Note that the draw order in this function  
	'...dictates the back_to_front order of drawing
	'...draw's issued earlier will be overwritten by draw''s issued later in the function
	''var fred as string
	''fred = "Hello I am fred"
	''var fred_len as number
	''...Attempt to call a function in a JS library fails as compiler doesnt know to pass it thru
	''fred_len = SOW_Len(fred)'...Undeclared function
	''Print (fred_len, 300,300)

 	setColor(0,0,0)
	usr_string = "SinceLoadTime time: " + Str$(SinceLoadTime)
	Print (usr_string,300,300)

 	setColor(0,0,0)
	usr_string = "Number of peas: " + Str$(numpeas)
	Print (usr_string,300,400)

	setColor(0,0,0)
	Print("Press P key to purge zapped peas", 450, 400)
	
	setFont("12pt Consolas")
	usr_string = "This is a quick rough demo of a small part of the capabilities of BrowserBasic"
	Print(usr_string, 400, 200)
	setFont("12pt Consolas")
	 '''''        '...alert("VelMag = " + VelMag)
	 '''''        usr_string = "VelMag = waiting for codefix" '''+ Str$(VelMag)
	 '''''        Pos_x = 200
	 '''''        Pos_y = 200
	 '''''        Print  (usr_string, Pos_x, Pos_y) ''''',"","")
	 '''''   else If  Decrease_VelMag = IsTrue then
	 '''''        VelMag = VelMag/1.1
	 '''''        Decrease_VelMag = IsFalse         
		'''''	 '...alert("VelMag = " + VelMag)
	 '''''        usr_string = "VelMag = waiting for codefix" '''+ Str$(VelMag)
	 '''''       Pos_x = 200
	 '''''       Pos_y = 200
	 '''''        Print  (usr_string, Pos_x, Pos_y)
	 '''''   else
		'''''	
		'''''	VelMag=1
		'''''	
	 '''''   Endif
	 '''''   endif'....
	 '''''   
 
 
    '-----------------------------------------------------------------
    '...MOVE THE peaS

 
   ''msgbox("Movin peas")
   
    '...pea_rad = pea_rad + 0.2 '...0.001
    '...If (pea_rad > 100 ) pea_rad = 1

    '......Loop thru all the peas
	
	frog_Target_Pea_Rad =999999
	
	
	var pea_Mood as number
	Target_Pea_Selected = false
	var Target_Pea_Selected as number
	
    for iii = 1 to numpeas STEP 1      '......NB we ignore item 0 in the array
    
        pea_Mood = mypeas_Mood[iii] 
        peaType = mypeas_Type[iii] 
        If Purge_Zapped_peas = true AND pea_Mood = 0 then
        
            mypeas_Mood[iii] =-1 '...mood = -1  means do not display this pea again
        Endif
    
        If pea_Mood >= 0 then
            
            pos_x = mypeas_PosX[iii]
            pos_y = mypeas_PosY[iii]
            vel_X = mypeas_VelX[iii]
            vel_Y = mypeas_VelY[iii]
            pea_rad = mypeas_Radius[iii]
          
            '......update Pea Velocities

            If pos_x + vel_X > CANVAS01_WIDTH OR pos_x + vel_X < 0 then   '...reflect velocity off a side wall
              vel_X = 0 - vel_X
            
            Endif 

            If pos_y + vel_Y > CANVAS01_HEIGHT OR pos_y + vel_Y < 0 then '...reflect vertical velocity off top or base wall
              vel_Y = 0 - vel_Y
             
            Endif
			
var dposX as number
var dposY as number
var dposSqd as number
var InvDistSqd as number
var InvDistQuad as number
var DistFactor as number
var dVelX as number
var dVelY as number
var accelerate_mouse  as number
var AccMag as number
var dposXsqd as number
var dposYsqd as number
var dpos as number
var New_Vel_Mag as number

			accelerate_mouse =0
			If Attract_Peas_to_Mouse_Position == true then
				accelerate_mouse = 1
			elseif Repulse_Peas_from_Mouse_Position== true then
				accelerate_mouse = -1
			endif
			
			'... *PEA_ACCELERATION
			if accelerate_mouse <>0 then 
			
				'...Get current mouse position
				mouse_event_X = MouseX()
				mouse_event_Y = MouseY()
				
				'...Measure displacements from PeaCentre  to MousePos,
				dposX = mouse_event_X-pos_x
				dposY = mouse_event_Y-pos_y
				dposXsqd = dposX*dposX
				dposYsqd = dposY*dposY
				dposSqd = dposXsqd + dposYsqd
				dpos = sqrt(dposSqd)
				
				'----------------------------
				'...Just give pea a velocity according to dist & dirn from mouse
				'New_Vel_Mag = 1000/dposSqd
				'vel_X = -1 * dposX*New_Vel_Mag*accelerate_mouse
				'vel_Y = -1 * dposY*New_Vel_Mag*accelerate_mouse				

					var minrad as number
					var minradsqd as number
					var eposXsqd as number
					var eposYsqd as number
					var eposSqd as number
					var eposX as number
					var eposY as number
					var epos as number
					var tooClose as number
					minradsqd = 100
					AccMag = 20000
					
					tooClose = false
					
					If accelerate_mouse == 1 AND dpos < pea_rad then '...only accelerate this Pea if mouse is outside radius of pea
						tooClose = true
					endif
					
					if tooClose == false then	
						eposXsqd = max(minradsqd,dposXsqd)'...to prevent excessive force from intra-radial proximity
						eposYsqd = max(minradsqd,dposYsqd)
						eposX = sqrt(eposXsqd)*SOW_sgn(dposX)
						eposY = sqrt(eposYsqd)*SOW_sgn(dposY)
						
						eposSqd = eposXsqd + eposYsqd '...always positive
						epos = sqrt(eposSqd)
						'InvDistSqd = 1/eposSqd
						'InvDistQuad = InvDistSqd*InvDistSqd
						'DistFactor = InvDistSqd 
						DistFactor = 1 / eposSqd
var accX as number
var accY as number						
						accX = DistFactor * eposX/epos
						accY = DistFactor * eposY/epos
						dVelX = accX * accelerate_mouse * AccMag * deltaTup
						dVelY = accY * accelerate_mouse * AccMag * deltaTup
						vel_X = vel_X + dVelX
						vel_Y = vel_Y + dVelY
						
						'if iii == 129 then
						'	msgbox("DposX:" + dposX + " eposXsqd:" + eposXsqd + " Epos x:" + eposX + " y:" + eposY + " dVelX:"+dVelX+" dVelY:"+dVelY)
						'endif
					else
					   'xxx=2
					endif
			endif
			
			'...
var doBang as number
var ampX as number
var ampY as number
ampX=0.1
ampY=0.1
			'...apply Pop                
			if mypeas_Mood[iii] = 99 then  '...Pop mode jet about, shrink, burst.
				
				pea_rad = pea_rad*0.99
				if pea_rad < 5 then '...purge this pea
					 mypeas_Mood[iii] =-1
					 doBang = true
					 setColor (255,255,255)			
			         FillCircle(pos_x, pos_y, 30)
					 
				endif
				
				ampX=ampX* 5
				ampY=ampY* 5
				vel_X=vel_X*1.001*rand(0.98,1.02)
				vel_Y=vel_Y*1.001*rand(0.98,1.02)
				'VelMag = 1.2
				
			else	'...apply cubic drag to slow down excessively fast peas
			
				var drag_factor as number
				drag_factor = 5		
				'vel_X = vel_X  * 1 - drag_factor * pow(vel_X,2)	
				'vel_Y = vel_Y  * 1 - drag_factor * pow(vel_Y,2)	
	
			endif
			
            '......update pea Positions      

            pos_x  = pos_x+vel_X*ampX*pea_Speed_Mag
            pos_y  = pos_y+vel_Y*ampY*pea_Speed_Mag

            '......update pea array values   

            mypeas_PosX[iii] = pos_x
            mypeas_PosY[iii] = pos_y
            mypeas_VelX[iii] = vel_X '* VelMag
            mypeas_VelY[iii] = vel_Y '* VelMag
            mypeas_Radius[iii] = pea_rad

            '...DRAW SHAPES
			
			bRed   = mypeas_FillColor[iii][0]
			bGreen = mypeas_FillColor[iii][1]
			bBlue  = mypeas_FillColor[iii][2]
			
			setColor (bRed,bGreen,bBlue)
			peaType = mypeas_Type[iii] 
			
			if peaType == "Circle" then 
				
				FillCircle(pos_x, pos_y, pea_rad)
				
			elseif peaType = "Triangle" then
			
				xxx = SOW_Fill_Triangle (pos_x, pos_y, pea_rad)
		
			endif
        
			if doBang == true then
				 setColor (0,0,0)			
				 FillCircle(pos_x, pos_y, 30)
				 '**** Need a sound in here !!! ****
			endif
			
			'....frog_STUFF
			
			if Release_The_frog == true then	
				
				'... inspect size of this pea and make it the frog_Target_Pea 
				'... if it is the smallest pea
				''var pea_rad as number
				 if pea_rad < frog_Target_Pea_Rad AND  mypeas_Mood[iii] > 0 then
					frog_Target_Pea_Rad = pea_rad
					frog_Target_Pea_Num = iii
					Target_Pea_Selected = true
				 endif
			
			endif '...
			
        Endif '...live peas I think?????
        
    next iii  '......end of Pea pos & vel loop
    '----------------------------------------------------------------------
	
    Purge_Zapped_peas = IsFalse

	'...THE_frog
var frogIsHunting as number

	if Release_The_frog == true then
	
		var kkk as number
		kkk = frog_Target_Pea_Num	
		frogIsHunting	= false

		if Target_Pea_Selected == true		 then
				'...get the position of the target pea
				var TargetPeaPosX        as number
				var TargetPeaPosY        as number
				var TargetPeaDisp_X      as number
				var TargetPeaDisp_Y      as number
				var TargetPeaDisp_Msqd   as number
				var TargetPeaDisp_M      as number

				var frog_Target_Pea_VelX as number
				var frog_Target_Pea_VelY as number
				var frog_Target_Pea_VelMsqd as number
				var frog_Target_Pea_VelM as number
				var frog_Target_Pea_VelX as number
			
				TargetPeaPosX = mypeas_PosX[kkk]	
				TargetPeaPosY = mypeas_PosY[kkk]
				TargetPeaDisp_X = TargetPeaPosX-frog_posX
				TargetPeaDisp_Y = TargetPeaPosY-frog_posY
				
				'msgbox("Pea="+kkk + ","+TargetPeaPosX+","+TargetPeaPosY+","+TargetPeaDisp_X+","+TargetPeaDisp_Y+","+frog_posX+","+frog_posY)
				'1,21.850000000000026,21.850000000000026,21.850000000000026,21.850000000000026,0,0
				
				'msgbox("Dog1")
				'TargetPeaDisp_Msqd = pow(TargetPeaDisp_X,2)+ pow(TargetPeaDisp_Y,2)
				
				TargetPeaDisp_Msqd = TargetPeaDisp_X * TargetPeaDisp_X + TargetPeaDisp_Y * TargetPeaDisp_Y
				
				'msgbox("Dog2")
				
				TargetPeaDisp_M = sqrt(TargetPeaDisp_Msqd)
				
				'...See if the target pea centre is within the frog's radius ... if so dinner is served!
				
				if TargetPeaDisp_M < frog_head_Radius then '...eat(kill)the target pea
					
					mypeas_Mood[kkk] = -1 '...dead
				
					xxx=SOW_Message("Killing")
				
				else '...need to hunt the target pea down
					
					xxx=SOW_Message("Hunting")
					frogIsHunting = true
					
					var frog_extend_tongue as number
					frog_extend_tongue = false
					
					if 	TargetPeaDisp_M < 2* frog_head_Radius then					
						frog_extend_tongue = true
					endif
					
					'msgbox("PeaA="+kkk +","+TargetPeaDisp_Msqd+","+TargetPeaDisp_M+","+frog_velMag)
					'Pea=1,990.1250000000028,31.46625176280141,0
					'msgbox("Dog3")
					
					'...set frog Vel to equal N times target pea vel
					frog_Target_Pea_VelX = mypeas_VelX[kkk] 
					frog_Target_Pea_VelY = mypeas_VelY[kkk] 
					frog_Target_Pea_VelMsqd = frog_Target_Pea_VelX * frog_Target_Pea_VelX + frog_Target_Pea_VelY*frog_Target_Pea_VelY
					
					'msgbox("frog_Target_Pea_VelMsqd=" + frog_Target_Pea_VelMsqd)
					
					frog_Target_Pea_VelM = sqrt(frog_Target_Pea_VelMsqd)
					'msgbox("frog_Target_Pea_VelM=" + Str$(frog_Target_Pea_VelM))
					
					var val2 as number
					val2 = 8 * frog_Target_Pea_VelM
					frog_velMag = max(frog_velMag, val2)
					'msgbox("frog_velMag=" + Str$(frog_velMag))
					var frog_dXdP as number
					var frog_dYdP as number
						
						frog_dXdP = TargetPeaDisp_X/TargetPeaDisp_M '...ratio of dX to dP, possible values range from 0 to 1
						frog_dYdP = TargetPeaDisp_Y/TargetPeaDisp_M '...ratio of dY to dP, possible values range from 0 to 1

					frog_velX = frog_velMag * frog_dXdP
					frog_velY = frog_velMag * frog_dYdP
					
					'msgbox("PeaB="+kkk +","+frog_velX+","+frog_velY)
					
					'msgbox("Dog4")
					
					frog_dPos_X =  frog_velX * deltaTup	'...frog_dPos_X
					frog_dPos_Y =  frog_velY * deltaTup
					
					'...Define new frog posn
					frog_posX = frog_posX + frog_dPos_X
					frog_posY = frog_posY + frog_dPos_Y
					frog_Bearing = 360 '...todo converter from dx,dy to 0-360 degree bearing
					
				endif '... Eat or hunt the target
		else		

			frog_dXdP=0.1			
			frog_dYdP=1
			
		endif '...target pea exists ...Target_Pea_Selected = true


		'...Paint Frog Tongue
		
		if frog_extend_tongue == true then TargetPeaDisp_X
		
			setColor (255,0,0)
			setLineWidth(6)
			Line(frog_posX,frog_posY,frog_posX+TargetPeaDisp_X,frog_posY+TargetPeaDisp_Y )
			setLineWidth(1)
		endif
		
		'... Paint the frog		
		'... Body
		setColor(0,0,0)'...Black
		Fillcircle (frog_posX, frog_posY, frog_head_Radius)
		
		'...Eyeballs
		var frogEyeballPos_X as number
		var frogEyeballPos_Y as number
		var frogEyeballRadius as number
		
		if frogIsHunting == true then
			frogEyeballRadius = frog_head_Radius/3
		else
			frogEyeballRadius = frog_head_Radius/5
		endif
		
		'... Left Eyeball
		frogEyeballPos_X = frog_posX  + frog_dXdP * frog_head_Radius*0.25 + frog_dYdP * frog_head_Radius*0.5
		frogEyeballPos_Y = frog_posY  + frog_dYdP * frog_head_Radius*0.25 - frog_dXdP * frog_head_Radius*0.5
		setColor(255,255,255)'...White
		Fillcircle (frogEyeballPos_X,frogEyeballPos_Y ,frogEyeballRadius )

		'setColor (0,0,0)
		'usr_string = "__________frog Eyeball Pos X:" + Str$(frogEyeballPos_X) + " Y:"+Str$(frogEyeballPos_Y)
		'print(usr_string,frog_posX,frog_posY)

		'... Left Eyepupil
		var frogEyepupilPos_X as number
		var frogEyepupilPos_Y as number
		var frogEyepupilRadius as number

		frogEyepupilPos_X = frogEyeballPos_X  + frog_dXdP * frogEyeballRadius*0.6 
		frogEyepupilPos_Y = frogEyeballPos_Y  + frog_dYdP * frogEyeballRadius*0.6
		frogEyepupilRadius = frogEyeballRadius*0.5
		setColor(33,66,255)'... Blue
		Fillcircle (frogEyepupilPos_X,frogEyepupilPos_Y ,frogEyepupilRadius )
		
		'... Right Eyeball
		frogEyeballPos_X = frog_posX  + frog_dXdP * frog_head_Radius*0.25 - frog_dYdP * frog_head_Radius*0.5
		frogEyeballPos_Y = frog_posY  + frog_dYdP * frog_head_Radius*0.25 + frog_dXdP * frog_head_Radius*0.5
		setColor(255,255,255)'... White
		Fillcircle (frogEyeballPos_X,frogEyeballPos_Y ,frogEyeballRadius )

		'... Right Eyepupil
		var frogEyepupilPos_X as number
		var frogEyepupilPos_Y as number
		var frogEyepupilRadius as number

		frogEyepupilPos_X = frogEyeballPos_X  + frog_dXdP * frogEyeballRadius*0.6 
		frogEyepupilPos_Y = frogEyeballPos_Y  + frog_dYdP * frogEyeballRadius*0.6
		frogEyepupilRadius = frogEyeballRadius*0.5
		setColor(33,200,255)'... GreenBlue
		Fillcircle (frogEyepupilPos_X,frogEyepupilPos_Y ,frogEyepupilRadius )
		
		usr_string = "frog X:" + Str$(frog_posX) +"Y:"+ Str$(frog_posY)+"R:"+ Str$(frog_head_Radius)
		'msgbox(usr_string)
		'Print (usr_string,frog_posX,frog_posY)
		
	endif '... release_the_frog == true	
    
   '------------------------------------------------------------------------------------------
   '... Move & Plot RECTANGLES
   '                         
    
    For jjj =  1 to numRects 'STEP 1
       
        pos_x = RposCenX[jjj]
        pos_y = RposCenY[jjj]
        
        vel_X = moiRects_VelX[jjj]
        vel_Y = moiRects_VelY[jjj]

        '... Update Velocities

        If pos_x + vel_X > CANVAS01_WIDTH OR pos_x + vel_X < 0 then   
          vel_X = 0 - vel_X
        
        Endif '... Endif is not required by JS 

        If pos_y + vel_Y > CANVAS01_HEIGHT OR pos_y + vel_Y < 0 then
          vel_Y = 0 - vel_Y
         
        Endif

        '... update to New Positions
		var dPosX as number
		var dPosY as number
        dPosX = vel_X
        dPosY = vel_Y

        pos_x =  pos_x+dPosX
        pos_y =  pos_y+dPosY

        '... update array values

        RposCenX[jjj] = pos_x
        RposCenY[jjj] = pos_y
        
		RposXmin[jjj] = RposCenX[jjj] + 1 '... Expected: Get Name - Name but got: 0
		
		'RposXmin[jjj] = 1 + RposCenX[jjj]'...OK in BBv0.3
		
		
		'err RposXmin[jjj] = RposXmin[jjj] + dPosX
        'err RposXmax[jjj] = RposXmax[jjj] + dPosX
        
        'RposYmin[jjj] = RposYmin[jjj] + dPosY
        'RposYmax[jjj] = RposYmax[jjj] + dPosY

		RposXmin[jjj] = dPosX + RposXmin[jjj] 
        RposXmax[jjj] = dPosX + RposXmax[jjj] 
        
        RposYmin[jjj] = dPosY + RposYmin[jjj] 
        RposYmax[jjj] = dPosY + RposYmax[jjj] 

		var pXmin as number
		var pXmax as number
		var pYmin as number
		var pYmax as number
        
        moiRects_VelX[jjj] =  vel_X
        moiRects_VelY[jjj] =  vel_Y 
   
		'...CANARY
		var R_Width as number
		var R_Height as number


       '...Plot small Yellow  Rectangle
       setColor (99,99,0) '''''canvas01_2Dctx.fillStyle = "#555500" ...lemon yellow
	   
       ''''R_Width   =  RposXmax[jjj] - RposXmin[jjj]
	    R_Width   =  RposXmax[jjj]
		R_Width   =  R_Width - RposXmin[jjj]
       
	   ''''R_Height  =  RposYmax[jjj] - RposYmin[jjj]
	   R_Height  =  RposYmax[jjj] 
	   R_Height  = R_Height - RposYmin[jjj]
       
       ''jslibf_DRAW_RECT( RposXmin[jjj], RposYmin[jjj], R_Width, R_Height)
       FillRectangle( RposXmin[jjj], RposYmin[jjj], R_Width, R_Height)
       
	   '...Plot  Red Triangle
		'''''       canvas01_2Dctx.beginPath();
		'''''       canvas01_2Dctx.lineTo (RposXmin[jjj], RposYmin[jjj]);
		'''''       canvas01_2Dctx.lineTo (RposXmax[jjj], RposYmin[jjj]);
		'''''       canvas01_2Dctx.lineTo (RposXmax[jjj], RposYmax[jjj]);
		'''''       canvas01_2Dctx.stroke ();
		'''''       canvas01_2Dctx.closePath ();
			   
		'''''       canvas01_2Dctx.fillStyle = "red";
		'''''       canvas01_2Dctx.fill(); 

    next jjj
	
    '                                            
    '...  PLOT BANNERS                           
	'                                            
	'                                            
   
   
	'--------------------------------------------------------------------------------------------------------------------------------------
    '... Plot a   Title Banner on the Canvas
    '... as a SINGLE STATIC CYAN RECTANGLE with TEXT 
    
    '... NB as this plotted later than plot objects, it should lie in front of those other objects
    '... set canvas background color for the next draw to canvas command e.g. rect or circle.
    
    'canvas01_2Dctx   fillStyle = "#FAF7F8" ...off white
    'canvas01_2Dctx fillStyle = "#080808" ...Midnight grey
    '''''canvas01_2Dctx.fillStyle = brocol_Cyan 
	
	setColor (0,88,255)	
	FillRectangle(2,2,250,50)

    '''''jslibf_DRAW_RECT(20,20,200,50)...l,t,w,h
	setColor (0,88,88)	
	FillRectangle(2,20,250,50)
 	setColor(255,255,255)
	setfont("20pt Consolas")  
	Print  ("POND", 4, 25) 
    '...Write some Text over the rectangle
    
    '''''canvas01_2Dctx.fillStyle = brocol_Yellow 

    ''usr_string = "POND built with BrowserBasic" 
    ''Pos_x = 7
    ''Pos_y = 25
    ''Tfont = "italic 18px sans-serIf"
    ''Tcolor = "#FFFF00"
	'scale(2,2)
	setColor(0,0,0)
	setfont("9pt Consolas")
    Print  ("built with", 76, 25) ''''',Tcolor,Tfont)
	
	setFont("16pt Consolas")
	 Print  (" BrowserBasic v0.6", 85, 50)
	setFont("9pt Consolas")
    'scale(0.5,0.5)
	'Print(".",1,1)
	
	'---------------------------------------
	'  Plot Earthling_Input_str in banner    
	'                                       
	usr_string=Earthling_Input_str	
	Pos_x = 600
    Pos_y = 500
	dXX = 80
	dYY = 20
	dXX=6*len(Earthling_Input_str)
	RectColor = SOW_rgb_to_integer(1,1,1)
	TextColor = SOW_rgb_to_integer(100,100,255)
	xxx = SOW_Plot_Banner_Text (usr_string, Pos_x,Pos_y,dXX,dYY,scaleX,scaleY,RectColor,TextColor)	
	
	'...Plot Output Text in a banner
	'
	
	usr_string = oText	
	Pos_x = 600
    Pos_y = 560
	dXX = 80
	dYY = 20
	dXX=6*len(Earthling_Input_str)
	RectColor = SOW_rgb_to_integer(1,1,1)
	TextColor = SOW_rgb_to_integer(100,100,255)
	xxx = SOW_Plot_Banner_Text (usr_string, Pos_x,Pos_y,dXX,dYY,scaleX,scaleY,RectColor,TextColor)		
	
	
	
	
   '---------------------------------------------------------------------------------------
   '...Plot a  SINGLE MOVING RECTANGLE in the Canvas                                       
       
	'''''   var Right_Arrow_Flag as number 
	'''''Right_Arrow_Flag= IsFalse
	'''''var Left_Arrow_Flag as number
	'''''Left_Arrow_Flag= IsFalse
	'''''
	'''''   If Right_Arrow_Flag = IsTrue then
	'''''       Mov_Rect_Pos_X = Mov_Rect_Pos_X+10
	'''''       Right_Arrow_Flag = IsFalse
	'''''   Endif
	'''''   
	'''''   If Left_Arrow_Flag = IsTrue then
	'''''       Mov_Rect_Pos_X =Mov_Rect_Pos_X + -10
	'''''       Left_Arrow_Flag = IsFalse
	'''''   Endif
	'''''   
    Mov_Rect_Pos_X = Mov_Rect_Pos_X+ MR_dX
	
    If Mov_Rect_Pos_X > CANVAS01_WIDTH then
        Mov_Rect_Pos_X=0
        
    Endif
    
	var UserIPtext as string
	
    Mov_Rect_Pos_Y = Mov_Rect_Pos_Y + MR_dY
	
    If Mov_Rect_Pos_Y > CANVAS01_HEIGHT then
        Mov_Rect_Pos_Y=0
        UserIPtext=""
    Endif
    
    
    '...Paint the Moving Rectangle                                                                      
	
	
    '''''canvas01_2Dctx.fillStyle = "#FFFF00" '...YELLOW    
    '''''jslibf_DRAW_RECT(Mov_Rect_Pos_X,Mov_Rect_Pos_Y,180,50)...l,t,w,h
	setColor(220,190,0)
	FillRectangle(Mov_Rect_Pos_X,Mov_Rect_Pos_Y,180,50)
    
    '...Write some Text over the rectangle
	var Tx as number
	var Ty as number
    Tx = 10+ Int(Mov_Rect_Pos_X) '''''Math.floor(Mov_Rect_Pos_X)
    Ty = 10+ Int(Mov_Rect_Pos_Y) '''''Int(Mov_Rect_Pos_Y) ''''' Math floor(Mov_Rect_Pos_Y)
    
	var sTx as string
	var sTy as string

	sTx = Str$(Tx-10)
	sTy = Str$(Ty-10)	
	
    usr_string = "Yellow Box Pos: " + sTx
	usr_string = usr_string + ","
	usr_string = usr_string + sTy '''''+ sTx + ", Y: " + sTy + "  " + UserIPtext
    '...alert(usr_string)
    ''Tcolor = "#FF00FF" '...MAGENTA
    ''Tfont = "italic 14px sans-serIf" 
	setColor(0,0,0)
    Print  (usr_string, Tx, Ty)''''', Tcolor, Tfont)                 
	
	
	'...DRAW BUTTON STUFF                           
	
	var Nbstr as string
	Nbstr = Str$(numButtons)
	usr_string ="Number of Buttons" + Nbstr
	print(usr_string, 200,450)
	
	'...Draw background PANEL for mouse_mode buttons
	setColor(99,99,99)
	xxx = SOW_Fill2D_Box_x1x2y1y2(05,298,495,605)	
	
	'...Draw background PANEL for Special buttons
	setColor(88,88,88)
	xxx = SOW_Fill2D_Box_x1x2y1y2(300,695,495,605)		
	
	'...Draw MouseMode Indicator       
	junk=SOW_Draw_MouseMode_Indicators()
	
	
	'...Draw all buttons               
	For Bnum = 1 to numButtons
		junk = SOW_Draw_Button(Bnum)
	Next Bnum
	
	'msgbox("FRED111")
	
	
	'...CHECK FOR MOUSE STUFF                                     
	junk = SOW_Check_For_MouseLeftButtonDepressed()
	

	'...END Function ...end of SOW_MoveAndDraw Function definition

EndFunction '...Function OnDraw()
'=====================================================================================================================================================


'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'                              
'...MOUSE EVENT HANDLERS       
'                              
'                              

'--------------------------------------------------------------------------------------
' SOW CHECK FOR MOUSE LEFT BUTTON DEPRESSED
'                                          

Function SOW_Check_For_MouseLeftButtonDepressed()

	var usr_string as string
	var mxs as string
	var mys as string
	var multX as number
	var multY as number
	
	'setColor(90,90,90)
	'Print("Hello from OnDraw",50,50)
		
	If MousePressed("l") then
		
		
		setColor (255,255,255)

		multX=MouseX()
		multY=MouseY()
		
		mxs=Str$(MouseX())
		mys=Str$(MouseY())	
		'usr_string = "Left mouse button pressed at " + mxs 
		'usr_string = usr_string +  "," 
		'usr_string = usr_string + mys
		'usr_string = "Left mouse button pressed at " + mxs + "," + mys '... ==> ERROR Expected: Get Name - Name but got: 0 
		'...work around ==> no spaces
		usr_string = "Left mouse button WAS pressed at "+mxs+","+mys
		
		mouse_event_Str = "Mouse Button Left Depressed"
		
		'msgbox(usr_string)', MouseX(),MouseY())
		
		Print(usr_string, multX,multY)
		
		junk = SOW_Handle_Mouse_Event(multX , multY , mouse_event_Str )
		
		
	EndIf

endfunction '...SOW_Check_For_MouseLeftButtonDepressed 
'...                                                   


'-----------------------------------------------------------------------------------------------------
'  ON MOUSE MOVED      
'                      

Function OnMouseMoved(x as number, y as number) ''...from BB example ex_mouse.txt
	
	'...callback everytime the mouse is moved, SW: any slow down?
	g_mousex = x
	g_mousey = y
	
EndFunction '...OnMouseMoved
'                           

'-----------------------------------------------------------------------------------------------------
'  ON MOUSE RELEASED   
'                      

Function OnMouseReleased(x as number ,y as number, button as string) ''...from BB example ex_mouse.txt
'PANDA
	
	mouse_event_X = x
	mouse_event_Y = y
	
	'msgbox ("Mouse release event code = " + button)
	
	Select button
		Case "l"
			mouse_event_Str = "Mouse_Button_Left_Released"
			'...msgbox("I will now call the Mouse Event Handler...")
			break
		Case "r"
			mouse_event_Str = "Mouse_Button_Right_Released"
			break
		Case "m"
			mouse_event_Str = "Mouse_Button_Middle_Released"
			break
		Case "wd"
			mouse_event_Str = "Mouse_Button_Wheel_PressedDown"
			break
		Case "wu"
			mouse_event_Str = "Mouse_Button_Wheel_ReleasedUp"
			break
	EndSelect
	
	'msgbox("Hi 1")  
	var junk as number
	junk = SOW_Handle_Mouse_Event(mouse_event_X ,mouse_event_Y , mouse_event_Str ) '....dont forget the brackets, and a space before the comment quote!

	'...Does break prevent reaching here?...NO!
	'msgbox("Hi 2, return val=" + xxx)
	
EndFunction '...OnMouseReleased 
'                               


'-----------------------------------------------------------------------------------------------------
'     SOW HANDLE MOUSE EVENT     
'                                

Function SOW_Handle_Mouse_Event(mouse_event_X as number ,mouse_event_Y as number, mouse_event_Str as string)

	'...this excludes simple mouse move events

	'msgbox("Hi 3")
	'msgbox(mouse_event_Str + " at X:" + mouse_event_X+" Y:" +mouse_event_Y + "BZ X 0 to 600  Y: 400 to 600")
	'msgbox("Hi 4")
	'return 4
	


	if mouse_event_Str == "Mouse_Button_Left_Released" then		
		
		mouse_button_left_drag_Active = false

		'...Check for mouse click on a Soft GUI button    
		
		mouse_button_Left_released_softButtonNum = 0
		
	var buzo as number
	'msgbox(" QUAIL numb buttons=" + numButtons)
		For buzo = 1 to numButtons
			if mouse_event_X < Buttons_Xmax[buzo] then	
				if mouse_event_X > Buttons_Xmin[buzo] then
					if mouse_event_Y < Buttons_Ymax[buzo] then	
						if mouse_event_Y > Buttons_Ymin[buzo] then	
							
							'mouse_button_Left_released_softButtonNum = buzo
							mouse_button_Left_released_softButtonName = Buttons_Name[buzo]
							'msgbox("OBI button clicked was = " + mouse_button_Left_released_softButtonName)
							'...the highest numbered button will get the prize if there is conflict due to button zone overlap
							
							'junk = SOW_Soft_Button_Click_Handler(mouse_button_Left_released_softButtonNum)						
							junk = SOW_Soft_Button_Click_Handler(mouse_button_Left_released_softButtonName)				
						endif
					endif
				endif
			endif
		next BuZo	
	else '...some other mouse event than indic by: mouse_event_Str == "Mouse_Button_Left_Released" 	
		if mouse_event_Str = "Mouse Button Left Depressed" then
		
			mouse_button_left_drag_Active = true
			'...effect of this will be determined elsewhere qaccording to current setting of mouse mode
		endif
	endif
	mouse_event_Str = ""
	
Endfunction '...SOW_Handle_Mouse_Event

'----------------------------------------------------------------------------------------------------
'                                                      
'       *SOFT BUTTONS            Define, Draw, Handle   
'                                                      
'                                                      


'------------------------------------------------------
'                                                      
'  *SOW_DEFINE_BUTTONS                                 
'                                                      

Function SOW_Define_Buttons()
'...NB Must tally with SOW_Soft_Button_Click_Handler
	
	var qqq as number
	var Blabel as string
	var Bcolor as number
	
	'...there is an ERROR in the BB rgb function
	
	'BcolorON = rgb(215,90,50)   '...215 + 90*255 + 50*255*255
	'BcolorOFF = rgb(55,88,99)   '...55 + 88*255 + 99*255*255
	
	'...WORKAROUND
	BcolorON = SOW_rgb_to_integer(215,90,50)   
	BcolorOFF = SOW_rgb_to_integer(66,66,66)   

	
	'setColor(BcolorON)
	'Print ("Set BcolorON",100,100)
	'msgbox("BcolorON = " + BcolorON + " BcolorOFF = " + BcolorOFF )

	var xxx as number
	var Bcommand as string


		

	Bname   = "B8"
	Blabel  = "PULL"
	Bcommand = "Mouse_Attract_Peas"
	Bcolor  = SOW_rgb_to_integer(0,90,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,010,080,500,540)
	
	Bname   = "B9"
	Blabel  = "PUSH"
	Bcommand ="Mouse_Repulse_Peas"
	Bcolor  = SOW_rgb_to_integer(0,90,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,010,080,560,600)	

	
    Bname   = "B1A"
	Blabel  = "CIRCLES"
	Bcommand = "Mouse_Spray_Circles"
	Bcolor  = SOW_rgb_to_integer(0,90,220) 	
	qqq     =  SOW_Define_Button(Bname,Bcommand, Blabel, Bcolor,110,180,500,540)
	
    Bname   = "B1B"
	Blabel  = "TRIANGLES"
	Bcommand = "Mouse_Spray_Triangles"
	Bcolor  = SOW_rgb_to_integer(0,90,220) 	
	qqq     =  SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,110,180,560,600)

	 
    Bname   = "B2"
	Blabel  = "POP"
	Bcommand = "Mouse_Pop_Peas"
	Bcolor  = SOW_rgb_to_integer(0,90,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,210,280,500,540)
	
	Bname   = "B3"
	Blabel  = "FLAME"
	Bcommand = "Mouse_Flame_Peas"
	Bcolor  = SOW_rgb_to_integer(0,90,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,210,280,560,600)

	Bname   = "B4a"
	Blabel  = "FROG"
	Bcommand = "Mouse_Command_Frog"
	Bcolor  = SOW_rgb_to_integer(0,190,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,310,380,500,540)

	
	Bname   = "B4b"
	Blabel  = "PURGE"
	Bcommand = "Mouse_Purge_Peas"
	Bcolor  = SOW_rgb_to_integer(0,190,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,310,380,560,600)
	
	
	Bname   = "B6"
	Blabel  = "FASTER"
	Bcommand = "Peas_Speed_Increase"
	Bcolor  = SOW_rgb_to_integer(0,190,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,410,480,500,540)

	Bname   = "B7"
	Blabel  = "SLOWER"
	Bcommand = "Peas_Speed_Decrease"
	Bcolor  = SOW_rgb_to_integer(0,190,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,410,480,560,600)	

	Bname   = "B5"
	Blabel  = "INPUT"
	Bcommand = "Get_User_Input_Text"
	Bcolor  = SOW_rgb_to_integer(0,190,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,510,580,500,540)

	Bname   = "B5b"
	Blabel  = "OUTPUT"
	Bcommand = "Send_User_Output_Text"
	Bcolor  = SOW_rgb_to_integer(0,190,220)
	qqq     = SOW_Define_Button(Bname,Bcommand,Blabel, Bcolor,510,580,560,600)


endfunction '...SOW_Define_Buttons
'...                              
'                                 


'-----------------------------------------------------------------------------------------------------
'   SOW DEFINE BUTTON              
'                                  
Function SOW_Define_Button(Bname as string,Bcommand as string, Blabel as string, Bcolor as number ,Xmin as number ,Xmax as number ,Ymin as number ,Ymax as number)

	numButtons = numButtons + 1
	
	Bnum = numButtons
	Buttons_Name[Bnum]= Bname
	'...msgbox("Button name:" + Buttons_Name[Bnum])
	
	var Bnom as string
	'Bnom = Buttons_Name[Bnum]  ERROR
	'msgbox("Button name:" + Bnom)
	
	Buttons_Command[Bnum]= Bcommand
	Buttons_Color[Bnum]= Bcolor
	Buttons_Label[Bnum]= Blabel	
	Buttons_Xmin[Bnum]= Xmin
	Buttons_Xmax[Bnum]= Xmax
	Buttons_Ymin[Bnum]= Ymin
	Buttons_Ymax[Bnum]= Ymax
	
	'msgbox("Defined Button with colors ON:" +BcolorON +" OFF:"+BcolorOFF)
	
endfunction '...SOW_Define_Button
'                                

'---------------------------------------------------------------
function SOW_Get_Button_Number_from_ButtonName (Bname as string) 

	var Bnum as number
	var bbb as number
	
	Bnum = 0
	For bbb = 1 to numButtons
	  if Buttons_Name[bbb] = Bname then
		Bnum = bbb
	  endif
	Next bbb
	Return Bnum

endfunction '...SOW_Get_Button_Number_from_ButtonName 
'                                                     

'---------------------------------------------------------------------------
function SOW_Get_ButtonNumber_from_ButtonCommand (Mouse_Mode_name as string)

	var Bnum as number
	var bbb as number
	Bnum = 0

    'msgbox("JOLLY Mouse_mode_name =" + Mouse_Mode_name + "Button Number=" + Bnum)

	For bbb = 1 to numButtons
	  if Buttons_Command[bbb] = Mouse_Mode_name then
		Bnum = bbb
	  endif
	Next bbb
	Return Bnum


endfunction '...SOW_Get_ButtonNumber_from_ButtonCommand
'                                                      

'----------------------------------------------------------------------------------------------------
'                               
' SOW DRAW BUTTON               
'                               

function SOW_Draw_Button(Bnum as number)


	'msgbox("Hi1")
	
	Bcolor = Buttons_Color[Bnum]	
	junk = SOW_Set_Color(Bcolor)   
	
	'--------------------------------------------------------------
	'msgbox("Hi2")
	Xmin = Buttons_Xmin[Bnum]
	Ymin = Buttons_Ymin[Bnum]
	Xmax = Buttons_Xmax[Bnum]
	Ymax = Buttons_Ymax[Bnum]
	
	Bwidth = Xmax - Xmin
	Bheight = Ymax - Ymin
	
	FillRectangle(Xmin,Ymin,Bwidth,Bheight)
	setColor(0,0,0)
'dolphin	
	TposX = Buttons_Xmin[Bnum]+4
	TposY = Buttons_Ymin[Bnum]+24
	'Bname = Buttons_Name[Bnum]
	'Print (Bname,TposX,TposY)
	Print (Buttons_Label[Bnum],TposX,TposY)

	
	'msgbox("Hi3")

EndFunction '...SOW_Draw_Button    
'                                  
'                                  



'------------------------------------------------------------------------------------------------------------------------
'                                          
'   SOW SOFT BUTTON CLICK HANDLER          
'                                          

Function SOW_Soft_Button_Click_Handler( Bname as string)
'...NB Must tally with SOW_Define_Buttons              

	var Bcommand as string
	var Bnum as number
	'msgbox("LUCAS looking for number of Button Name=" + Bname)
    Bnum = SOW_Get_Button_Number_from_ButtonName (Bname) 
	'msgbox("MIKO Button Name=" + Bname + " Number:" + Bnum + " Command=" + Buttons_Command[Bnum])
	Bcommand = Buttons_Command[Bnum]
	
	'...NB Some buttons will change MouseMode
	'... Some buttons will leave it unchanged.
	
		'If Bnum = Mouse_Mode_num then '...simply toggles off current MouseMode
		if Bcommand == Mouse_Mode_name  then 
			
			Mouse_Mode_name =""
		
		else '...handle command
		
				
				if Bcommand == "Mouse_Spray_Circles" then			
					Mouse_Mode_name ="Mouse_Spray_Circles"
					nextpeaRadius = 3
				endif
				
				if Bcommand == "Mouse_Spray_Triangles" then					
					Mouse_Mode_name = "Mouse_Spray_Triangles" 
					nextpeaRadius = 3
				endif

				if Bcommand == "Mouse_Pop_Peas" then					
					Mouse_Mode_name = "Mouse_Pop_Peas" 
				endif

				if Bcommand == "Mouse_Flame_Peas" then					
					Mouse_Mode_name = "Mouse_Flame_Peas" 
				endif

				if Bcommand == "Mouse_Purge_Peas" then
					'Mouse_Mode_num = Mouse_Mode_num
					Purge_Zapped_peas = true
					Mouse_Mode_name = Mouse_Mode_name '...unchanged
				endif
				
				if Bcommand =="Mouse_Command_Frog" then
					If Release_The_frog == true then
						Release_The_frog = false
					else
						Release_The_frog =true
						frog_velMag=frog_velMag_Initial
					endif
					
					'... no change to mousemode
					
					
				endif
				
				if Bcommand == "Get_User_Input_Text" then
					
					Earthling_Input_str = SOW_Get_User_Input_str("Hello Earthling, Please type or paste some text into the box"," John Smith")
					'...no change to mouse mode
				endif

				if Bcommand == "Send_User_Output_Text" then
					
					oText = "Time since Load (seconds) =" + Str$(SinceLoadTime)
					oText = oText + "//Mary had a little lamb"
					oText = oText + "//Its fleece was white as snow"
					oText = oText + "//And everywhere that Mary went"
					oText = oText + "//The lamb was sure to go."
					xxx = SOW_Send_User_Ouput_str("Hello Earthling, please copy/cut text from the box...",oText)
					'...no change to mouse mode
				endif

				if Bcommand == "Peas_Speed_Increase" then
					
					pea_Speed_Mag=pea_Speed_Mag * delta_pea_Speed_Mag_Factor
					'...no change to mouse mode
				endif

				if Bcommand == "Peas_Speed_Decrease" then
					
					pea_Speed_Mag=pea_Speed_Mag / delta_pea_Speed_Mag_Factor
					'...no change to mouse mode
				endif				

				if Bcommand == "Mouse_Attract_Peas" then
					'Mouse_Mode_num = 8
					Mouse_Mode_name = "Mouse_Attract_Peas"
					

				endif	
	
				if Bcommand == "Mouse_Repulse_Peas" then
					'Mouse_Mode_num = 9
					Mouse_Mode_name = "Mouse_Repulse_Peas"
					

				endif	
			endif

		'msgbox("BROLLY Mouse_mode_name =" + Mouse_Mode_name)
		
		'...play sound
		SoundPlay(sndDing)
	
	
	'...re-drawing will be done by the OnDraw loop anyway using SOW_Draw_Button
	
		



endfunction '...SOW_Soft_Button_Click_Handler()
'...                                           



'---------------------------------------------------------------------
'      SOW_Draw_MouseMode_Indicators                                  
'                                                                     

Function SOW_Draw_MouseMode_Indicators()

	'if Mouse_Mode_num == 0 then
	'msgbox("MOLLY Mouse_mode_name =" + Mouse_Mode_name)
	
	var Bnum as number
	Bnum =0
	if Mouse_Mode_name == "" then
	
		'...draw no indicator
		
	else
        'msgbox("NOLLY Mouse_mode_name =" + Mouse_Mode_name)
		
		Bnum = SOW_Get_ButtonNumber_from_ButtonCommand (Mouse_Mode_name)
		
		'msgbox("POLLY Mouse_mode_name =" + Mouse_Mode_name + "Button Number=" + Bnum)
		
		Bcolor = Buttons_Color[Bnum]	
		''junk = SOW_Set_Color(Bcolor)   				
		setColor(250,200,0)
		Xmin = Buttons_Xmin[Bnum]-5
		Ymin = Buttons_Ymin[Bnum]-5
		Xmax = Buttons_Xmax[Bnum]+5
		Ymax = Buttons_Ymax[Bnum]+5	
		Bwidth = Xmax - Xmin
		Bheight = Ymax - Ymin				
		FillRectangle(Xmin,Ymin,Bwidth,Bheight)
		'setColor(0,0,0)
		'TposX = Xmin+4
		'TposY = Ymin+24
		'Print (Mouse_Mode_name,TposX,TposY)		
	endif
   
   

endfunction   '...   SOW_Draw_MouseMode_Indicators                    
'                                                                     



'----------------------------------------------------------------------------------------------------
'   ON KEY PRESSED        Handler callback that gets triggered anytime a key is pressed              
'                                                                                                    

Function OnKeyPressed(key as string, code as number)

	'msgbox("You pressed key with code=" +STR$(code))
	
	'...Change color of peas
	'for iii = 1 to numpeas
	'	if mypeas_Mood[iii] > 0 then
	'		mypeas_FillColor[iii][0] = code+iii
	'		mypeas_FillColor[iii][1] = code*2+iii
	'		mypeas_FillColor[iii][2] = code*3+iii
	'	endif
	'next iii

	var code_P as number ''= 80
	var code_F as number ''= 00
	code_P = 80
	code_F = 00
	
	if code = code_P then
	
		Purge_Zapped_peas = true
	
	elseif code = code_F then
	
	endif
	
	'...play sound
	SoundPlay(sndDing)
	


EndFunction '...OnKeyPressed
'...                        


'-------------------------------------------------------------------
'    SOW MAKE NEW pea           
'                               

Function SOW_make_new_pea (mouseX as number,mouseY as number)

	if numpeas == maxNumpeas then
	    setColor(255,125,0)
		msgbox("Reached Maximum Number of peas")
	    print ("Reached Maximum Number of peas", 700,100)
		return false

	else
		'...Check mouse pos is within the desired box
	ELLA	
	var Point_In_Box as number
	
		Point_In_Box = SOW_Check_if_2Dpoint_Inside_2Dbox(mouseX,mouseY,0,CANVAS01_WIDTH ,0,CANVAS01_HEIGHT)
		
		'(Px as number,Py as number,BXmin as number,BXmax as number,BYmin as number,BYmax as number)
		
		if Point_In_Box == true then
		
			iii =  numpeas + 1    
			numpeas = iii
			mypeas_Type[iii] = NextPeaType  
			mypeas_PosX[iii] = mouseX   
			mypeas_PosY[iii] = mouseY  
			mypeas_VelX[iii] = nextpea_velX   
			mypeas_VelY[iii] = nextpea_velY   
			mypeas_Radius[iii] =  nextpeaRadius
			mypeas_Mood[iii] = 1
			
			bRed   = Int(255*mouseX/CANVAS01_WIDTH)
			bGreen = Int(iii+100*mouseY/CANVAS01_HEIGHT)
			bBlue  = Int(0.5* bRed + 0.3* bGreen)

			
			mypeas_FillColor[iii][0] = bRed 
			mypeas_FillColor[iii][1] = bGreen 
			mypeas_FillColor[iii][2] = bBlue
			
			'...increment the initial values for the next pea

			nextpea_velX = nextpea_velX +.05
			nextpea_velY = nextpea_velY +.05
			nextpeaRadius = nextpeaRadius + deltapeaRadius
			
			NextPeaType = NextPeaType
		
		endif '...xxx = true
		
	endif   '...numpeas == maxNumpeas
            

endfunction '...SOW_make_new_pea
'...                            

'-------------------------------------------------------------------------------
'                      
'   SOW SET COLOR      
'                      

Function SOW_Set_Color(Bcolor as number)  	

	 var rr as number
	 var gg as number
	 var gg1 as number
	 var gg2 as number
	 var bb as number
	 var bb1 as number
	 var bb2 as number

	 
	'...convert from number into separate R G and B
	'...whereas inbuilt BB function rgb(255,0,255) gives a unicolor code
	sow_colorBits_colorBits = sow_colorBits * sow_colorBits
	rr = int(Bcolor/sow_colorBits_colorBits)
	gg1 = rr*sow_colorBits_colorBits
	gg2 = Bcolor - gg1
	gg = int(gg2/sow_colorBits)
	bb1 = gg*sow_colorBits	
	bb2 = rr*sow_colorBits_colorBits
	bb = Bcolor - bb1 - bb2
	
	'msgbox("Bcolor="+ Bcolor + " RGB are " + rr + "," + gg + "," + bb)
	setColor(rr,gg,bb)

endfunction '...SOW_Set_Color
'                            



'-------------------------------------------------------------------
'                                                                   
' SOW COLORINT TO RGB                                               

Function SOW_ColorInt_to_RGB(colorInt as number)
	'...convert from number into separate R G and B
	'...whereas inbuilt BB function rgb(255,0,255) gives a unicolor code
	
 var gg1 as number
 var rr0 as number
 var gg0 as number
 var gg1 as number
 var gg2 as number
 var bb0 as number
 var bb1 as number
 var bb2 as number
 var RGB_Out_str as string
	
	sow_colorBits_colorBits = sow_colorBits * sow_colorBits
	rr0 = int(colorInt/sow_colorBits_colorBits)
	gg1 = rr0*sow_colorBits_colorBits
	gg2 = colorInt - gg1
	gg0 = int(gg2/sow_colorBits)
	bb1 = gg0*sow_colorBits	
	bb2 = rr0*sow_colorBits_colorBits
	bb0 = colorInt - bb1 - bb2
	
	

    RGB_Out_str = " ==> R_"+Str$(rr0)+"_G_"+Str$(gg0)+"_B_"+Str$(bb0)
	'msgbox("colorInt="+ colorInt + " ==> " + RGB_Out_str)
	
	'...cannot return a string in BB at present return RGB_Out_str
	'...so pop the value into a global variable
	SOW_ColorInt_to_RGB_OUTstr=RGB_Out_str

endfunction ' SOW COLORINT TO RGB 
'                                 



'-------------------------------------------------------------------
'                                                                   
'  SOW RGB TO INTEGER                                               
'                                                                   

Function SOW_rgb_to_integer(rr as number, gg as number, bb as number)   

	var RGB_number as number
	var gg1 as number
	var rred1 as number
	
	rred1      = rr*256*256
	gg1        = gg*256
	RGB_number = rred1+gg1+bb

    return RGB_number

endfunction '...     SOW RGB TO INTEGER  
'                                        

'NEW STUFF                                       
'-------------------------------------
'... SOW_Check_if_2Dpoint_Inside_2Dbox
'                                     

function SOW_Check_if_2Dpoint_Inside_2Dbox(Px as number,Py as number,BXmin as number,BXmax as number,BYmin as number,BYmax as number)
    
	var Point_Inside_Box as number
    Point_Inside_Box=false
    if Px > BXmin AND Px < BXmax then   '...Point Xpos is within Box Xpos limits 
        if Py > BYmin AND Py < BYmax then '...Point Ypos is within Box Ypos limits 
             Point_Inside_Box = true
        endif
    endif
    return Point_Inside_Box

endfunction '...SOW_Check_if_2Dpoint_Inside_2Dbox 


'-------------------------------------------------
' SOW_Zap_pea_at_MousePos                         
'                                                 

function SOW_Zap_pea_at_MousePos(ZapType as string, Mxxx as number, Myyy as number)

                var fff as number
				var iii as number
				var Any_Zaps as number
				Any_Zaps = false
				var searchDone as number
                searchDone = false
				fff=0
                    
                    '//...Go thru all peas and see if any contain this click point in their disc area
                    '//...if so set their color to black
                    '...Javascript code should turn out like this..........for (iii=1;iii<=numpeas;iii++)
                      
					  while searchDone = false

					  
						  fff = fff + 1
                          iii = numpeas - fff + 1 '...start with the youngest peas
						  
                                                            
							var pea_Rad as number
							var peaPos_X as number
							var peaXmin as number
							var peaXmax as number
							var peaPos_Y as number
							var peaYmin as number
							var peaYmax as number          
								
								pea_Rad  = mypeas_Radius[iii]								
                                peaPos_X = mypeas_PosX[iii]
                                peaXmin = peaPos_X - pea_Rad
                                peaXmax = peaPos_X + pea_Rad                                   
                                peaPos_Y = mypeas_PosY[iii]
                                peaYmin = peaPos_Y - pea_Rad
                                peaYmax = peaPos_Y + pea_Rad
								var Point_Inside_peaBox as number                                       
                                Point_Inside_peaBox = false
                                Point_Inside_peaBox = SOW_Check_if_2Dpoint_Inside_2Dbox (Mxxx,Myyy,peaXmin,peaXmax,peaYmin,peaYmax)
                                

                                 if Point_Inside_peaBox == true then
								 
									if ZapType = "FLAME" then
										if mypeas_Mood[iii] > 0 then '....ZAP IT!!!
                                    
											searchDone = true
											mypeas_Mood[iii] = 0        '...= Zapped
											mypeas_FillColor[iii][0]=0 
											mypeas_FillColor[iii][1]=0
											mypeas_FillColor[iii][2]=0
											
											Any_Zaps   = true
											
										endif
                                    endif
									
									if ZapType = "POP" then
										if mypeas_Mood[iii] > 0 then '...only POP live peas
											searchDone = true
											mypeas_Mood[iii] = 99
											mypeas_FillColor[iii][0]=255 
											mypeas_FillColor[iii][1]=0
											mypeas_FillColor[iii][2]=0
										endif
									endif
									
								endif '...Point_Inside_peaBox == true 

								if fff = numpeas then
									searchDone = true
								endif
								
                        endwhile '...searchDone = false
			

endfunction '... SOW_Zap_pea_at_MousePos               
'...                                                   



'                                             
'   SOW_Get_User_Input_str                    
'                                             

function SOW_Get_User_Input_str(Prompt_str as string, Default_str as string )

	'... using input box
	var resp as string
	resp=inputbox(Prompt_str,Default_str)
	If resp <> null and resp <> "" then
		'msgbox(resp)
		return resp
	else 
		return ""
	endif

endfunction  '...SOW_Get_User_Input_str
'                                      

     
function SOW_Send_User_Ouput_str(Prompt_str as string, Output_str as string )

	'... using input box
	var resp as string
	resp=inputbox(Prompt_str,Output_str)
	If resp <> null and resp <> "" then
		'msgbox(resp)
		return resp
	else 
		return ""
	endif

endfunction  '...SOW_Send_User_Ouput_str
'                                       

'                                           
'   SOW_Plot_Banner_Text                    
'                                           
function SOW_Plot_Banner_Text (usr_string as string, Pos_x as number,Pos_y as number,dXX as number,dYY as number,scaleX as number,scaleY as number,RectColor as number,TextColor as number)

	'msgbox("Banner at="+Pos_x+Pos_y+dXX+dYY+"RectColor="+RectColor)
	xxx = SOW_Set_Color(RectColor)
	FillRectangle(Pos_x,Pos_y,dXX,dYY)
	
	xxx = SOW_Set_Color(TextColor)
	'scale(1,1)'...scaleX,scaleY)
    Print  (usr_string, Pos_x+10, Pos_y+10) ''''',Tcolor,Tfont)
    'scale (0.5,0.5)
	
endfunction '...SOW_Plot_Banner_Text      
'                                         

'----------------------------------
'   SOW_Launch_Gravitom            
'                                  
Function SOW_Launch_Gravitom()


endfunction '...SOW_Launch_Gravitom
'                                  

				
'---------------------------------------------------------------------------
'   SOW_Fill_Triangle                                                       
'                                                           				
function SOW_Fill_Triangle (pos_x as number, pos_y as number, pea_rad as number)				

REM ...This draws a simple upright (unrotated) equilateral triangle
	var angDegs as number
	var angRads as number
	var pos1x as number
	var pos1y as number
	var pos2x as number
	var pos2y as number
	var pos3x as number
	var pos3y as number

	angDegs=60
	angRads = angDegs * PI /180
	pos1x = pos_x
	pos1y = pos_y - pea_rad
	pos2x = pos_x + pea_rad* sin(angRads)
	pos2y = pos_y + pea_rad * cos(angRads)
	pos3x = pos_x - pea_rad* sin(angRads)
	pos3y = pos_y + pea_rad * cos(angRads)

	var myPoly[8] as array
	myPoly[0] = pos1x
	myPoly[1] = pos1y
	myPoly[2] = pos2x
	myPoly[3] = pos2y
	myPoly[4] = pos3x
	myPoly[5] = pos3y
	myPoly[6] = pos1x
	myPoly[7] = pos1y
	FillPolygon(myPoly)

endfunction '...SOW_Fill_Triangle
'                                

'---------------------------------------------------------------------------------------
function SOW_Message(Message_str as string)

	var xx as number
	var yy as number
	xx=100
	yy=200
	setColor(0,0,0)
	Print (Message_str, xx,yy)

endfunction '...SOW_Message
'                          

'---------------------------------------------------------------------------------------
function SOW_sgn(xx as number)

	var rVal as number
	rVal = 0

	if xx > 0 then

	 rVal = 1

	elseif xx < 0 then

	 rVal = -1

	endif
 
 return rVal
 
endfunction '... 
'                

'---------------------------------------------------------------------------------------
function SOW_Fill2D_Box_x1x2y1y2(x1 as number, x2 as number, y1 as number, y2 as number)

	var width as number
	var height as number
	width  = x2 - x1
	height = y2 - y1
	fillrectangle (x1,y1,width,height)	
	
endfunction '...
'               
                             
									  
'-------------------------------------------------------------------
'  MESSING ABOUT  
'            	  

'-------------------------------------------------------------------
Function Junk()
   var $fred as number '...ok
   $fred=12'...ok
   
	junk = $Alex(12)
	
endfunction

'-------------------------------------------------------------------
Function $Alex(Anum as number) 
'...this is to see if I can do a dummy function which I post-compile delete and thereby invoke personal JS function in some library
'...it may not be neccy with BB v0.6

 print ("Hello from Alex",1,1)
 
endfunction
