/* Example of GadTools Functions */

x = addlib("apig.library",0,-30,0)          /* make the lib avaiable */

call SET_APIG_GLOBALS()


scr          = LOCKPUBSCREEN("Workbench")   /* gonna put our window  */
                                            /* Workbench screen      */

scrvinfo     = GETVISUALINFO(scr)           /* NewGadgets need this  */

scrfont      = GETVALUE(scr,40,4,'p')       /* NewGadgets need this  */
                                            /* points to TextAttr    */

glistpointer = ALLOCVEC(4,MEMF_CLEAR)       /* a pointer for context */

conxgad      = CREATECONTEXT(glistpointer)  

previousgadget = conxgad

myid = 10


/* we now create and initialize a NewGadget structure */

newgadx = MAKENEWGADGET(scrvinfo,scrfont,65,32,145,12,"CYCLE GADGET",
                        ,PLACETEXT_ABOVE,myid,null())


/* we need some labels for the gadget */

mylabels = make_me_some_labels()


/* we now create the gadget, a CYCLE gadget */

previousgadget = CREATEGADGET(CYCLE_KIND,previousgadget,newgadx,
                                 ,GTCY_LABELS,mylabels,
                                 ,TAG_DONE,0)

/* SETNEWGADGET re-uses the NewGadget structure 'newgadx'   */
/* resetting the values for the creation of our next gadget */

call SETNEWGADGET(newgadx,scrvinfo,scrfont,365,32,145,42,"",
                  ,PLACETEXT_RIGHT,myid+10,null())

/* and we create another gadget, MUTUAL EXCLUDE Gadget  */

previousgadget = CREATEGADGET(MX_KIND,previousgadget,newgadx,
                                 ,GTMX_LABELS,mylabels,
                                 ,TAG_DONE,0)

wintitle = "APIG v3.1 GadTools MX & CYCLE KIND Example"
winidcmp = CLOSEWINDOW+GADGETUP+GADGETDOWN+MOUSEMOVE
winflags = WINDOWCLOSE+WINDOWDRAG+WINDOWSIZING+WINDOWDEPTH+GIMMEZEROZERO,
           +ACTIVATE

portname = "apiggadt2_port"

p = openport(portname)


/* open window, last parm in OPENWINDOW call points to our gadgets  */
w1  = OPENWINDOW(portname,0,30,640,200,2,4,winidcmp,winflags,wintitle,
                 ,scr,0,null(),null(),conxgad)

call GT_REFRESHWINDOW(w1,null())  /* need after opening window */

rpw1 = GETWINDOWRASTPORT(w1) 

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 CLOSEWINDOW(w1)

call UNLOCKPUBSCREEN(null(),scr)

call FREEVISUALINFO(scrvinfo)

call FREEGADGETS(conxgad)

call FREETHIS(newgadx)

call FREEVEC(glistpointer)

call FREETHIS(mylabels)    /* frees the array and all mem allocated to it */

exit

make_me_some_labels:

     mlabels = MAKEPOINTER(0,0,44,MEMF_CLEAR) /* an array of 31 pointers */
                                              /* 4bytes * 11 = 44        */

     do x = 1 to 10 /* only 10, last one must be null to terminate list */

        /* label text */
        ltxt = "LABEL" x 

        /* buffer for label text, the memory is owned by mlabels */
        lbuf = MAKEPOINTER(mlabels,0,length(txt)+1,MEMF_CLEAR)

        /* copy label text into buffer */
        call export(lbuf,ltxt)

        /* set array slot to lbuf address */
        call SETVALUE(mlabels,(x-1)*4,4,'p',lbuf)
        
     end

return mlabels
