' Demonstration of using Gadgets in Amiga Basic
'
' Bryan D. Catley
' September 1986
'
gdgt=0:NumGdgts=16
GdgtA%=0:GdgtB%=0
DIM Gdgts(NumGdgts-1,6),GdgtTxt$(NumGdgts-1)
BldGdgts NumGdgts,Gdgts(),GdgtTxt$()

' Gadget Descriptions
REM    X    Y   X+   Y+  BG  FG  Sh  Text          
DATA 184,  24,  48,  24,  1, 17,  2, "More" 
DATA 248,  24,  48,  24,  1,  5,  2, "Quit"
DATA  28,  76,  16,  16,  7, 17,  5, "Q"
DATA 140, 108, 120,  16,  0,  2,  1, "  A Long One"
DATA 216,  64,  64,  24,  4,  5,  0, "  XX"
DATA  38, 158, 164,  12,  0,  1, -1, "" 
DATA 196,  28,  56,  16,  1, 17,  2, "Repeat"
DATA 260,  28,  40,  16,  1,  5,  2, "Quit"
DATA  12,  92,  46,  16,  7,  5,  2, "Type1" 
DATA  60,  92,  46,  16,  1,  0,  2, "Type2"
DATA 108,  92,  46,  16,  1,  0,  2, "Type3"
DATA 156,  92,  46,  16,  1,  0,  2, "Type4"
DATA 204,  92,  46,  16,  1,  0,  2, "Type5"
DATA 252,  92,  46,  16,  7, 17,  2, "Type6"
DATA 118, 158, 180,  12,  7,  4, -1, ""
DATA  38, 126, 124,  12,  3,  3, -2, "No Change"

SCREEN 2,320,200,5,1
WINDOW 2,,,16,2
ON MOUSE GOSUB GetMouse:MOUSE ON

FirstOne:
COLOR 3,25:CLS:LOCATE 1,11:PRINT"AMIGA BASIC GADGETS"
LINE(0,16)-(312,16),2
COLOR 2,25:LOCATE 5,1:PRINT"These are real Gadgets"
DrawGdgts 0,1,Gdgts(),GdgtTxt$()
LINE(0,56)-(312,56),2
CALL DrawGdgts (2,5,Gdgts(),GdgtTxt$())
COLOR 2,0:LOCATE 21,6:PRINT"Some text to change.":COLOR 2,4

NxtGadget1:
GdgtA%=0:GdgtB%=5:gdgt=0
WHILE gdgt=0:SLEEP:WEND
ON gdgt GOTO SecondOne,Quit,ShoGdgt1,ShoGdgt1,ShoGdgt1,ShoGdgt1

ShoGdgt1:
COLOR 2,25:LOCATE 23,19:PRINT SPACE$(15);
LOCATE 23,2:PRINT"You just clicked: ";GdgtTxt$(gdgt-1);
GOTO NxtGadget1

SecondOne:
COLOR 7,25:CLS:LOCATE 1,11:PRINT"AMIGA BASIC GADGETS"
LINE(0,16)-(312,16),2
COLOR 2,25:LOCATE 5,7:PRINT"More real Gadgets"
CALL DrawGdgts (6,7,Gdgts(),GdgtTxt$())
LINE(0,56)-(312,56),2
DrawGdgts 8,15,Gdgts(),GdgtTxt$()
COLOR 2,7:LOCATE 21,16:PRINT"More changes...":COLOR 2,4

NxtGadget2:
GdgtA%=6:GdgtB%=15:gdgt=0
WHILE gdgt=0:SLEEP:WEND
IF gdgt>2 THEN ShoGdgt2
ON gdgt GOTO FirstOne,Quit

ShoGdgt2:
COLOR 2,25:LOCATE 23,19:PRINT SPACE$(15);:gdgt=gdgt-1+7
LOCATE 23,2:PRINT"You just clicked: ";GdgtTxt$(gdgt-1);
GOTO NxtGadget2

Quit:
MOUSE OFF
WINDOW CLOSE 2:SCREEN CLOSE 2
END

' Mouse Interrupt Routine
GetMouse:
GetGdgt GdgtA%,GdgtB%,Gdgts(),GdgtTxt$(),gdgt
RETURN
  
SUB BldGdgts (Num,T1(),T2$()) STATIC
FOR n=0 TO Num-1
  FOR m=0 TO 6
    READ T1(n,m)
  NEXT m
  READ T2$(n)
NEXT n
END SUB

SUB DrawGdgts (Ga%,Gb%,T1(),T2$()) STATIC
FOR n=Ga% TO Gb%
  x1=T1(n,0):y1=T1(n,1):x2=x1+T1(n,2):y2=y1+T1(n,3)
  bg=T1(n,4):fg=T1(n,5):bo=T1(n,6)
  LINE(x1,y1)-(x2,y2),bg,bf:LINE(x1,y1)-(x2,y2),fg,b
  IF bo>-1 THEN
    LINE(x1+2,y1+2)-(x2-2,y2-2),fg,b
    LINE(x2+1,y1+1)-(x2+1,y2+1),bo
    LINE(x2+1,y2+1)-(x1+1,y2+1),bo
    COLOR fg,bg:row%=INT(y1/8+2):col%=INT(x1/8+2)
    LOCATE row%,col%:PRINT T2$(n)
  END IF
NEXT n
END SUB

SUB GetGdgt (Ga%,Gb%,T1(),T2$(),type) STATIC
SHARED MouseX%,MouseY%,MouseInd
WHILE MOUSE(0)=0:WEND
r%=CSRLIN:c%=POS(0)
mx=MOUSE(1):my=MOUSE(2)
MouseX%=mx:MouseY%=my:MouseInd=0
FOR n=Ga% TO Gb%
  IF mx>T1(n,0) AND mx<T1(n,0)+T1(n,2) THEN
    IF my>T1(n,1) AND my<T1(n,1)+T1(n,3) THEN
      bg=T1(n,4):fg=T1(n,5):bo=T1(n,6)
      IF bo>-1 THEN
        x1=T1(n,0)+2:y1=T1(n,1)+2
        x2=x1+T1(n,2)-4:y2=y1+T1(n,3)-4
        LINE(x1,y1)-(x2,y2),fg,bf
        COLOR bg,fg:row%=INT(y1/8+2):col%=INT(x1/8+2)
        LOCATE row%,col%:PRINT T2$(n)
      ELSE
        IF bo=-1 THEN
          x1=T1(n,0):y1=T1(n,1):x2=x1+T1(n,2):y2=y1+T1(n,3)
          LINE(x1,y1)-(x2,y2),fg,bf:LINE(x1,y1)-(x2,y2),bg,b
        END IF
      END IF
      type=n-Ga%+1:n=Gb%:MouseInd=1
      IF bo>-1 THEN n%=type+Ga%-1
    END IF
  END IF
NEXT n
WHILE MOUSE(0)<>0:WEND
IF type<>0 AND bo>-1 THEN DrawGdgts n%,n%,T1(),T2$()
LOCATE r%,c%
END SUB

