'**********************************
'*                                *
'* Friendly-Gadgets with Intuition*
'* ------------------------------ *
'*                                *
'* Author : Wolf-Gideon Bleek     *
'* Date   : May 23 '88            *
'* Name   : Friendly-Gadgets      *
'* Version: 1.2                   *
'* System : V1.2 & V1.3           *
'*                                *
'**********************************
  OPTION BASE 1
  DEFLNG a-z
  
  LIBRARY "t&T2:bmaps/exec.library"
  DECLARE FUNCTION AllocMem LIBRARY
  DECLARE FUNCTION GetMsg LIBRARY
  LIBRARY "t&t2:bmaps/intuition.library"
  DECLARE FUNCTION OpenWindow LIBRARY
  GADGETDOWN = 32&
  GADGETUP   = 64&
  CLOSEW     = 512&
    
  MList      = 0&
  Info       = 1
  
MainProgram:
  GOSUB OpenAll
  ' Mani part
  MainLoop:
    IF Info = 1 THEN
      IntuiMsg = GetMsg(UserPort)
      IF IntuiMsg > 0 THEN GOSUB IntuitionMsg
      GOTO MainLoop
    END IF   
  
  GOSUB CloseAll
  
END

OpenAll:

  Border Bord, -1, -1, 1,67,14
  IntuiText OKTxt, 1, 26, 2, "OK", 0&
  IntuiText CancelTxt, 1, 10, 2, "Cancel", 0&
  IntuiText ResetTxt, 1, 14, 2, "Reset", 0&
  IntuiText UndoTxt, 1, 20, 2, "Undo", 0&
  GadgetDef UndoGad, 0&, 380, 52, 65, 12, 0, 1, 1, Bord, UndoTxt, 0&, 1
  GadgetDef ResetGad, UndoGad, 380, 68, 65, 12, 0, 1, 1, Bord, ResetTxt, 0&, 2 
  GadgetDef OKGad, ResetGad, 380, 84, 65, 12, 0, 1, 1, Bord, OKTxt, 0&, 3
  GadgetDef CancGad, OKGad, 380, 100, 65, 12, 0, 1, 1, Bord, CancelTxt, 0&, 4 
  Title$ = "An example of four user friendly Gadgets"
  WinDef NWindow, 100, 50, 460, 150, 32+64+512&, 15&+4096&, CancGad, Title$
  WinBase  = OpenWindow(NWindow)
  IF WinBase = 0 THEN ERROR 7
  RastPort = PEEKL(WinBase+50)
  UserPort = PEEKL(WinBase+86)
RETURN

CloseAll:
  CALL CloseWindow(WinBase)
  CALL UnDef
RETURN

IntuitionMsg:  
  MsgType   = PEEKL(IntuiMsg+20)
  Item      = PEEKL(IntuiMsg+28)
  GadgetNr% = PEEK(Item+39)
  CALL ReplyMsg(IntuiMsg)
'The check routines:
IF (MsgType = GADGETDOWN) THEN
 'activation
 PRINT "DOWN Gadget-Nr.:";GadgetNr%
END IF

IF (MsgType = GADGETUP) THEN
 'rel verify mode
 PRINT "UP Gadget-Nr.:";GadgetNr%
 IF GadgetNr% = 1 THEN
  GOSUB Undo   ' put in old value
 END IF
 IF GadgetNr% = 2 THEN
  GOSUB ResetRoutine  'all values back to original
 END IF
 IF GadgetNr% = 3 THEN
  GOSUB Ok  ' end value entry
 END IF
 IF GadgetNr% = 4 THEN
  GOSUB Cancel  ' interrupt value entry
 END IF
END IF

IF (MsgType = CLOSEW) THEN
 'close system Gadget window
 PRINT "CLOSE WINDOW"
 Info = 0
END IF

RETURN

Undo:
   PRINT "The UNDO gadget was selected"
RETURN  

ResetRoutine:
   PRINT "The RESET gadget was selected"
