static CONNINST *FindClient(IMO2SPROXY_INST *hProxy, HWND hWnd) { int i, nCount; CONNINST *pConn; for (i=0, nCount=List_Count(hProxy->hClients); i<nCount; i++) { if ((pConn=(CONNINST*)List_ElementAt (hProxy->hClients, i))->hWnd == hWnd) return pConn; } return NULL; }
AVATARENTRY *AvatarList_Find(TYP_LIST *hList, char *pszUser) { int i, nCount; AVATARENTRY *pEntry; for (i=0, nCount=List_Count(hList); i<nCount; i++) { pEntry = List_ElementAt (hList, i); if (strcmp(pEntry->pszUser, pszUser) == 0) return pEntry; } return NULL; }
static void CleanConnections (TYP_LIST *hList) { unsigned int i; CONNINST *hInst; for (i=0; i<List_Count(hList); i++) { hInst = List_ElementAt (hList, i); if (hInst->hThread == 0) { free (List_RemoveElementAt(hList, i)); i--; } } }
TYP_MSGLENTRY *MsgList_FindMessage(DWORD uMsgNum) { TYP_MSGLENTRY *pEntry; int iPos; LOG (("MsgList_FindEvent (%d)", uMsgNum)); if (m_hMsgList && List_BinarySearch(m_hMsgList, CmpProc, (void*)uMsgNum, &iPos)) { pEntry = List_ElementAt (m_hMsgList, iPos); time(&pEntry->t); // Touch it, so that it doesn't get thrown away too soon LOG (("MsgList_FindEvent(%d): %08X", uMsgNum, pEntry->hEvent)); return pEntry; } return NULL; }
static void CleanConnections (TYP_LIST *hList) { unsigned int i; CONNINST *pInst; for (i=0; i<List_Count(hList); i++) { pInst = List_ElementAt (hList, i); if (!IsWindow (pInst->hWnd)) { if (pInst->hInst) FreeConnection(pInst); free (List_RemoveElementAt(hList, i)); i--; } } }
BOOL AvatarList_Remove(TYP_LIST *hList, AVATARENTRY *pEntry) { AVATARENTRY *pListEntry; int i, nCount; for (i=0, nCount=List_Count(hList); i<nCount; i++) { pListEntry = List_ElementAt (hList, i); if (pListEntry == pEntry) break; } if (i<nCount) { AvatarList_FreeEntry (pEntry); List_RemoveElementAt(hList, i); free (pEntry); return TRUE; } return FALSE; }
TYP_MSGLENTRY *MsgList_Add(DWORD uMsgNum, HANDLE hEvent) { TYP_MSGLENTRY *pEntry; int iListInd; BOOL bFound; LOG (("MsgList_Add (%d, %08X)", uMsgNum, hEvent)); if (!m_hMsgList || !hEvent) return FALSE; bFound = List_BinarySearch(m_hMsgList,CmpProc,(void *)uMsgNum,&iListInd); if (!bFound) pEntry = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(TYP_MSGLENTRY)); else pEntry = List_ElementAt (m_hMsgList, iListInd); if (!pEntry) return NULL; pEntry->uMsgNum = uMsgNum; pEntry->hEvent = hEvent; pEntry->tEdited = 0; time(&pEntry->t); if (!bFound) return List_InsertElementAt (m_hMsgList, pEntry, iListInd)?pEntry:NULL; return pEntry; }
void MsgList_CollectGarbage(void) { unsigned int i; TYP_MSGLENTRY *pEntry; time_t t; if (!m_hMsgList) return; time(&t); t-=MSGLIST_TIMEOUT; for (i=0; i<List_Count(m_hMsgList); i++) { pEntry = List_ElementAt (m_hMsgList, i); if (pEntry->t < t) { LOG (("MsgList_CollectGarbage throwing out msg %d", pEntry->uMsgNum)); HeapFree (GetProcessHeap(), 0, List_RemoveElementAt (m_hMsgList, i)); i--; } } }
void *List_Top(TYP_LIST *pstHandle) { if (pstHandle->uiCount) return List_ElementAt (pstHandle, pstHandle->uiCount-1); else return NULL; }