home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / gadgeted_438.lzh / GadgetED / Source / mem.c < prev    next >
C/C++ Source or Header  |  1991-01-17  |  4KB  |  123 lines

  1. /*----------------------------------------------------------------------*
  2.   mem.c Version 2.0 -  © Copyright 1990 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;
  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.         FreeItem(&Memory,border->XY,20L);
  42.         FreeItem(&Memory,border,(long)sizeof(struct Border));
  43.     }
  44.     if((TestBits((ULONG)gadget->Flags,GADGHIMAGE)) AND
  45.        (NOT TestBits((ULONG)gadget->Flags,GADGHBOX)))
  46.     {   image = (struct Image *)gadget->SelectRender;
  47.         ps = RASSIZE(image->Width,image->Height);
  48.         FreeMem(image->ImageData,ps * image->Depth);
  49.         FreeItem(&Memory,image,(long)sizeof(struct Image));
  50.     }
  51. }
  52.  
  53. /*
  54.  * Free the memory a gadget takes up.
  55.  */
  56. VOID FreeGadget(gadget)
  57.     struct MyGadget *gadget;
  58. {
  59.     struct IntuiText  *itext,*tmp;
  60.     struct StringInfo *sinfo;
  61.  
  62.     if(TestBits((ULONG)gadget->Gadget.GadgetType,PROPGADGET))
  63.     {   if(gadget->Gadget.SpecialInfo)
  64.             FreeItem(&Memory,gadget->Gadget.SpecialInfo,(long)sizeof(struct PropInfo));
  65.     }
  66.     FreeRender(&gadget->Gadget);
  67.     itext = gadget->Gadget.GadgetText;
  68.     if(itext)
  69.     {   while(1)
  70.         {    tmp = itext->NextText;
  71.              if(itext->IText) FreeItem(&Memory,itext->IText,80L);
  72.              FreeItem(&Memory,itext,(long)sizeof(struct IntuiText));
  73.              if(!tmp) break;
  74.              itext = tmp;
  75.         }
  76.     }
  77.     if(TestBits((ULONG)gadget->Gadget.GadgetType,STRGADGET))
  78.     {   sinfo = (struct StringInfo *)gadget->Gadget.SpecialInfo;
  79.         if(sinfo->Buffer)
  80.         {   FreeItem(&Memory,sinfo->Buffer,sinfo->MaxChars);
  81.         }
  82.         if(sinfo->UndoBuffer)
  83.         {   FreeItem(&Memory,sinfo->UndoBuffer,sinfo->MaxChars);
  84.         }
  85.         FreeItem(&Memory,sinfo,(long)sizeof(struct StringInfo));
  86.     }
  87.     FreeItem(&Memory,gadget,(long)sizeof(struct MyGadget));
  88. }
  89.  
  90. /*
  91.  * Free the complete list of gadgets.
  92.  */
  93.  
  94. struct MemoryBlock *b;
  95.  
  96. VOID FreeGList()
  97. {
  98.    struct MyGadget *gadget, *tmp;
  99.    struct IntuiText *t, *t1;
  100.  
  101.    while(gadget = (struct MyGadget *)RemHead((void *)&Gadgets))
  102.    {     un_grel(MainWindow,&gadget->Gadget);
  103.          erase_gadget(MainWindow,&gadget->Gadget);
  104.          RemoveGadget(MainWindow,&gadget->Gadget);
  105.          FreeGadget(gadget);
  106.    }
  107.    NewList((void *)&Gadgets);
  108.    GadgetCount = id = 0;
  109.  
  110.    if((t = TextGadget.GadgetText))
  111.    {   erase_gadget(MainWindow,&TextGadget);
  112.        while(1)
  113.        {   t1 = t->NextText;
  114.            if(t->IText) FreeItem(&Memory,t->IText,80L);
  115.            FreeItem(&Memory,t,(long)sizeof(struct IntuiText));
  116.            if(NOT t1) break;
  117.            t = t1;
  118.        }
  119.        TextGadget.GadgetText = NULL;
  120.    }
  121.    Saved = TRUE;
  122. }
  123.