' **********************************************************************

' Using Binary Clip Data from AmigaBASIC

' **********************************************************************

' In its JUMPDISK appearance, this file is crunched. To decrunch it,
' see the DECRUNCH item on the ARTICLES MENU. This Basic source is made
' available to programmers who want to work with it. A separate compiled
' version is available in the main window of this directory and does not
' not require AmigaBASIC.

COMMON SHARED image1%(), image2%(),image3%(), image4%(), logo%(), JD%()
COMMON SHARED gx1(), gx2(), gy1(), gy2(), gsl(), mx, my, result
COMMON SHARED text$(), mark()

DIM Text$(75)

logo$ = "Clips/New.clp"
JD$   = "Clips/JD.clp"

s1$ = "Clips/s1.clp"
s2$ = "Clips/s2.clp"

' ---------------------------- Get Image Data For GetPict Logo

OPEN Logo$ FOR INPUT AS #1   '     Open Image Clip File
DIM logo%(LOF(1)/2)          '     Allocate Variable Space
CLOSE #1                     '     Close Image Clip File
BLOAD logo$, VARPTR(logo%(0))  '     Place Clip Data Into Array

' ---------------------------- Image for JumpDisk Logo
OPEN JD$ FOR INPUT AS #1
DIM JD%(LOF(1)/2)
CLOSE #1
BLOAD JD$, VARPTR(JD%(0))
' ---------------------------- Image for Switch Gadget (Non-Selected)
OPEN s1$ FOR INPUT AS #1
DIM image1%(LOF(1)/2)
CLOSE #1
BLOAD s1$, VARPTR(image1%(0))
' ---------------------------- Image for Switch Gadget (Selected)
OPEN s2$ FOR INPUT AS #1
DIM image2%(LOF(1)/2)
CLOSE #1
BLOAD s2$, VARPTR(image2%(0))

' --------------------------------- Let's set up a coupe of gadgets

gw = image1%(0)
gh = image1%(1)


' ----------------------------------------- Switch Gadget 1
gx1(1) = 20         ' Top left x
gy1(1) = 20         ' Top left y
gx2(1) = gx1(1)+gw  ' Bottom left x
gy2(1) = gy1(1)+gh  ' Bottom left y
gsl(1) = 0          ' Selected (0 or 1)

' ----------------------------------------- Switch Gadget 2
gx1(2) = 20
gy1(2) = 78
gx2(2) = gx1(2)+gw
gy2(2) = gy1(2)+gh
gsl(2) = 0

' ----------------------------------------- Switch Gadget 3
gx1(3) = 20
gy1(3) = 136
gx2(3) = gx1(3)+gw
gy2(3) = gy1(3)+gh
gsl(3) = 0

' ----------------------------------------- Call Set-Up Subroutines
InitArray
DrawGadg 1
DrawGadg 2
DrawGadg 3
NoGadgDown

' ----------------------------------------- The Main Loop

DO
   WHILE NOT MOUSE(0):SLEEP:WEND
    mx = MOUSE(1)
    my = MOUSE(2)
    g = 0
    gsl(1) = 0  ' ---- Deselect Everything
    gsl(2) = 0
    gsl(3) = 0
    FOR a = 1 TO 3
        CheckGadg a
        IF result = 1 THEN g = a
    NEXT
    gsl(g) = 1

    ' ------------------------------------ Refresh Gadgets
    FOR a = 1 TO 3
        DrawGadg a
    NEXT
    
    SELECT CASE g
        CASE 0
            NoGadgDown
        CASE 1
            DoSomething
        CASE 2
            DoSomethingElse
        CASE 3
            DoSomethingDifferent
    END SELECT
    
    
    WHILE MOUSE(0):WEND

LOOP

' ***************************************** SubPrograms Start Here

' ----------------------------------------- Draw Gadget

SUB DrawGadg(num)
    t = gsl(num)   ' Can't use a dimensioned variable with select
    SELECT CASE t
        CASE 0
            PUT(gx1(num),gy1(num)),image1%,PSET
        CASE 1
            PUT(gx1(num),gy1(num)),image2%,PSET
    END SELECT
END SUB

' ----------------------------------------- Check if Selected

SUB CheckGadg(num)
    result = 1
    IF (mx>gx2(num)) OR (mx<gx1(num)) THEN result = 0
    IF (my>gy2(num)) OR (my<gy1(num)) THEN result = 0
END SUB

' ----------------------------------------- No Gadget Screen
SUB NoGadgDown
    ClearArea 0
    COLOR 1,0
    PUT (200,30),Logo%,PSET
    PUT (400,27),JD%,PSET
    FOR a = 1 TO mark(1)-1
       LOCATE a+10, 17
       PRINT text$(a)
    NEXT 
END SUB

