🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sys.amiga.tech
1 messages
1 total messages Started by Kent D. Polk Thu, 13 Dec 1990 03:44
Refreshing a window with gadtools gadgets
#7456
Author: Kent D. Polk
Date: Thu, 13 Dec 1990 03:44
113 lines
4016 bytes
I have a window which may have 'variable' sets of gadtools gadgets. It determines
how to set things up based on a message that very seldom gets sent to it.

Done this way:

-------- On program startup (abbreviated version)

   if (!(GfxBase=(struct GfxBase *) OpenLibrary("graphics.library", 36L))) {
...
   if (!(IntuitionBase = (struct IntuitionBase *)
     OpenLibrary("intuition.library", 36L))) {
...
   if (!(GadToolsBase = OpenLibrary("gadtools.library", 36L))) {
...
   if (!(mysc = LockPubScreen(NULL))) {
...


-------- On each rethink message:

   if (reinit) closeinit(); /* closeinit can only be called after the first time */

   if (!(vi = GetVisualInfo(mysc, TAG_DONE))) {
...
   if (!CreateAllGadgets(&glist, vi, topborder, num)) {
...
   /***  Create the Gadget Window ***/
   if (!(mywin = OpenWindowTags(NULL,
...
   /* Add gadgets, refresh them, and call the toolkit refresh */
   AddGList(mywin, glist, ((UWORD) -1), ((UWORD) -1), NULL);
   RefreshGList(glist, mywin, NULL, ((UWORD) -1));
   GT_RefreshWindow(mywin, NULL);


-----------------------------

When this refresh or 'rethink' message gets sent to my program after
the first time, closeinit gets called, which frees the visualinfo, the
Gadgets & closes the window as seen in closeinit() below. Now, the
window & gadgets get created correctly, but cputrap gives me a rash of
invalid memory accesses to FFFFFFFF, typically.

I assume I am incorrectly freeing or reallocating resources.  What
would be the correct method of doing this?

======================================================================
Associated info:

struct GfxBase *GfxBase             = NULL;
struct IntuitionBase *IntuitionBase = NULL;
struct Library *GadToolsBase        = NULL;
struct Screen *mysc                 = NULL;
struct Gadget *glist                = NULL;
struct Window *mywin                = NULL;
void *vi                            = NULL;

/******************************/
closeinit()
{
   if (mywin) CloseWindow(mywin);
   if (vi) FreeVisualInfo(vi);
   if (glist) FreeGadgets(glist);
}

/******************************/
struct Gadget *CreateAllGadgets(
   struct Gadget **glistptr, void *vi, UWORD topborder, UWORD num)
{
   int i, j;
   struct NewGadget ng;
   struct Gadget *gad = NULL;

   gad = CreateContext(glistptr);

   ng.ng_VisualInfo  = vi;
   ng.ng_LeftEdge    = 70;
   ng.ng_Height      = 11;
   ng.ng_Width       = 45;
   ng.ng_Flags       = PLACETEXT_LEFT;

   for (j=0;j<num;j++) {
      ng.ng_TopEdge = topborder + w_HEIGHT*j + 5*j;
      ng.ng_GadgetText  = GadLabels[0];
      ng.ng_GadgetID    = j * MAXCHANNELS;
      gad = CreateGadget(CYCLE_KIND, gad, &ng,
         GTCY_Labels, ChanLabels,
         GTCY_Active, OFF,
         TAG_DONE);

      for (i=1;i<NUMGADS-1;i++)
         if (gad) {
            ng.ng_TopEdge     = ng.ng_TopEdge + topoffset;
            ng.ng_GadgetText  = GadLabels[i];
            ng.ng_GadgetID    = j * MAXCHANNELS + i;
            gad = CreateGadget(SLIDER_KIND, gad, &ng,
               GTSL_Min, SliderMin[i],
               GTSL_Max, SliderMax[i],
               GTSL_Level, SliderLevel[i],
               TAG_DONE);
         }

/* ... some more stuff like this */

   }
   return (gad);
}

Thanks Much,
====================================================================
Kent Polk - Southwest Research Institute - kent@swrinde.nde.swri.edu
        "Well... can't you get a Novell card for your Cray ?"
====================================================================
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads