]> jfr.im git - irc/quakenet/newserv.git/blob - helpmod2/htopic.c
Initial Import
[irc/quakenet/newserv.git] / helpmod2 / htopic.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include "../lib/sstring.h"
6
7 #include "htopic.h"
8
9 htopic *htopic_add(htopic** htop, const char* entry, int pos)
10 {
11 htopic *tmp;
12
13 for (;*htop && pos;htop = &(*htop)->next, pos--);
14
15 tmp = *htop;
16
17 *htop = malloc(sizeof(htopic));
18 (*htop)->entry = getsstring(entry, strlen(entry));
19 (*htop)->next = tmp;
20
21 return *htop;
22 }
23
24 htopic *htopic_del(htopic** htop, htopic* target)
25 {
26 htopic *tmp;
27 for (;*htop;htop = &(*htop)->next)
28 if (*htop == target)
29 break;
30 if (!*htop)
31 return target;
32 tmp = (*htop)->next;
33 freesstring((*htop)->entry);
34 free(*htop);
35 *htop = tmp;
36
37
38 return NULL;
39 }
40
41 void htopic_del_all(htopic** htop)
42 {
43 while (*htop)
44 htopic_del(htop, *htop);
45 }
46
47 htopic *htopic_get(htopic *htop, int pos)
48 {
49 for (;htop && pos;htop = htop->next,pos--);
50 return htop;
51 }
52
53 const char *htopic_construct(htopic *htop)
54 {
55 static char buffer[512] = "";
56
57 *buffer = '\0';
58
59 for (;htop;htop = htop->next)
60 {
61 strcat(buffer, htop->entry->content);
62 if (htop->next)
63 strcat(buffer, " | ");
64 }
65 return buffer;
66 }
67
68 int htopic_count(htopic *htop)
69 {
70 int count = 0;
71 for (;htop;htop = htop->next)
72 count++;
73 return count;
74 }
75
76 int htopic_len(htopic *htop)
77 {
78 int len = 0;
79
80 if (htopic_count(htop))
81 len+=(htopic_count(htop) - 1) * 3;
82 for (;htop;htop = htop->next)
83 len+=strlen(htop->entry->content);
84
85 return len;
86 }
87