1152
|
1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
2 /*
|
|
3 $Id: contacts.c 1162 2000-11-28 02:22:42Z warmenhoven $
|
|
4 $Log$
|
|
5 Revision 1.1 2000/11/28 02:22:42 warmenhoven
|
|
6 icq. whoop de doo
|
|
7
|
|
8 Revision 1.4 2000/06/17 16:38:45 denis
|
|
9 New parameter was added in icq_ContactSetVis() for setting/resetting
|
|
10 'Visible to User' status.
|
|
11 Port's type was changed to unsigned short in icq_UserOnline callback.
|
|
12
|
|
13 Revision 1.3 2000/01/16 03:59:10 bills
|
|
14 reworked list code so list_nodes don't need to be inside item structures,
|
|
15 removed strlist code and replaced with generic list calls
|
|
16
|
|
17 Revision 1.2 1999/07/23 12:28:00 denis
|
|
18 Cleaned up.
|
|
19
|
|
20 Revision 1.1 1999/07/18 20:11:48 bills
|
|
21 added
|
|
22
|
|
23 */
|
|
24
|
|
25 #include <stdlib.h>
|
|
26 #include <stdarg.h>
|
|
27
|
|
28 #include "icqtypes.h"
|
|
29 #include "util.h"
|
|
30 #include "icq.h"
|
|
31 #include "list.h"
|
|
32 #include "contacts.h"
|
|
33
|
|
34 icq_ContactItem *icq_ContactNew(ICQLINK *link)
|
|
35 {
|
|
36 icq_ContactItem *pcontact=
|
|
37 (icq_ContactItem *)malloc(sizeof(icq_ContactItem));
|
|
38
|
|
39 if(pcontact)
|
|
40 pcontact->icqlink=link;
|
|
41
|
|
42 return pcontact;
|
|
43 }
|
|
44
|
|
45 void icq_ContactDelete(void *p)
|
|
46 {
|
|
47 free(p);
|
|
48 }
|
|
49
|
|
50 void icq_ContactAdd(ICQLINK *link, DWORD cuin)
|
|
51 {
|
|
52 icq_ContactItem *p = icq_ContactNew(link);
|
|
53 p->uin = cuin;
|
|
54 p->vis_list = FALSE;
|
|
55
|
|
56 list_enqueue(link->icq_ContactList, p);
|
|
57 }
|
|
58
|
|
59 void icq_ContactRemove(ICQLINK *link, DWORD cuin)
|
|
60 {
|
|
61 icq_ContactItem *pcontact=icq_ContactFind(link, cuin);
|
|
62
|
|
63 if (pcontact)
|
|
64 {
|
|
65 list_remove(link->icq_ContactList, pcontact);
|
|
66 icq_ContactDelete(pcontact);
|
|
67 }
|
|
68 }
|
|
69
|
|
70 void icq_ContactClear(ICQLINK *link)
|
|
71 {
|
|
72 list_delete(link->icq_ContactList, icq_ContactDelete);
|
|
73 link->icq_ContactList=list_new();
|
|
74 }
|
|
75
|
|
76 int _icq_ContactFind(void *p, va_list data)
|
|
77 {
|
|
78 DWORD uin=va_arg(data, DWORD);
|
|
79
|
|
80 return (((icq_ContactItem *)p)->uin == uin);
|
|
81 }
|
|
82
|
|
83 icq_ContactItem *icq_ContactFind(ICQLINK *link, DWORD cuin)
|
|
84 {
|
|
85 return list_traverse(link->icq_ContactList, _icq_ContactFind, cuin);
|
|
86 }
|
|
87
|
|
88 void icq_ContactSetVis(ICQLINK *link, DWORD cuin, BYTE vu)
|
|
89 {
|
|
90 icq_ContactItem *p = icq_ContactFind(link, cuin);
|
|
91 if(p)
|
|
92 p->vis_list = vu;
|
|
93 }
|
|
94
|
|
95 icq_ContactItem *icq_ContactGetFirst(ICQLINK *link)
|
|
96 {
|
|
97 return list_first(link->icq_ContactList);
|
|
98 }
|
|
99
|
|
100 icq_ContactItem *icq_ContactGetNext(icq_ContactItem *pcontact)
|
|
101 {
|
|
102 list_node *p=list_find(pcontact->icqlink->icq_ContactList, pcontact);
|
|
103
|
|
104 if (p && p->next)
|
|
105 return p->next->item;
|
|
106 else
|
|
107 return 0L;
|
|
108
|
|
109 }
|