Mercurial > ~mikael > mcabber > hg
comparison mcabber/utils.c @ 0:b3b2332715fb
Tailorization of /trunk
Import of the upstream sources from
Repository: file:///tmp/svn-mcabber
Module: /trunk
Revision: 15
author | tailor@frmp8452 |
---|---|
date | Thu, 30 Jun 2005 21:39:31 +0000 |
parents | |
children | 4dcabf02f474 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:b3b2332715fb |
---|---|
1 #include <stdio.h> | |
2 #include <string.h> | |
3 #include <stdlib.h> | |
4 #include <ncurses.h> | |
5 #include <stdarg.h> | |
6 #include <time.h> | |
7 | |
8 /* Variables globales a UTILS.C */ | |
9 int DebugEnabled = 0; | |
10 | |
11 void ut_InitDebug(int level) | |
12 { | |
13 FILE *fp = fopen("/tmp/mcabberlog", "w"); | |
14 | |
15 DebugEnabled = level; | |
16 fprintf(fp, "Debug inicializado...\n" | |
17 "-----------------------------------\n"); | |
18 fclose(fp); | |
19 } | |
20 | |
21 void ut_WriteLog(const char *fmt, ...) | |
22 { | |
23 FILE *fp = NULL; | |
24 time_t ahora; | |
25 va_list ap; | |
26 char *buffer = NULL; | |
27 | |
28 if (DebugEnabled) { | |
29 fp = fopen("/tmp/mcabberlog", "a+"); | |
30 buffer = (char *) calloc(1, 8192); | |
31 | |
32 ahora = time(NULL); | |
33 strftime(buffer, 1024, "[%H:%M:%S] ", localtime(&ahora)); | |
34 fprintf(fp, "%s", buffer); | |
35 | |
36 va_start(ap, fmt); | |
37 vfprintf(fp, fmt, ap); | |
38 va_end(ap); | |
39 | |
40 free(buffer); | |
41 fclose(fp); | |
42 } | |
43 } | |
44 | |
45 char **ut_SplitMessage(char *mensaje, int *nsubmsgs, unsigned int maxlong) | |
46 { | |
47 /* BUGs: recorta la palabra si la longitud maxlong es menor que la palabra | |
48 // maxlong = 4 | |
49 // mensaje = "peaso bug!" | |
50 // submsgs[0] = "peas" | |
51 // submsgs[1] = "bug!" | |
52 // por lo demas, rula de arte. De todos modos, podrias verificarla ??? | |
53 */ | |
54 char *running; | |
55 char *aux; | |
56 char *aux2; | |
57 char **submsgs; | |
58 char *buffer = (char *) malloc(strlen(mensaje) * 2); | |
59 int i = 0; | |
60 | |
61 submsgs = (char **) malloc(50 * sizeof(char *)); /* limitamos, a priori, el maximo de lineas devueltas... */ | |
62 | |
63 running = strdup(mensaje); /* duplicamos mensaje */ | |
64 aux2 = strdup(mensaje); /* hacemos otra copia */ | |
65 while (strlen(aux2) > maxlong) { /* mintras quede texto... */ | |
66 memset(buffer, 0, strlen(mensaje) * 2); /* borramos el buffer */ | |
67 running[maxlong] = '\0'; /* cortamos la cadena a la maxima longitud */ | |
68 aux = rindex(running, ' '); /* posicion del ultimo blanco */ | |
69 if (aux != NULL) /* hay blanco! */ | |
70 strncpy(buffer, running, strlen(running) - strlen(aux)); | |
71 else | |
72 strcpy(buffer, running); /* se supone que esto es pa evitar el bug explicado arriba, pero no rula */ | |
73 | |
74 submsgs[i] = (char *) malloc(strlen(buffer) + 1); /*reservamos memoria */ | |
75 strcpy(submsgs[i], buffer); /*copiamos el buffer de arriba */ | |
76 i++; /*aumentamos numero de mensajillos */ | |
77 aux2 += strlen(buffer) + 1; /*eliminamos texto particionado */ | |
78 sprintf(running, "%s", aux2); /*y lo copiamos de nuevo a la string de "curro" */ | |
79 } | |
80 /* la ultima parte del mensaje, si la hay ;-) */ | |
81 if (strlen(aux2) > 0) { | |
82 submsgs[i] = (char *) malloc(strlen(aux2) + 1); | |
83 strcpy(submsgs[i], aux2); | |
84 i++; | |
85 } | |
86 (*nsubmsgs) = i; | |
87 free(buffer); | |
88 return submsgs; | |
89 } | |
90 | |
91 /* Desc: get the rightmost substring | |
92 * | |
93 * In : string, match | |
94 * Out : ptr to substring (or NULL if not found) | |
95 * | |
96 * Note: this one has no namespace, cos it belongs to <string.h> | |
97 */ | |
98 char *ut_strrstr(const char *s1, const char *s2) | |
99 { | |
100 int l = strlen(s2); | |
101 | |
102 if (l) { | |
103 const char *s = strchr(s1, '\0') - l; | |
104 while (s >= s1) { | |
105 if (*s == *s2) { | |
106 int _l = l - 1; | |
107 const char *_s = s + 1, *_s2 = s2 + 1; | |
108 while (_l) { | |
109 if (*_s++ != *_s2++) { | |
110 break; | |
111 } | |
112 _l--; | |
113 } | |
114 if (!_l) { | |
115 return (char *) s; | |
116 } | |
117 } | |
118 s--; | |
119 } | |
120 } | |
121 | |
122 return NULL; | |
123 } | |
124 | |
125 char *gettag(char *buffer, char *what) | |
126 { | |
127 char *aux; | |
128 char *aux2; | |
129 char *result = (char *) malloc(1024); | |
130 char *tmp = (char *) malloc(1024); | |
131 memset(result, 0, 1024); | |
132 memset(tmp, 0, 1024); | |
133 | |
134 sprintf(tmp, "<%s>", what); | |
135 aux = strstr(buffer, tmp); | |
136 if (aux) { | |
137 aux += strlen(tmp); | |
138 sprintf(tmp, "</%s>", what); | |
139 aux2 = strstr(aux, tmp); | |
140 if (aux2) { | |
141 strncpy(result, aux, strlen(aux) - strlen(aux2)); | |
142 free(tmp); | |
143 return result; | |
144 } | |
145 } | |
146 free(tmp); | |
147 free(result); | |
148 return "UNKtag"; | |
149 } | |
150 | |
151 | |
152 char *getattr(char *buffer, char *what) | |
153 { | |
154 char *aux; | |
155 char *aux2; | |
156 char *result = (char *) malloc(1024); | |
157 memset(result, 0, 1024); | |
158 | |
159 aux = strstr(buffer, what); | |
160 if (aux) { | |
161 aux += strlen(what); | |
162 aux2 = strstr(aux, "'"); | |
163 if (aux2) { | |
164 strncpy(result, aux, strlen(aux) - strlen(aux2)); | |
165 return result; | |
166 } | |
167 } | |
168 free(result); | |
169 return "UNKattr"; | |
170 } | |
171 | |
172 void ut_CenterMessage(char *text, int width, char *output) | |
173 { | |
174 char *blank; | |
175 int ntest, nn; | |
176 | |
177 memset(output, 0, strlen(output)); | |
178 | |
179 ntest = (width - strlen(text)) / 2; | |
180 blank = (char *) malloc(ntest + 1); | |
181 | |
182 for (nn = 0; nn < ntest; nn++) | |
183 blank[nn] = ' '; | |
184 blank[ntest] = '\0'; | |
185 | |
186 strcpy(output, blank); | |
187 strcat(output, text); | |
188 strcat(output, blank); | |
189 | |
190 free(blank); | |
191 } |