home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 514b.lha / GadgetED_v2.3 / Source / mem.c < prev    next >
C/C++ Source or Header  |  1991-06-08  |  4KB  |  125 lines

  1. /*----------------------------------------------------------------------*
  2.   mem.c Version 2.3 -  © Copyright 1990-91 Jaba Development
  3.  
  4.   Author : Jan van den Baard
  5.   Purpose: Freeing the alocated memory the gadgets take up
  6.  *----------------------------------------------------------------------*/
  7.  
  8. extern struct Window      *MainWindow;
  9. extern struct GadgetList   Gadgets;
  10. extern struct MemoryChain  Memory;
  11. extern struct Gadget       TextGadget;
  12. extern USHORT              GadgetCount, id;
  13. extern BOOL                Saved;
  14.  
  15. /*
  16.  * Free the memory of any type off gadget rendering attached to the gadget.
  17.  */
  18. VOID FreeRender(gadget)
  19.     struct Gadget *gadget;
  20. {
  21.     struct Image  *image;
  22.     struct Border *border, *border1;
  23.     ULONG         ps;
  24.  
  25.     if(TestBits((ULONG)gadget->GadgetType,PROPGADGET))
  26.     {   image = (struct Image *)gadget->GadgetRender;
  27.         if(TestBits((ULONG)gadget->Flags,GADGIMAGE))
  28.         {    ps = RASSIZE(image->Width,image->Height);
  29.              FreeMem(image->ImageData,ps * image->Depth);
  30.         }
  31.         FreeItem(&Memory,image,(long)sizeof(struct Image));
  32.     }
  33.     else if(TestBits((ULONG)gadget->Flags,GADGIMAGE))
  34.     {   image = (struct Image *)gadget->GadgetRender;
  35.         ps = RASSIZE(image->Width,image->Height);
  36.         FreeMem(image->ImageData,ps * image->Depth);
  37.         FreeItem(&Memory,image,(long)sizeof(struct Image));
  38.     }
  39.     else
  40.     {   border = (struct Border *)gadget->GadgetRender;
  41.         while(1)
  42.         {   border1 = border->NextBorder;
  43.             FreeItem(&Memory,border->XY,(border->Count << 2));
  44.             FreeItem(&Memory,border,(long)sizeof(struct Border));
  45.             if(NOT(border = border1)) break;
  46.         }
  47.     }
  48.     if((TestBits((ULONG)gadget->Flags,GADGHIMAGE)) AND
  49.        (NOT TestBits((ULONG)gadget->Flags,GADGHBOX)))
  50.     {   image = (struct Image *)gadget->SelectRender;
  51.         ps = RASSIZE(image->Width,image->Height);
  52.         FreeMem(image->ImageData,ps * image->Depth);
  53.         FreeItem(&Memory,image,(long)sizeof(struct Image));
  54.     }
  55. }
  56.  
  57. /*
  58.  * Free the memory a gadget takes up.
  59.  */
  60. VOID FreeGadget(gadget)
  61.     struct MyGadget *gadget;
  62. {
  63.     struct IntuiText  *itext,*tmp;
  64.     struct StringInfo *sinfo;
  65.  
  66.     if(TestBits((ULONG)gadget->Gadget.GadgetType,PROPGADGET))
  67.     {   if(gadget->Gadget.SpecialInfo)
  68.             FreeItem(&Memory,gadget->Gadget.SpecialInfo,(long)sizeof(struct PropInfo));
  69.     }
  70.     FreeRender(&gadget->Gadget);
  71.     itext = gadget->Gadget.GadgetText;
  72.     if(itext)
  73.     {   while(1)
  74.         {    tmp = itext->NextText;
  75.              if(itext->IText) FreeItem(&Memory,itext->IText,80L);
  76.              FreeItem(&Memory,itext,(long)sizeof(struct IntuiText));
  77.              if(!tmp) break;
  78.              itext = tmp;
  79.         }
  80.     }
  81.     if(TestBits((ULONG)gadget->Gadget.GadgetType,STRGADGET))
  82.     {   sinfo = (struct StringInfo *)gadget->Gadget.SpecialInfo;
  83.         if(sinfo->Buffer)
  84.         {   FreeItem(&Memory,sinfo->Buffer,sinfo->MaxChars);
  85.         }
  86.         if(sinfo->UndoBuffer)
  87.         {   FreeItem(&Memory,sinfo->UndoBuffer,sinfo->MaxChars);
  88.         }
  89.         FreeItem(&Memory,sinfo,(long)sizeof(struct StringInfo));
  90.     }
  91.     FreeItem(&Memory,gadget,(long)sizeof(struct MyGadget));
  92. }
  93.  
  94. /*
  95.  * Free the complete list of gadgets.
  96.  */
  97.  
  98. struct MemoryBlock *b;
  99.  
  100. VOID FreeGList()
  101. {
  102.    struct MyGadget *gadget, *tmp;
  103.    struct IntuiText *t, *t1;
  104.  
  105.    while(gadget = (struct MyGadget *)RemHead((void *)&Gadgets))
  106.    {     un_grel(MainWindow,&gadget->Gadget);
  107.          RemoveGadget(MainWindow,&gadget->Gadget);
  108.          FreeGadget(gadget);
  109.    }
  110.    NewList((void *)&Gadgets);
  111.    GadgetCount = id = 0;
  112.  
  113.    if((t = TextGadget.GadgetText))
  114.    {   while(1)
  115.        {   t1 = t->NextText;
  116.            if(t->IText) FreeItem(&Memory,t->IText,80L);
  117.            FreeItem(&Memory,t,(long)sizeof(struct IntuiText));
  118.            if(NOT t1) break;
  119.            t = t1;
  120.        }
  121.        TextGadget.GadgetText = NULL;
  122.    }
  123.    Saved = TRUE;
  124. }
  125.