STATIC VOID FOGadCleanup(struct LayoutData *ld, struct AslBase_intern *AslBase) { struct FOUserData *udata = (struct FOUserData *)ld->ld_UserData; struct FontRequester *req = (struct FontRequester *)ld->ld_Req; struct IntReq *intreq = ld->ld_IntReq; // struct IntFontReq *iforeq = (struct IntFontReq *)intreq; EnterFunc(bug("FOGadCleanup(ld=%p)\n", ld)); if (ld->ld_Window && ld->ld_GList) { RemoveGList(ld->ld_Window, ld->ld_GList, -1); } killscrollergadget(&udata->NameScrollGad, AslBase); killscrollergadget(&udata->SizeScrollGad, AslBase); FreeObjects(&FOREQ_FIRST_OBJECT(udata), &FOREQ_LAST_OBJECT(udata), AslBase); FOFreeFonts(ld, AslBase); if (udata->PreviewFont) CloseFont(udata->PreviewFont); if (ld->ld_Window) { req->fo_LeftEdge = intreq->ir_LeftEdge = ld->ld_Window->LeftEdge; req->fo_TopEdge = intreq->ir_TopEdge = ld->ld_Window->TopEdge; req->fo_Width = intreq->ir_Width = ld->ld_Window->Width; req->fo_Height = intreq->ir_Height = ld->ld_Window->Height; } ReturnVoid("FOGadCleanup"); }
/* *************************************************************************** ** Standard Excel addin cleanup function. *************************************************************************** */ XLFUNC(short) xlAutoClose(void) { static char funcName[257]; /* Function name */ OPER xFuncName; size_t i; for (i = 0; i < gtoFuncDefCount; i++) { /* Define the function name as a pascal string. */ funcName[0] = strlen(FNPREFIX) + strlen(gtoFuncDefList[i]->name) + 1; strcpy (funcName+1, FNPREFIX); strcat (funcName, "_"); strcat (funcName, gtoFuncDefList[i]->name); /* Create a string oper from the function name pascal string */ xFuncName.type = xltypeStr; xFuncName.val.str = funcName; /* Call Excel using xlfSetName to "unregister" the function */ Excel(xlfSetName, 0, 1, &xFuncName); } FreeObjects(); return 1; }
/************* * DESCRIPTION: destructor * INPUT: - * OUTPUT: - *************/ CTheApp::~CTheApp() { FreeUndo(); FreeObjects(); FreePrefs(); rsiExit(); }
BOOL CObjects::ClearMemory(void) { SIndexesIterator sIter; OIndex oi; CBaseObject* pcBaseObject; CArrayBlockObjectPtr apcBaseObjects; int iCount; apcBaseObjects.Init(CLEAR_MEMORY_CHUNK_SIZE); oi = StartMemoryIteration(&sIter); iCount = 0; while (oi != INVALID_O_INDEX) { pcBaseObject = GetFromMemory(oi); apcBaseObjects.Add(&pcBaseObject); iCount++; if (iCount == CLEAR_MEMORY_CHUNK_SIZE) { KillDontFreeObjects(&apcBaseObjects); FreeObjects(&apcBaseObjects); iCount = 0; apcBaseObjects.ReInit(); } oi = IterateMemory(&sIter); } KillDontFreeObjects(&apcBaseObjects); FreeObjects(&apcBaseObjects); apcBaseObjects.Kill(); mcMemory.ReInit(); return TRUE; }
BOOL CObjects::Remove(CArrayBlockObjectPtr* papcKilled) { int i; int iNumElements; CBaseObject* pcKilled; CBaseObject* pcContainer; //No embedded objects should be in the list papcKilled. iNumElements = papcKilled->NumElements(); if (iNumElements == 0) { return TRUE; } for (i = 0; i < iNumElements; i++) { pcKilled = *papcKilled->Get(i); if (pcKilled->IsEmbedded()) { pcContainer = pcKilled->GetEmbeddingContainer(); gcLogger.Error2(__METHOD__, " Object of class [", pcKilled->ClassName(), "] is marked for killing but is embedded in object with index [", IndexToString(pcContainer->GetOI()),"] of class [", pcContainer->ClassName(), "].", NULL); return FALSE; } else if (!pcKilled->IsAllocatedInObjects()) { gcLogger.Error2(__METHOD__, " Object of class [", pcKilled->ClassName(), "] is marked for killing but is not allocated in Objects [0x", PointerToString(this),"].", NULL); return FALSE; } } for (i = 0; i < iNumElements; i++) { pcKilled = *papcKilled->Get(i); pcKilled->RemoveAllPointerTosDontKill(); } KillDontFreeObjects(papcKilled); FreeObjects(papcKilled); return TRUE; }
/************* * DESCRIPTION: destructor * INPUT: - * OUTPUT: - *************/ CMainFrame::~CMainFrame() { DeleteColorObjects(); FreeObjects(); FreePrefs(); }