BOOL SM_GiveStatus(char *pszID, char * pszModule, char * pszUID,  char * pszStatus)
{
	SESSION_INFO *pTemp = m_WndList, *pLast = NULL;

	if(!pszID || !pszModule )
		return FALSE;

	while (pTemp != NULL)
	{
		if (!lstrcmpiA(pTemp->pszID,pszID) && !lstrcmpiA(pTemp->pszModule,pszModule))
		{
			USERINFO * ui = UM_GiveStatus(pTemp->pUsers, pszUID, TM_StringToWord(pTemp->pStatuses, pszStatus));
			if (ui) {
				SM_MoveUser(pTemp->pszID, pTemp->pszModule, ui->pszUID);
				if(pTemp->hWnd)
					SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, (WPARAM)0, (LPARAM)0);
			}
			return TRUE;
		}
		pLast = pTemp;
		pTemp = pTemp->next;
	}

	return FALSE;
}
static void AddUser(GCEVENT * gce)
{
	SESSION_INFO* si = SM_FindSession( gce->pDest->ptszID, gce->pDest->pszModule);
	if ( si ) {
		WORD status = TM_StringToWord( si->pStatuses, gce->ptszStatus );
		USERINFO * ui = SM_AddUser( si, gce->ptszUID, gce->ptszNick, status);
		if (ui) {
			ui->pszNick = mir_tstrdup( gce->ptszNick );

			if (gce->bIsMe)
				si->pMe = ui;

			ui->Status = status;
			ui->Status |= si->pStatuses->Status;

			if (si->hWnd) {
				SendMessage(si->hWnd, GC_UPDATENICKLIST, (WPARAM)0, (LPARAM)0);
			}
		}
	}
}