/eucalyptus-c/src/addressbook_match.c
# · C · 252 lines · 199 code · 38 blank · 15 comment · 38 complexity · d60e585e0522465d498c50f1d14b6719 MD5 · raw file
- /*
- * Eucalyptus
- * by Paul A. Schifferer
- *
- * $Id: addressbook_match.c,v 1.2 2000/02/06 17:03:39 cipher Exp $
- * Module: addressbook_match.c
- * Matching functions for the address book
- *
- * Copyright 1997-2000 Isengard Developments
- * All rights reserved.
- */
- #include <stdio.h>
- #include <string.h>
- #include "eucalyptus.h"
- #if 0
- AddressEntry *MatchAddress(LONG num)
- {
- AddressEntry *ae, *aematch = NULL;
- LONG i;
- if(num == ~0)
- return(NULL);
- ObtainSemaphore(&euc.Locks.Addresses);
- for(ae = (AddressEntry *)euc.Addresses.lh_Head, i = -1;
- ae->Node.ln_Succ;
- ae = (AddressEntry *)ae->Node.ln_Succ)
- {
- i++;
- if(num == i)
- {
- aematch = ae;
- break;
- }
- if(ae->Members)
- {
- AddressEntry *aem;
- for(aem = (AddressEntry *)ae->Members->lh_Head;
- aem->Node.ln_Succ;
- aem = (AddressEntry *)aem->Node.ln_Succ)
- {
- i++;
- if(num == i)
- {
- aematch = aem;
- break;
- }
- }
- }
- }
- ReleaseSemaphore(&euc.Locks.Addresses);
- return(aematch);
- }
- LONG MatchAddressNum(AddressEntry *aematch)
- {
- AddressEntry *ae;
- LONG i, m = ~0;
- if(!aematch)
- return(~0);
- ObtainSemaphore(&euc.Locks.Addresses);
- for(ae = (AddressEntry *)euc.Addresses.lh_Head, i = -1;
- ae->Node.ln_Succ;
- ae = (AddressEntry *)ae->Node.ln_Succ)
- {
- i++;
- if(ae == aematch)
- {
- m = i;
- break;
- }
- if(ae->Members &&
- !IsListEmpty(ae->Members))
- {
- AddressEntry *aem;
- for(aem = (AddressEntry *)ae->Members->lh_Head;
- aem->Node.ln_Succ;
- aem = (AddressEntry *)aem->Node.ln_Succ)
- {
- i++;
- if(aem == aematch)
- {
- m = i;
- break;
- }
- }
- }
- }
- ReleaseSemaphore(&euc.Locks.Addresses);
- return(m);
- }
- AddressEntry *MatchAddressName(UBYTE *name, BOOL partial)
- {
- AddressEntry *ae, *aematch = NULL;
- LONG count = 0, l;
- UBYTE cname[101];
- if(!name)
- return(NULL);
- ObtainSemaphore(&euc.Locks.Addresses);
- for(ae = (AddressEntry *)euc.Addresses.lh_Head;
- ae->Node.ln_Succ;
- ae = (AddressEntry *)ae->Node.ln_Succ)
- {
- strncpy(cname, ae->FirstName, sizeof(cname) - 1);
- strncat(cname, " ", sizeof(cname) - 1);
- strncat(cname, ae->LastName, sizeof(cname) - 1);
- if(partial)
- {
- l = strlen(name);
- if(!strnicmp(cname, name, l) ||
- !strnicmp(ae->Nickname, name, l))
- {
- count++;
- aematch = ae;
- break;
- // continue;
- }
- }
- else
- {
- if(!stricmp(cname, name) ||
- !stricmp(ae->Nickname, name))
- {
- count++;
- aematch = ae;
- break;
- // continue;
- }
- }
- if(ae->Members)
- {
- AddressEntry *aem;
- for(aem = (AddressEntry *)ae->Members->lh_Head;
- aem->Node.ln_Succ;
- aem = (AddressEntry *)aem->Node.ln_Succ)
- {
- strncpy(cname, aem->FirstName, sizeof(cname) - 1);
- strncat(cname, " ", sizeof(cname) - 1);
- strncat(cname, aem->LastName, sizeof(cname) - 1);
- if(partial)
- {
- l = strlen(name);
- if(!strnicmp(cname, name, l) ||
- !strnicmp(ae->Nickname, name, l))
- {
- count++;
- aematch = aem;
- break;
- // continue;
- }
- }
- else
- {
- if(!stricmp(cname, name) ||
- !stricmp(ae->Nickname, name))
- {
- count++;
- aematch = aem;
- break;
- // continue;
- }
- }
- }
- }
- }
- ReleaseSemaphore(&euc.Locks.Addresses);
- if(count > 1)
- { // ambiguous match
- }
- return(aematch);
- }
- AddressEntry *MatchAddressGroup(UBYTE *name)
- {
- AddressEntry *ae, *aem = NULL;
- ObtainSemaphore(&euc.Locks.Addresses);
- for(ae = (AddressEntry *)euc.Addresses.lh_Head;
- ae->Node.ln_Succ;
- ae = (AddressEntry *)ae->Node.ln_Succ)
- {
- if(!ae->Members)
- continue;
- if(!stricmp(name, ae->FirstName))
- {
- aem = ae;
- break;
- }
- }
- ReleaseSemaphore(&euc.Locks.Addresses);
- return(aem);
- }
- AddressEntry *GetGroupHeader(AddressEntry *aematch)
- {
- AddressEntry *ae;
- if(!aematch)
- return(NULL);
- if(aematch->Members)
- return(aematch);
- for(ae = (AddressEntry *)euc.Addresses.lh_Head;
- ae->Node.ln_Succ;
- ae = (AddressEntry *)ae->Node.ln_Succ)
- {
- if(ae->Members &&
- !IsListEmpty(ae->Members))
- {
- AddressEntry *aem;
- for(aem = (AddressEntry *)ae->Members->lh_Head;
- aem->Node.ln_Succ;
- aem = (AddressEntry *)aem->Node.ln_Succ)
- {
- if(aem == aematch)
- return(ae);
- }
- }
- }
- return(NULL);
- }
- #endif