RETURN 

Ok: 
   PRINT "The OK gadget was selected"
RETURN  

Cancel:
   PRINT "The CANCEL gadget was selected"
RETURN  

'--------------------------------------------

SUB DefChip(Buffer,Size)STATIC
 SHARED MList
  Size=Size+8
  Buffer=AllocMem(Size,65538&)
  IF Buffer>0 THEN
    POKEL Buffer,MList
    POKEL Buffer+4,Size
    MList=Buffer
    Buffer=Buffer+8
  ELSE
    ERROR 7
  END IF
END SUB
SUB UnDef STATIC
 SHARED MList
undef.loop:
  IF MList>0 THEN
    Address = PEEKL(MList)
    ListSize = PEEKL(MList+4)
    FreeMem MList, ListSize
    MList   = Address
    GOTO undef.loop
  END IF
END SUB       
SUB WinDef(bs, x%, y%, b%, h%, IDCMP, f, gad, T$) STATIC
  Size = 48+LEN(T$)+1
  DefChip bs,Size
  POKEW bs   ,x%      ' Left Corner
  POKEW bs+ 2,y%      ' Top Corner
  POKEW bs+ 4,b%      ' Width
  POKEW bs+ 6,h%      ' Height
  POKEW bs+ 8,65535&  ' Detail- BlockPen
  POKEL bs+10,IDCMP   ' IDCMP Flags
  POKEL bs+14,f       ' Flags
  POKEL bs+18,gad     ' First Gadget
  POKEL bs+26,bs+48   ' Title
  POKEW bs+46,1       ' Screen Type 
  FOR i%=1 TO LEN(T$)
     POKE bs+47+i%,ASC(MID$(T$,i%,1))
  NEXT
END SUB
SUB GadgetDef(bs, nx, x%, y%, b%, h%, f%, a%, T%, i, txt, si, n%) STATIC
  DefChip bs,44&      ' Gadget-Structure length
  POKEL bs   ,nx      '*NextGadget
  POKEW bs+ 4,x%      ' LeftEdge
  POKEW bs+ 6,y%      ' TopEdge
  POKEW bs+ 8,b%      ' Width
  POKEW bs+10,h%      ' Height
  POKEW bs+12,f%      ' Flags
  POKEW bs+14,a%      ' Activation
  POKEW bs+16,T%      ' GadgetType
  POKEL bs+18,i       ' GadgetRender
  POKEL bs+26,txt     '*GadgetText
  POKEL bs+34,si      ' SpecialInfo
  POKEW bs+38,n%      ' GadgetID
END SUB

SUB IntuiText(bs, c1%, x%, y%, T$, nx) STATIC
  Size=20+LEN(T$)+1   ' Structure lewngth+ Text length+ Nullbyte
  DefChip bs,Size
  POKE  bs   ,c1%     ' FrontPen
  POKE  bs+ 2,1       ' DrawMode
  POKEW bs+ 4,x%      ' Left corner
  POKEW bs+ 6,y%      ' Top corner
  POKEL bs+12,bs+20   ' IText
  POKEL bs+16,nx      ' NextText
  FOR i%=1 TO LEN(T$)
     POKE bs+19+i%,ASC(MID$(T$,i%,1))
  NEXT
END SUB

SUB Border(bs, x%, y%, c%, b%, h%) STATIC
  DefChip bs,48&      ' Structure length+ Coordinate table
  POKEW bs  ,x%       ' Left corner
  POKEW bs+2,y%       ' Top corner
  POKE  bs+4,c%       ' FrontPen
  POKE  bs+7,8        ' Count
  POKEL bs+8,bs+16    '*XY
  FOR i%=0 TO 1
     POKEW bs+22+i%*4,h%-1
     POKEW bs+24+i%*4,b%-1
     POKEW bs+32+i%*4,1
     POKEW bs+38+i%*4,h%-1
     POKEW bs+40+i%*4,b%-2
  NEXT
END SUB


