
/* BOOPSI GADGETS EXAMPLE */
/* I have to admit, I really dont understand this boopsi stuff */

call addlib('apig.library',0,-30,0)

portname = "boopsigad_port"
p = openport(portname)

call set_apig_globals()

screen = LOCKPUBSCREEN(null())

drinfo = GETSCREENDRAWINFO(screen)

wintitle = "APIG v3.1 Boopsi Gadget Example"
ptrtitle = ALLOCVEC(length(wintitle)+1,MEMF_CLEAR)
call export(ptrtitle,wintitle)

winidcmp = CLOSEWINDOW+GADGETUP+GADGETDOWN+MOUSEMOVE+IDCMP_IDCMPUPDATE
winflags = WINDOWCLOSE+WINDOWDRAG+WINDOWSIZING+WINDOWDEPTH+GIMMEZEROZERO,
           +ACTIVATE

/* window tags */

wtags = ALLOCATETAGITEMS(8)
        call SETTAGSLOT(wtags,0,WA_PUBSCREEN,'p',screen)
        call SETTAGSLOT(wtags,1,WA_IDCMP,'n',winidcmp)
        call SETTAGSLOT(wtags,2,WA_FLAGS,'n',winflags)
        call SETTAGSLOT(wtags,3,WA_HEIGHT,'n',200)
        call SETTAGSLOT(wtags,4,WA_TITLE,'p',ptrtitle)


/* open window */

w1        = OPENWINDOWTAGLIST(portname,null(),wtags,0) 
wrastport = GETWINDOWRASTPORT(w1)


/* now for some gadgets, at least the ones that work, */
/* the others (not shown here) dont.                  */
/* you can try the others, just be prepared to reboot */

gadtags = ALLOCATETAGITEMS(28)

/* a prop gadget */

          call SETTAGSLOT(gadtags,0,GA_DRAWINFO,'p',drinfo)
          call SETTAGSLOT(gadtags,1,GA_WIDTH,'n',16)
          call SETTAGSLOT(gadtags,2,GA_HEIGHT,'n',80)
          call SETTAGSLOT(gadtags,3,GA_Left,'n',100)
          call SETTAGSLOT(gadtags,4,GA_Top,'n',50)
          call SETTAGSLOT(gadtags,5,GA_ID,'n',10)
          call SETTAGSLOT(gadtags,6,PGA_NEWLOOK,'n',1)
          /* itext1 is owned by window, freed when window closes */
          itext1 = makeitext(w1,"YOUR PROP GADGET",-50,-12,3,1,JAM2,,,)
          call SETTAGSLOT(gadtags,7,GA_INTUITEXT,'p',itext1)

          call SETTAGSLOT(gadtags,8,TAG_END,'n',10)
          propgad = NEWOBJECTA(null(),"propgclass",gadtags) 


/* a string gadget */

          call SETTAGSLOT(gadtags,0,GA_DRAWINFO,'p',drinfo)
          call SETTAGSLOT(gadtags,1,GA_WIDTH,'n',146)
          call SETTAGSLOT(gadtags,2,GA_HEIGHT,'n',10)
          call SETTAGSLOT(gadtags,3,GA_Left,'n',340)
          call SETTAGSLOT(gadtags,4,GA_Top,'n',50)
          call SETTAGSLOT(gadtags,5,GA_ID,'n',20)
          itext2 = makeitext(w1,"YOUR STRING GADGET",0,-12,3,1,JAM2,,,)
          border = makeborder(w1,0,1,148,11,1,0,JAM1,0)
          initstrg = makepointer(w1,0,length("Initial String Value")+1,MEMF_CLEAR)
          call export(initstrg,"Initial String Value")
          call SETTAGSLOT(gadtags,6,GA_INTUITEXT,'p',itext2)
          call SETTAGSLOT(gadtags,7,STRINGA_MAXCHARS,'n',120)
          call SETTAGSLOT(gadtags,8,STRINGA_TEXTVAL,'p',initstrg)
          call SETTAGSLOT(gadtags,9,GA_Border,'p',border)

          call SETTAGSLOT(gadtags,10,TAG_END,'n',10)
          strgad = NEWOBJECTA(null(),"strgclass",gadtags) 

call addgadget(w1,propgad,-1,-1,null())  
call addgadget(w1,strgad,-1,-1,null()) 

call refreshglist(propgad,w1,null(),-1)

exitme = 0
do while exitme = 0

     x = waitpkt(portname)
     do forever 
        msg = getpkt(portname)
        if msg = '0000 0000'x then leave
        msgclass  = getarg(msg,0)
        x = reply(msg,0)  
        select
           when msgclass = CLOSEWINDOW then exitme = 1
           otherwise nop
        end
     end
end

call DISPOSEOBJECT(propgad)
call DISPOSEOBJECT(strgad)

call CLOSEWINDOW(w1)

call FREESCREENDRAWINFO(screen,drinfo)

call UNLOCKPUBSCREEN(null(),screen)

call FREETAGITEMS(wtags)
call FREETAGITEMS(gadtags)
call FREEVEC(ptrtitle)

exit