' ----------------------------------------- First Gadget Screen
SUB DoSomething
    ClearArea 1
    COLOR 2,1
    top = 2
    FOR a = mark(1)+1 TO mark(2)-1
       LOCATE (a-mark(1))+top, 15
       PRINT text$(a)
    NEXT 
END SUB

' ----------------------------------------- Second Gadget Screen
SUB DoSomethingElse
    ClearArea 3
    COLOR 1,3
    top = 2
    l = 100
    FOR a = mark(2)+1 TO mark(3)-1
       LOCATE (a-mark(2))+top, 15
       PRINT text$(a)
    NEXT 
    barh=(130-(l-5))/4
    c = 0
    for a = l-5 to 130-barh step barh
       line (101,a)-(609,a+barh),c,bf
       c = c+1
    next
    for a = 105 to 609 step 10
       line (a,l-5)-(a,130),2
    next
    PUT (120,l),Logo%,PSET
    PUT (215,l),Logo%,PRESET
    PUT (310,l),Logo%,AND
    PUT (405,l),Logo%,OR
    PUT (500,l),Logo%,XOR
END SUB

' ----------------------------------------- Third Gadget Screen
SUB DoSomethingDifferent
    ClearArea 2
    COLOR 3,2
    top = 2
    FOR a = mark(3)+1 TO mark(4)-1
       LOCATE (a-mark(3))+top, 15
       PRINT text$(a)
    NEXT 
END SUB

' ----------------------------------------- Clear Message Area
SUB ClearArea(col)
   LINE (101,11)-(609,169),col,bf
   LINE (100,10)-(610,170),1,b
END SUB
   
SUB InitArray
    i = 1
    FOR a = 1 TO 75
        READ Text$(a)
        IF Text$(a) = "*" THEN
            mark(i) = a
            i = i + 1
        END IF 
        IF Text$(a) = "**" THEN
            mark(i) = a
            EXIT SUB
        END IF
    NEXT
END SUB
   
   
' ----------------------------------------- Data for First Screen
DATA "One use of GetPict is to save image clips of logos"
DATA "for use with title screens, etc. Another use is to create"
DATA "custom images for your gadgets. The gadgets to the right"
DATA "are examples of how two images can be combined to produce"
DATA "one button (selected and non-selected)."
DATA ""
DATA "Note also that one image can be used over and over. There"
DATA "is only one set of images defined, but all three buttons"
DATA "can use it."
DATA ""
DATA ""
DATA "*"
DATA "         Hisoft Basic and AmigaBasic Differ in the Way"
DATA "                   These Clips are Loaded:"
DATA ""
DATA "HISOFT:"
DATA "           OPEN FileName$ FOR INPUT AS #1"
DATA "           DIM Image%(LOF(1)/2)"
DATA "           CLOSE #1"
DATA "           BLOAD FileName$$, VARPTR(Image%(0))"
DATA ""
DATA "AmigaBASIC:"
DATA "           OPEN FileName$ FOR INPUT AS #1"
DATA "           DIM Image%(LOF(1)/2)"
DATA "           FOR a = 0 TO (LOF(1)/2)-1"
DATA "              a$ = INPUT$(2,1)"
DATA "              POKE VARPTR(Image%(a))  , PEEK(SADD(a$))"                             
DATA "              POKE VARPTR(Image%(a))+1, PEEK(SADD(a$)+1)"                                
DATA "           NEXT"
DATA "           CLOSE #1"  
DATA "*"
DATA "         The Code for Placing the Image, However is"
DATA "                     the Same for Both:"
DATA ""
DATA ""
DATA "                  PUT (X,Y),image%,(verb)"
DATA ""
DATA "Verbs Include:"
DATA ""
DATA "    PSET       PRESET        AND        OR         XOR"
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA "  The verbs are used to specify how the image will relate"
DATA "  to the background. The default verb is XOR (I usually"
DATA "  use PSET)"
DATA "*"
DATA ""
DATA "    The Size of the Image Can Be Determined by Looking"
DATA "      at the First Three Elements of the Image Array"
DATA ""
DATA "                  Width  = Image%(0)"
DATA "                  Height = Image%(1)"
DATA "                  Depth  = Image%(2)"
DATA ""
DATA "These can be used to determine the size of the gadget select"
DATA "area, making it possible to set up a generic gadget select"
DATA "routine that automatically adjusts to different-sized images."
DATA "The initializing statements could be something like this:"
DATA ""
DATA "        gx1(1) = 20                ' Top left x"
DATA "        gy1(1) = 20                ' Top left y"
DATA "        gx2(1) = gx1(1)+Image%(0)  ' Bottom left x"
DATA "        gy2(1) = gy1(1)+Image%(1)  ' Bottom left y"
DATA "        gsl(1) = 0                 ' Selected (0 or 1)"

DATA "**"

