REM
REM Voorbeeld uit de cursus AmigaBasic van Amigazette 01
REM
REM (C) Jos Courbois, Fazantlaan 63, 6641 XW Beuningen
REM

WINDOW CLOSE 1
DEFINT a-z
TRUE=-1
FALSE=0
Okay=FALSE

LIBRARY "exec.library"
LIBRARY "intuition.library"
LIBRARY "graphics.library"

DECLARE FUNCTION AllocMem& LIBRARY

GadCnt = 10
MemType& = 65539&

DIM Rp&(1),Wp&(1)
DIM Gad&(GadCnt),StrBuf&(GadCnt),SpecInfo&(GadCnt)

SCREEN 1,640,200,4,2
WINDOW 1,"Gadget-Window",(0,0)-(631,186),0,1
Rp&(1)=WINDOW(8)
Wp&(1)=WINDOW(7)
PALETTE 0,0,0,0
PALETTE 1,3/16,7/16,13/16
PALETTE 2,0,5/16,13/16
PALETTE 3,9/16,11/16,0

CALL SetDrMd& (Rp&(1),0)

REM Eerste string-GADGET
LINE(3,5)-(306,18),4,bf:LINE(5,6)-(304,17),0,b
LINE(7,8)-(302,15),0,bf

REM Tweede string-GADGET
LINE(3,21)-(306,34),9,bf:LINE(5,22)-(304,33),0,b
LINE(7,24)-(302,31),0,bf

REM ....
LINE(3,37)-(306,50),9,bf:LINE(5,38)-(304,49),0,b
LINE(7,40)-(302,47),0,bf

LINE(3,53)-(306,66),9,bf:LINE(5,54)-(304,65),0,b
LINE(7,56)-(302,63),0,bf

LINE(3,69)-(306,82),9,bf:LINE(5,70)-(304,81),0,b
LINE(7,72)-(302,79),0,bf

LINE(3,85)-(208,98),9,bf:LINE(5,86)-(206,97),0,b
LINE(7,88)-(204,95),0,bf

LINE(211,85)-(237,98),9,bf:LINE(213,86)-(235,97),0,b
LINE(215,88)-(233,95),0,bf

LINE(240,85)-(306,98),9,bf:LINE(242,86)-(304,97),0,b
LINE(244,88)-(302,95),0,bf

BooleanGADGETS:
LINE(500,25)-(564,38),4,bf:LINE(502,26)-(562,37),0,b
LINE(500,50)-(564,63),9,bf:LINE(502,51)-(562,62),0,b

IntuitionTEKST:
Move& Rp&(1),513&,34&
PRINT "Enter"
Move& Rp&(1),519&,59&
PRINT "Eind"
SetDrMd& Rp&(1),1

REM STRING-GADGETS
MakeGad 1,8,8,304,8,4,37,41,2
MakeGad 2,8,24,304,8,4,37,41,3
MakeGad 3,8,40,304,8,4,37,41,4
MakeGad 4,8,56,304,8,4,37,41,5
MakeGad 5,8,72,304,8,4,37,41,6
MakeGad 6,8,88,192,8,4,24,41,7
MakeGad 7,216,88,20,8,4,3,3,8
MakeGad 8,252,88,52,8,4,6,11,9

REM BOOLEAN GADGETS
MakeGad 9,500,25,65,14,1,0,0,9
MakeGad 10,500,50,65,14,1,0,0,0

MAIN:

WHILE -1
G1=PEEKW(Gad&(9)+12)
G2=PEEKW(Gad&(10)+12)

IF G1 AND 128 THEN GOSUB FixData
IF G2 AND 128 THEN CleanUp

WEND

FixData:
LOCATE 14,1 : COLOR 11 : PRINT "Een ogenblikje..."
FOR cnt=1 TO 8
   Dat$(cnt)=""
   Char=0
   WHILE PEEK(StrBuf&(cnt)+Char) <> 0
      Dat$(cnt)=Dat$(cnt)+CHR$(PEEK(StrBuf&(cnt)+Char))
      Char=Char+1
   WEND
NEXT

LOCATE 15,1 : COLOR 14
FOR cnt=1 TO 8
   PRINT SPACE$(60)
NEXT
LOCATE 15,1
FOR cnt=1 TO 8
   PRINT Dat$(cnt)
NEXT
RETURN

SUB MakeGad (n,l,t,w,h,type,v,max,nxt) STATIC
SHARED Wp&(),Gad&(),SpecInfo&(),StrBuf&()
SHARED MemType&
   Gad&(n)=     AllocMem&(48,MemType&)
   StrBuf&(n)=  AllocMem&(64,MemType&)
   SpecInfo&(n)=AllocMem&(64,MemType&)
   IF type<>4 THEN S&=0 ELSE S&=SpecInfo&(n)

GADGETStruktuur:
   POKEL Gad&(n),nxt            :REM Wijzer naar volgende GADGET
   POKEW Gad&(n)+4,l            :REM Linker hoek
   POKEW Gad&(n)+6,t            :REM Boven hoek
   POKEW Gad&(n)+8,w            :REM Breedte
   POKEW Gad&(n)+10,h           :REM Hoogte
   POKEW Gad&(n)+12,0
   POKEW Gad&(n)+14,1
   POKEW Gad&(n)+16,type        :REM type 1, 3 of 4
   POKEL Gad&(n)+18,0
   POKEL Gad&(n)+22,0
   POKEL Gad&(n)+26,0           :REM Normale karakterset
   POKEL Gad&(n)+30,0
   POKEL Gad&(n)+34,S&          :REM Eventuele speciale info
   POKEW Gad&(n)+38,n           :REM GADGET ID
   POKEL Gad&(n)+40,0

SpecInfoStruktuur:
   IF type = 4 THEN
      POKEL SpecInfo&(n),StrBuf&(n) :REM Buffer
      POKEL SpecInfo&(n)+4,0        :REM Undo-Buffer
      POKEW SpecInfo&(n)+8,0        :REM Startpositie
      POKEW SpecInfo&(n)+10,max     :REM Max. aantal karakters
      POKEW SpecInfo&(n)+12,0       :REM Display positie
      POKEW SpecInfo&(n)+14,0       :REM Undo positie
      POKEW SpecInfo&(n)+16,0       :REM Aantal karakters
      POKEW SpecInfo&(n)+18,v       :REM Aantal zichtbare kar.
      POKEW SpecInfo&(n)+20,0
      POKEL SpecInfo&(n)+22,0
      POKEL SpecInfo&(n)+26,0
      POKEL SpecInfo&(n)+30,0
      POKEL SpecInfo&(n)+34,0
      POKEL SpecInfo&(n)+38,0
   END IF

   AddGadget& Wp&(1),Gad&(n),n

END SUB

CleanUp:
WINDOW CLOSE 1
SCREEN CLOSE 1
FOR cnt=1 TO GadCnt
   FreeMem& Gad&(cnt),48
   FreeMem& StrBuf&(cnt),64
   FreeMem& SpecInfo&(cnt),64
NEXT
LIBRARY CLOSE
WINDOW 1,"BASIC",(0,0)-(617,187),31,-1
END
