diff options
-rwxr-xr-x | Makefile | 4 | ||||
-rwxr-xr-x | vchat-client.c | 54 | ||||
-rwxr-xr-x | vchat-commands.c | 106 | ||||
-rwxr-xr-x | vchat-config.h | 6 | ||||
-rwxr-xr-x | vchat-protocol.c | 140 | ||||
-rwxr-xr-x | vchat-ui.c | 284 | ||||
-rwxr-xr-x | vchat-user.c | 82 | ||||
-rwxr-xr-x | vchat.h | 124 |
8 files changed, 374 insertions, 426 deletions
@@ -14,6 +14,8 @@ CFLAGS = -Wall -Os | |||
14 | 14 | ||
15 | CFLAGS += $(OLDREADLINE) | 15 | CFLAGS += $(OLDREADLINE) |
16 | 16 | ||
17 | CFLAGS += -I../readline-5.0 -I../ncurses-5.4/include/ | ||
18 | |||
17 | ## you might need one or more of these: | 19 | ## you might need one or more of these: |
18 | #CFLAGS += -I/usr/local/ssl/include -L/usr/local/ssl/lib | 20 | #CFLAGS += -I/usr/local/ssl/include -L/usr/local/ssl/lib |
19 | #CFLAGS += -I/usr/local/include -L/usr/local/lib | 21 | #CFLAGS += -I/usr/local/include -L/usr/local/lib |
@@ -29,7 +31,7 @@ CFLAGS += $(OLDREADLINE) | |||
29 | ## the install prefix best is /usr/local | 31 | ## the install prefix best is /usr/local |
30 | PREFIX=/usr/local | 32 | PREFIX=/usr/local |
31 | 33 | ||
32 | LIBS = -lreadline -lncurses -lssl -lcrypto | 34 | LIBS = ../readline-5.0/libreadline.a ../ncurses-5.4/lib/libncurses.a -lssl -lcrypto |
33 | OBJS = vchat-client.o vchat-ui.o vchat-protocol.o vchat-user.o vchat-commands.o | 35 | OBJS = vchat-client.o vchat-ui.o vchat-protocol.o vchat-user.o vchat-commands.o |
34 | 36 | ||
35 | 37 | ||
diff --git a/vchat-client.c b/vchat-client.c index d7d1998..2d50932 100755 --- a/vchat-client.c +++ b/vchat-client.c | |||
@@ -32,7 +32,7 @@ | |||
32 | #include "vchat.h" | 32 | #include "vchat.h" |
33 | 33 | ||
34 | /* version of this module */ | 34 | /* version of this module */ |
35 | unsigned char *vchat_cl_version = "$Id$"; | 35 | char *vchat_cl_version = "$Id$"; |
36 | 36 | ||
37 | /* externally used variables */ | 37 | /* externally used variables */ |
38 | /* we're logged in */ | 38 | /* we're logged in */ |
@@ -40,7 +40,7 @@ unsigned int loggedin = 0; | |||
40 | /* we run as long as this is true */ | 40 | /* we run as long as this is true */ |
41 | unsigned int status = 1; | 41 | unsigned int status = 1; |
42 | /* error string to show after exit */ | 42 | /* error string to show after exit */ |
43 | unsigned char errstr[ERRSTRSIZE] = "\0"; | 43 | char errstr[ERRSTRSIZE] = "\0"; |
44 | 44 | ||
45 | /* locally global variables */ | 45 | /* locally global variables */ |
46 | /* our list of filedescriptors */ | 46 | /* our list of filedescriptors */ |
@@ -52,12 +52,12 @@ static fd_set masterfds; | |||
52 | /* servers filedescriptor from vchat-protocol.c */ | 52 | /* servers filedescriptor from vchat-protocol.c */ |
53 | extern int serverfd; | 53 | extern int serverfd; |
54 | 54 | ||
55 | void setnoption (unsigned char *, unsigned char *); | 55 | void setnoption (char *, char *); |
56 | 56 | ||
57 | static void parsecfg(unsigned char *line) { | 57 | static void parsecfg(char *line) { |
58 | int bytes; | 58 | int bytes; |
59 | unsigned char *param=line; | 59 | char *param=line; |
60 | unsigned char *value=NULL; | 60 | char *value=NULL; |
61 | 61 | ||
62 | /* handle quotes value is empty, so wecan use it */ | 62 | /* handle quotes value is empty, so wecan use it */ |
63 | value = strchr(line,'#'); | 63 | value = strchr(line,'#'); |
@@ -101,9 +101,9 @@ static void parsecfg(unsigned char *line) { | |||
101 | setnoption(param,value); | 101 | setnoption(param,value); |
102 | } | 102 | } |
103 | 103 | ||
104 | static void parseformats(unsigned char *line) { | 104 | static void parseformats(char *line) { |
105 | int i; | 105 | int i; |
106 | unsigned char *tmp = NULL; | 106 | char *tmp = NULL; |
107 | 107 | ||
108 | /* read a format line from file, syntax is | 108 | /* read a format line from file, syntax is |
109 | FS_XXX = "formatstring" | 109 | FS_XXX = "formatstring" |
@@ -117,7 +117,7 @@ static void parseformats(unsigned char *line) { | |||
117 | for (i = 0; formatstrings[i].formatstr; i++) | 117 | for (i = 0; formatstrings[i].formatstr; i++) |
118 | if (!strncasecmp(formatstrings[i].idstring, line, strlen( formatstrings[i].idstring) )) | 118 | if (!strncasecmp(formatstrings[i].idstring, line, strlen( formatstrings[i].idstring) )) |
119 | { | 119 | { |
120 | unsigned char *tail = line + strlen( formatstrings[i].idstring); | 120 | char *tail = line + strlen( formatstrings[i].idstring); |
121 | while( *tail==' ' || *tail=='\t') tail++; /* and skip whitespaces */ | 121 | while( *tail==' ' || *tail=='\t') tail++; /* and skip whitespaces */ |
122 | 122 | ||
123 | if( *tail++ == '=' ) | 123 | if( *tail++ == '=' ) |
@@ -145,7 +145,7 @@ static void parseformats(unsigned char *line) { | |||
145 | } | 145 | } |
146 | } | 146 | } |
147 | 147 | ||
148 | if ( stringends && ( (tmp = (unsigned char *)malloc( 1 + j )) != NULL ) ) | 148 | if ( stringends && ( (tmp = (char *)malloc( 1 + j )) != NULL ) ) |
149 | { | 149 | { |
150 | memcpy( tmp, tmpstr, k); | 150 | memcpy( tmp, tmpstr, k); |
151 | tmp[k-1]=0; | 151 | tmp[k-1]=0; |
@@ -158,21 +158,21 @@ static void parseformats(unsigned char *line) { | |||
158 | } | 158 | } |
159 | 159 | ||
160 | /* UNUSED uncomment if needed | 160 | /* UNUSED uncomment if needed |
161 | static void parseknownhosts(unsigned char *line) { | 161 | static void parseknownhosts(char *line) { |
162 | } | 162 | } |
163 | */ | 163 | */ |
164 | 164 | ||
165 | /* load config file */ | 165 | /* load config file */ |
166 | static void | 166 | static void |
167 | loadcfg (unsigned char *file,void (*lineparser) (unsigned char *)) | 167 | loadcfg (char *file,void (*lineparser) (char *)) |
168 | { | 168 | { |
169 | int fd; | 169 | int fd; |
170 | int bytes,bufoff=0; | 170 | int bytes,bufoff=0; |
171 | unsigned char *tmp = NULL; | 171 | char *tmp = NULL; |
172 | #define BUFSIZE 4096 | 172 | #define BUFSIZE 4096 |
173 | unsigned char buf[BUFSIZE]; /* data buffer */ | 173 | char buf[BUFSIZE]; /* data buffer */ |
174 | unsigned char *ltmp = buf; | 174 | char *ltmp = buf; |
175 | unsigned char *tildex = NULL; | 175 | char *tildex = NULL; |
176 | buf[BUFSIZE-1] = '\0'; /* sanity stop */ | 176 | buf[BUFSIZE-1] = '\0'; /* sanity stop */ |
177 | 177 | ||
178 | if (!file) return; | 178 | if (!file) return; |
@@ -226,19 +226,19 @@ loadcfg (unsigned char *file,void (*lineparser) (unsigned char *)) | |||
226 | } | 226 | } |
227 | 227 | ||
228 | void | 228 | void |
229 | loadconfig (unsigned char *file) | 229 | loadconfig (char *file) |
230 | { | 230 | { |
231 | loadcfg(file,parsecfg); | 231 | loadcfg(file,parsecfg); |
232 | } | 232 | } |
233 | 233 | ||
234 | void | 234 | void |
235 | loadformats (unsigned char *file) | 235 | loadformats (char *file) |
236 | { | 236 | { |
237 | loadcfg(file,parseformats); | 237 | loadcfg(file,parseformats); |
238 | } | 238 | } |
239 | 239 | ||
240 | /* get-format-string */ | 240 | /* get-format-string */ |
241 | unsigned char * | 241 | char * |
242 | getformatstr (formtstr id) | 242 | getformatstr (formtstr id) |
243 | { | 243 | { |
244 | int i; | 244 | int i; |
@@ -248,7 +248,7 @@ getformatstr (formtstr id) | |||
248 | } | 248 | } |
249 | 249 | ||
250 | /* get-string-option, fetches *char-value of variable named by option */ | 250 | /* get-string-option, fetches *char-value of variable named by option */ |
251 | unsigned char * | 251 | char * |
252 | getstroption (confopt option) | 252 | getstroption (confopt option) |
253 | { | 253 | { |
254 | int i; | 254 | int i; |
@@ -267,7 +267,7 @@ getstroption (confopt option) | |||
267 | 267 | ||
268 | /* set-string-option, puts *char-value to variable named by option */ | 268 | /* set-string-option, puts *char-value to variable named by option */ |
269 | void | 269 | void |
270 | setstroption (confopt option, unsigned char *string) | 270 | setstroption (confopt option, char *string) |
271 | { | 271 | { |
272 | int i; | 272 | int i; |
273 | #ifdef DEBUG | 273 | #ifdef DEBUG |
@@ -288,7 +288,7 @@ setstroption (confopt option, unsigned char *string) | |||
288 | 288 | ||
289 | /* set-named-option, puts string to variable named by name */ | 289 | /* set-named-option, puts string to variable named by name */ |
290 | void | 290 | void |
291 | setnoption (unsigned char *name, unsigned char *string) | 291 | setnoption (char *name, char *string) |
292 | { | 292 | { |
293 | int i; | 293 | int i; |
294 | #ifdef DEBUG | 294 | #ifdef DEBUG |
@@ -450,8 +450,8 @@ eventloop (void) | |||
450 | } | 450 | } |
451 | } | 451 | } |
452 | 452 | ||
453 | void usage(unsigned char *name) { | 453 | void usage( char *name) { |
454 | printf ("usage: %s [-C config-file] [-F formats] [-l] [-z] [-s host] [-p port] [-c channel] [-n nickname] [-k] [-K] [-L logfile]\n",name); | 454 | printf ("usage: %s [-C config-file] [-F formats] [-l] [-z] [-s host] [-p port] [-c channel] [-n nickname]\n",name); |
455 | puts (" -C load a second config-file, overriding the first one"); | 455 | puts (" -C load a second config-file, overriding the first one"); |
456 | puts (" -F load format strings (skins) from this file"); | 456 | puts (" -F load format strings (skins) from this file"); |
457 | puts (" -l local connect (no SSL + connects localhost:2323)"); | 457 | puts (" -l local connect (no SSL + connects localhost:2323)"); |
@@ -464,9 +464,6 @@ void usage(unsigned char *name) { | |||
464 | else | 464 | else |
465 | puts (" -n set nickname"); | 465 | puts (" -n set nickname"); |
466 | printf (" -f set from (default \"%s\")\n",getstroption(CF_FROM)); | 466 | printf (" -f set from (default \"%s\")\n",getstroption(CF_FROM)); |
467 | puts (" -k keep autolog"); | ||
468 | puts (" -K don't keep autolog"); | ||
469 | printf (" -L use this file as logfile (default \"%s\")\n",getstroption(CF_LOGFILE)); | ||
470 | puts (" -h gives this help"); | 467 | puts (" -h gives this help"); |
471 | } | 468 | } |
472 | 469 | ||
@@ -502,9 +499,6 @@ main (int argc, char **argv) | |||
502 | case 'c': setintoption(CF_CHANNEL,strtol(optarg,NULL,10)); break; | 499 | case 'c': setintoption(CF_CHANNEL,strtol(optarg,NULL,10)); break; |
503 | case 'n': setstroption(CF_NICK,optarg); break; | 500 | case 'n': setstroption(CF_NICK,optarg); break; |
504 | case 'f': setstroption(CF_FROM,optarg); break; | 501 | case 'f': setstroption(CF_FROM,optarg); break; |
505 | case 'k': setintoption(CF_KEEPLOG,1); break; | ||
506 | case 'K': setintoption(CF_KEEPLOG,0); break; | ||
507 | case 'L': setstroption(CF_LOGFILE,optarg); break; | ||
508 | case 'h': usage(argv[0]); exit(0); break; | 502 | case 'h': usage(argv[0]); exit(0); break; |
509 | default : usage(argv[0]); exit(1); | 503 | default : usage(argv[0]); exit(1); |
510 | } | 504 | } |
diff --git a/vchat-commands.c b/vchat-commands.c index 5f54733..5dc7b4f 100755 --- a/vchat-commands.c +++ b/vchat-commands.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include "vchat-help.h" | 25 | #include "vchat-help.h" |
26 | 26 | ||
27 | /* version of this module */ | 27 | /* version of this module */ |
28 | unsigned char *vchat_cm_version = "$Id$"; | 28 | char *vchat_cm_version = "$Id$"; |
29 | 29 | ||
30 | /* our "/command " table */ | 30 | /* our "/command " table */ |
31 | enum { | 31 | enum { |
@@ -38,29 +38,30 @@ COMMAND_HELP, | |||
38 | COMMAND_KEYS, | 38 | COMMAND_KEYS, |
39 | COMMAND_QUIT, | 39 | COMMAND_QUIT, |
40 | COMMAND_USER, | 40 | COMMAND_USER, |
41 | COMMAND_LOG, | ||
42 | COMMAND_FLT, | 41 | COMMAND_FLT, |
43 | COMMAND_PM, | 42 | COMMAND_PM, |
44 | COMMAND_ACTION, | 43 | COMMAND_ACTION, |
45 | COMMAND_PMSHORT, | 44 | COMMAND_PMSHORT, |
45 | COMMAND_QUERY, | ||
46 | COMMAND_QUITSHORT, | ||
46 | COMMAND_PLAIN, | 47 | COMMAND_PLAIN, |
47 | COMMAND_NONE | 48 | COMMAND_NONE |
48 | }; | 49 | }; |
49 | 50 | ||
50 | static void command_quit ( unsigned char *tail); | 51 | static void command_quit ( char *tail); |
51 | static void command_user ( unsigned char *tail); | 52 | static void command_user ( char *tail); |
52 | static void command_pm ( unsigned char *tail); | 53 | static void command_pm ( char *tail); |
53 | static void command_action ( unsigned char *tail); | 54 | static void command_action ( char *tail); |
54 | static void command_help ( unsigned char *tail); | 55 | static void command_help ( char *tail); |
55 | static void command_flt ( unsigned char *tail); | 56 | static void command_flt ( char *tail); |
56 | static void command_lsflt ( unsigned char *tail); | 57 | static void command_lsflt ( char *tail); |
57 | static void command_clflt ( unsigned char *tail); | 58 | static void command_clflt ( char *tail); |
58 | static void command_rmflt ( unsigned char *tail); | 59 | static void command_rmflt ( char *tail); |
59 | void command_version ( unsigned char *tail); | 60 | void command_version ( char *tail); |
60 | static void command_none ( unsigned char *line); | 61 | static void command_none ( char *line); |
61 | static void command_log ( unsigned char *tail); | 62 | static void command_query ( char *tail); |
62 | 63 | ||
63 | static void output_default ( unsigned char *tail); | 64 | static void output_default ( char *tail); |
64 | 65 | ||
65 | /* commandentry defined in vchat.h */ | 66 | /* commandentry defined in vchat.h */ |
66 | 67 | ||
@@ -73,20 +74,21 @@ commandtable[] = { | |||
73 | { COMMAND_HELP, "HELP", 4, command_help, SHORT_HELPTEXT_HELP, LONG_HELPTEXT_HELP }, | 74 | { COMMAND_HELP, "HELP", 4, command_help, SHORT_HELPTEXT_HELP, LONG_HELPTEXT_HELP }, |
74 | { COMMAND_FILTERS, "FILTERS", 7, command_help, SHORT_HELPTEXT_FILTERS, LONG_HELPTEXT_FILTERS }, | 75 | { COMMAND_FILTERS, "FILTERS", 7, command_help, SHORT_HELPTEXT_FILTERS, LONG_HELPTEXT_FILTERS }, |
75 | { COMMAND_KEYS, "KEYS", 4, command_help, SHORT_HELPTEXT_KEYS, LONG_HELPTEXT_KEYS }, | 76 | { COMMAND_KEYS, "KEYS", 4, command_help, SHORT_HELPTEXT_KEYS, LONG_HELPTEXT_KEYS }, |
77 | { COMMAND_QUERY, "QUERY", 5, command_query, NULL, NULL }, | ||
76 | { COMMAND_QUIT, "QUIT", 4, command_quit, SHORT_HELPTEXT_QUIT, LONG_HELPTEXT_QUIT }, | 78 | { COMMAND_QUIT, "QUIT", 4, command_quit, SHORT_HELPTEXT_QUIT, LONG_HELPTEXT_QUIT }, |
77 | { COMMAND_USER, "USER", 4, command_user, SHORT_HELPTEXT_USER, LONG_HELPTEXT_USER }, | 79 | { COMMAND_USER, "USER", 4, command_user, SHORT_HELPTEXT_USER, LONG_HELPTEXT_USER }, |
78 | { COMMAND_FLT, "FLT", 3, command_flt, NULL, LONG_HELPTEXT_FLT }, | 80 | { COMMAND_FLT, "FLT", 3, command_flt, NULL, LONG_HELPTEXT_FLT }, |
79 | { COMMAND_LOG, "LOG", 3, command_log, NULL, NULL }, | ||
80 | { COMMAND_PM, "MSG", 3, command_pm, SHORT_HELPTEXT_MSG, LONG_HELPTEXT_MSG }, | 81 | { COMMAND_PM, "MSG", 3, command_pm, SHORT_HELPTEXT_MSG, LONG_HELPTEXT_MSG }, |
81 | { COMMAND_ACTION, "ME", 2, command_action, SHORT_HELPTEXT_ME, LONG_HELPTEXT_ME }, | 82 | { COMMAND_ACTION, "ME", 2, command_action, SHORT_HELPTEXT_ME, LONG_HELPTEXT_ME }, |
82 | { COMMAND_PMSHORT, "M", 1, command_pm, NULL, SHORT_HELPTEXT_MSG }, | 83 | { COMMAND_PMSHORT, "M", 1, command_pm, NULL, SHORT_HELPTEXT_MSG }, |
84 | { COMMAND_QUITSHORT,"Q", 1, command_quit, SHORT_HELPTEXT_QUIT, LONG_HELPTEXT_QUIT }, | ||
83 | { COMMAND_PLAIN, "/", 1, output_default, NULL, NULL }, | 85 | { COMMAND_PLAIN, "/", 1, output_default, NULL, NULL }, |
84 | { COMMAND_NONE, "", 0, command_none, NULL, NULL } | 86 | { COMMAND_NONE, "", 0, command_none, NULL, NULL } |
85 | }; | 87 | }; |
86 | 88 | ||
87 | /* parse "/command" */ | 89 | /* parse "/command" */ |
88 | static int | 90 | static int |
89 | translatecommand( unsigned char **cmd) | 91 | translatecommand( char **cmd) |
90 | { | 92 | { |
91 | int result; | 93 | int result; |
92 | int cut = 0; | 94 | int cut = 0; |
@@ -120,7 +122,7 @@ translatecommand( unsigned char **cmd) | |||
120 | 122 | ||
121 | /* handle thought */ | 123 | /* handle thought */ |
122 | static void | 124 | static void |
123 | dothink( unsigned char *tail, char nice ) | 125 | dothink( char *tail, char nice ) |
124 | { | 126 | { |
125 | while( *tail == ' ' ) tail++; | 127 | while( *tail == ' ' ) tail++; |
126 | 128 | ||
@@ -136,7 +138,7 @@ dothink( unsigned char *tail, char nice ) | |||
136 | 138 | ||
137 | /* handle action */ | 139 | /* handle action */ |
138 | static void | 140 | static void |
139 | doaction( unsigned char *tail ) | 141 | doaction( char *tail ) |
140 | { | 142 | { |
141 | while( *tail == ' ' ) tail++; | 143 | while( *tail == ' ' ) tail++; |
142 | 144 | ||
@@ -156,8 +158,8 @@ doaction( unsigned char *tail ) | |||
156 | 158 | ||
157 | /* handle private message outgoing */ | 159 | /* handle private message outgoing */ |
158 | static void | 160 | static void |
159 | privatemessagetx ( unsigned char *tail ) { | 161 | privatemessagetx ( char *tail ) { |
160 | unsigned char *mesg; | 162 | char *mesg; |
161 | 163 | ||
162 | /* find nick */ | 164 | /* find nick */ |
163 | while( *tail==' ') tail++; | 165 | while( *tail==' ') tail++; |
@@ -191,7 +193,7 @@ privatemessagetx ( unsigned char *tail ) { | |||
191 | 193 | ||
192 | /* handle line entered by user */ | 194 | /* handle line entered by user */ |
193 | void | 195 | void |
194 | handleline (unsigned char *line) | 196 | handleline (char *line) |
195 | { | 197 | { |
196 | #ifdef DEBUG | 198 | #ifdef DEBUG |
197 | /* debugging? log users input! */ | 199 | /* debugging? log users input! */ |
@@ -245,7 +247,7 @@ handleline (unsigned char *line) | |||
245 | } | 247 | } |
246 | 248 | ||
247 | static void | 249 | static void |
248 | output_default( unsigned char *line ) { | 250 | output_default(char *line ) { |
249 | /* prepare for output on display */ | 251 | /* prepare for output on display */ |
250 | snprintf (tmpstr, TMPSTRSIZE, getformatstr(FS_TXPUBMSG), nick, line); | 252 | snprintf (tmpstr, TMPSTRSIZE, getformatstr(FS_TXPUBMSG), nick, line); |
251 | 253 | ||
@@ -258,11 +260,11 @@ output_default( unsigned char *line ) { | |||
258 | 260 | ||
259 | /* handle a "/user " request */ | 261 | /* handle a "/user " request */ |
260 | static void | 262 | static void |
261 | command_user( unsigned char *tail) | 263 | command_user(char *tail) |
262 | { | 264 | { |
263 | while( *tail == ' ') tail++; | 265 | while( *tail == ' ') tail++; |
264 | if( *tail ) { | 266 | if( *tail ) { |
265 | unsigned char * out = ul_matchuser( tail); | 267 | char * out = ul_matchuser( tail); |
266 | if( *out ) { | 268 | if( *out ) { |
267 | snprintf( tmpstr, TMPSTRSIZE, getformatstr(FS_USMATCH), tail, out); | 269 | snprintf( tmpstr, TMPSTRSIZE, getformatstr(FS_USMATCH), tail, out); |
268 | } else { | 270 | } else { |
@@ -276,14 +278,14 @@ command_user( unsigned char *tail) | |||
276 | 278 | ||
277 | /* handle a "/msg " request */ | 279 | /* handle a "/msg " request */ |
278 | static void | 280 | static void |
279 | command_pm (unsigned char *tail) | 281 | command_pm (char *tail) |
280 | { | 282 | { |
281 | privatemessagetx( tail ); | 283 | privatemessagetx( tail ); |
282 | } | 284 | } |
283 | 285 | ||
284 | /* handle a help request */ | 286 | /* handle a help request */ |
285 | static void | 287 | static void |
286 | command_help (unsigned char *line) { | 288 | command_help (char *line) { |
287 | flushout( ); | 289 | flushout( ); |
288 | while( *line==' ') line++; | 290 | while( *line==' ') line++; |
289 | if( *line ) { /* Get help on command */ | 291 | if( *line ) { /* Get help on command */ |
@@ -297,7 +299,7 @@ command_help (unsigned char *line) { | |||
297 | line = commandtable[i].help; | 299 | line = commandtable[i].help; |
298 | if( line ) { | 300 | if( line ) { |
299 | while( *line ) { | 301 | while( *line ) { |
300 | unsigned char *tmp = tmpstr; | 302 | char *tmp = tmpstr; |
301 | while( *line && (*line != '\n') ) | 303 | while( *line && (*line != '\n') ) |
302 | *tmp++ = *line++; | 304 | *tmp++ = *line++; |
303 | *tmp = '\0'; if( *line == '\n') line++; | 305 | *tmp = '\0'; if( *line == '\n') line++; |
@@ -319,15 +321,15 @@ command_help (unsigned char *line) { | |||
319 | 321 | ||
320 | /* handle an unknown command */ | 322 | /* handle an unknown command */ |
321 | static void | 323 | static void |
322 | command_none( unsigned char *line) { | 324 | command_none(char *line) { |
323 | snprintf(tmpstr, TMPSTRSIZE, " Unknown client command: %s ", line); | 325 | snprintf(tmpstr, TMPSTRSIZE, " Unknown client command: %s ", line); |
324 | msgout(tmpstr); | 326 | msgout(tmpstr); |
325 | } | 327 | } |
326 | 328 | ||
327 | /* handle a "/flt " request */ | 329 | /* handle a "/flt " request */ |
328 | static void | 330 | static void |
329 | command_flt( unsigned char *tail){ | 331 | command_flt(char *tail){ |
330 | unsigned char colour; | 332 | char colour; |
331 | while(*tail==' ') tail++; | 333 | while(*tail==' ') tail++; |
332 | colour = *tail++; | 334 | colour = *tail++; |
333 | while( colour && *tail == ' ') tail++; | 335 | while( colour && *tail == ' ') tail++; |
@@ -338,34 +340,34 @@ command_flt( unsigned char *tail){ | |||
338 | 340 | ||
339 | /* handle a "/clflt " request */ | 341 | /* handle a "/clflt " request */ |
340 | static void | 342 | static void |
341 | command_clflt ( unsigned char *tail) { | 343 | command_clflt (char *tail) { |
342 | while( *tail == ' ') tail++; | 344 | while( *tail == ' ') tail++; |
343 | clearfilters( *tail ); | 345 | clearfilters( *tail ); |
344 | } | 346 | } |
345 | 347 | ||
346 | /* handle a "/rmflt " request */ | 348 | /* handle a "/rmflt " request */ |
347 | static void | 349 | static void |
348 | command_rmflt ( unsigned char *tail) { | 350 | command_rmflt (char *tail) { |
349 | while( *tail == ' ') tail++; | 351 | while( *tail == ' ') tail++; |
350 | removefilter( tail ); | 352 | removefilter( tail ); |
351 | } | 353 | } |
352 | 354 | ||
353 | /* list filters */ | 355 | /* list filters */ |
354 | static void | 356 | static void |
355 | command_lsflt ( unsigned char *tail) { | 357 | command_lsflt (char *tail) { |
356 | listfilters(); | 358 | listfilters(); |
357 | } | 359 | } |
358 | 360 | ||
359 | /* handle a "/me " action */ | 361 | /* handle a "/me " action */ |
360 | static void | 362 | static void |
361 | command_action( unsigned char *tail) | 363 | command_action(char *tail) |
362 | { | 364 | { |
363 | doaction( tail); | 365 | doaction( tail); |
364 | } | 366 | } |
365 | 367 | ||
366 | /* handle a "/quit " exit */ | 368 | /* handle a "/quit " exit */ |
367 | static void | 369 | static void |
368 | command_quit ( unsigned char *tail) | 370 | command_quit(char *tail) |
369 | { | 371 | { |
370 | /* send users message to server */ | 372 | /* send users message to server */ |
371 | snprintf (tmpstr, TMPSTRSIZE, ".x %s", tail); | 373 | snprintf (tmpstr, TMPSTRSIZE, ".x %s", tail); |
@@ -377,7 +379,7 @@ command_quit ( unsigned char *tail) | |||
377 | 379 | ||
378 | /* print out version */ | 380 | /* print out version */ |
379 | void | 381 | void |
380 | command_version( unsigned char *tail) | 382 | command_version(char *tail) |
381 | { | 383 | { |
382 | /* output internal versions of all modules */ | 384 | /* output internal versions of all modules */ |
383 | flushout(); | 385 | flushout(); |
@@ -389,24 +391,20 @@ command_version( unsigned char *tail) | |||
389 | showout(); | 391 | showout(); |
390 | } | 392 | } |
391 | 393 | ||
392 | /* Undocumented feature */ | 394 | /* start or end a query */ |
393 | void | 395 | void |
394 | command_log ( unsigned char *tail) | 396 | command_query(char *tail) |
395 | { | 397 | { |
396 | /* log to file */ | 398 | char *msg; |
397 | FILE *logfile = NULL; | 399 | while( *tail == ' ') tail++; |
398 | while( *tail == ' ' ) | 400 | |
399 | tail++; | 401 | // Check, if a message is to be sent in first query |
400 | if( (logfile = fopen( tail, "w")) ) { | 402 | // Note: this is safe, since readline chops trailing spaces |
401 | if( *tail == '_' ) { | 403 | if((msg = strchr(tail, ' '))) { |
402 | writelog_i(logfile); | 404 | privatemessagetx( tail ); |
403 | } else { | 405 | *msg = 0; |
404 | writelog(logfile); | ||
405 | } | ||
406 | fclose( logfile ); | ||
407 | msgout(" Log written. "); | ||
408 | } else { | ||
409 | snprintf(tmpstr, TMPSTRSIZE, " Can't open file: %s ", tail); | ||
410 | msgout(tmpstr); | ||
411 | } | 406 | } |
407 | |||
408 | // Do the ui stuff for query | ||
409 | handlequery( tail ); | ||
412 | } | 410 | } |
diff --git a/vchat-config.h b/vchat-config.h index 008a940..ce9c72d 100755 --- a/vchat-config.h +++ b/vchat-config.h | |||
@@ -23,8 +23,8 @@ | |||
23 | #endif | 23 | #endif |
24 | 24 | ||
25 | /* configuration array with structure as defined in vchat.h */ | 25 | /* configuration array with structure as defined in vchat.h */ |
26 | extern int usessl; | 26 | extern unsigned int usessl; |
27 | extern int usetime; | 27 | extern unsigned int usetime; |
28 | extern unsigned int hscroll; | 28 | extern unsigned int hscroll; |
29 | 29 | ||
30 | static volatile configoption configoptions[] = { | 30 | static volatile configoption configoptions[] = { |
@@ -38,7 +38,6 @@ static volatile configoption configoptions[] = { | |||
38 | {CF_CERTFILE, CO_STR, "certfile", "~/.vchat/cert", NULL, { NULL } }, | 38 | {CF_CERTFILE, CO_STR, "certfile", "~/.vchat/cert", NULL, { NULL } }, |
39 | {CF_KEYFILE, CO_STR, "keyfile", "~/.vchat/key", NULL, { NULL } }, | 39 | {CF_KEYFILE, CO_STR, "keyfile", "~/.vchat/key", NULL, { NULL } }, |
40 | {CF_FORMFILE, CO_STR, "formatfile", "~/.vchat/formats", NULL, { NULL } }, | 40 | {CF_FORMFILE, CO_STR, "formatfile", "~/.vchat/formats", NULL, { NULL } }, |
41 | {CF_LOGFILE, CO_STR, "logfile", "~/.vchat/log", NULL, { NULL } }, | ||
42 | {CF_ENCODING, CO_STR, "encoding", NULL, NULL, { .pstr = &encoding }}, | 41 | {CF_ENCODING, CO_STR, "encoding", NULL, NULL, { .pstr = &encoding }}, |
43 | {CF_USESSL, CO_INT, "usessl", (char *) 1, (char *)-1, { .pint = &usessl } }, | 42 | {CF_USESSL, CO_INT, "usessl", (char *) 1, (char *)-1, { .pint = &usessl } }, |
44 | {CF_USECERT, CO_INT, "usecert", (char *) 1, (char *)-1, { NULL } }, | 43 | {CF_USECERT, CO_INT, "usecert", (char *) 1, (char *)-1, { NULL } }, |
@@ -51,7 +50,6 @@ static volatile configoption configoptions[] = { | |||
51 | {CF_SCROLLBACK, CO_INT, "scrollback", (char *) 8192, (char *)-1, { NULL } }, | 50 | {CF_SCROLLBACK, CO_INT, "scrollback", (char *) 8192, (char *)-1, { NULL } }, |
52 | {CF_SCROLLBPRIVT,CO_INT, "privscrollt",(char *) 0, (char *)-1, { NULL } }, | 51 | {CF_SCROLLBPRIVT,CO_INT, "privscrollt",(char *) 0, (char *)-1, { NULL } }, |
53 | {CF_SCROLLBACKT, CO_INT, "scrolltime", (char *) 86400, (char *)-1, { NULL } }, | 52 | {CF_SCROLLBACKT, CO_INT, "scrolltime", (char *) 86400, (char *)-1, { NULL } }, |
54 | {CF_KEEPLOG, CO_INT, "keeplog", (char *) 0, (char *)-1, { NULL } }, | ||
55 | {CF_BELLPRIV, CO_INT, "bellonpm", (char *) 0, (char *)-1, { NULL } }, | 53 | {CF_BELLPRIV, CO_INT, "bellonpm", (char *) 0, (char *)-1, { NULL } }, |
56 | {CF_NIL, CO_NIL, NULL, NULL, NULL, { NULL } }, | 54 | {CF_NIL, CO_NIL, NULL, NULL, NULL, { NULL } }, |
57 | }; | 55 | }; |
diff --git a/vchat-protocol.c b/vchat-protocol.c index 7c91638..5554796 100755 --- a/vchat-protocol.c +++ b/vchat-protocol.c | |||
@@ -35,7 +35,7 @@ | |||
35 | #include "vchat.h" | 35 | #include "vchat.h" |
36 | 36 | ||
37 | /* version of this module */ | 37 | /* version of this module */ |
38 | unsigned char *vchat_io_version = "$Id$"; | 38 | char *vchat_io_version = "$Id$"; |
39 | 39 | ||
40 | /* externally used variables */ | 40 | /* externally used variables */ |
41 | int serverfd = -1; | 41 | int serverfd = -1; |
@@ -49,28 +49,28 @@ static SSL *sslconn = NULL; | |||
49 | * but by the library. we use it to set the accepted list of ciphers */ | 49 | * but by the library. we use it to set the accepted list of ciphers */ |
50 | STACK_OF(SSL_CIPHER) * ssl_create_cipher_list (const SSL_METHOD * meth, STACK_OF (SSL_CIPHER) ** pref, STACK_OF (SSL_CIPHER) ** sorted, const unsigned char *rule_str); | 50 | STACK_OF(SSL_CIPHER) * ssl_create_cipher_list (const SSL_METHOD * meth, STACK_OF (SSL_CIPHER) ** pref, STACK_OF (SSL_CIPHER) ** sorted, const unsigned char *rule_str); |
51 | 51 | ||
52 | static unsigned char *sslpubkey = NULL; /* servers public key extracted from X.509 certificate */ | 52 | static char *sslpubkey = NULL; /* servers public key extracted from X.509 certificate */ |
53 | static int sslpubkeybits = 0; /* length of server public key */ | 53 | static int sslpubkeybits = 0; /* length of server public key */ |
54 | 54 | ||
55 | /* declaration of local helper functions */ | 55 | /* declaration of local helper functions */ |
56 | static void usersignon (unsigned char *); | 56 | static void usersignon (char *); |
57 | static void usersignoff (unsigned char *); | 57 | static void usersignoff (char *); |
58 | static void usernickchange (unsigned char *); | 58 | static void usernickchange (char *); |
59 | static void userjoin (unsigned char *); | 59 | static void userjoin (char *); |
60 | static void userleave (unsigned char *); | 60 | static void userleave (char *); |
61 | static void receivenicks (unsigned char *message); | 61 | static void receivenicks (char *message); |
62 | static void justloggedin (unsigned char *message); | 62 | static void justloggedin (char *message); |
63 | static void nickerr (unsigned char *message); | 63 | static void nickerr (char *message); |
64 | static void login (unsigned char *message); | 64 | static void login (char *message); |
65 | static void anonlogin (unsigned char *message); | 65 | static void anonlogin (char *message); |
66 | static void topicinfo (unsigned char *message); | 66 | static void topicinfo (char *message); |
67 | static void pubaction (unsigned char *message); | 67 | static void pubaction (char *message); |
68 | static void pubthoughts (unsigned char *message); | 68 | static void pubthoughts (char *message); |
69 | static void serverlogin (unsigned char *message); | 69 | static void serverlogin (char *message); |
70 | static void idleprompt (unsigned char *message); | 70 | static void idleprompt (char *message); |
71 | static void topicchange (unsigned char *message); | 71 | static void topicchange (char *message); |
72 | static void pmnotsent (unsigned char *message); | 72 | static void pmnotsent (char *message); |
73 | static int getportnum(unsigned char *port); | 73 | static int getportnum (char *port); |
74 | 74 | ||
75 | /* declaration of server message array */ | 75 | /* declaration of server message array */ |
76 | #include "vchat-messages.h" | 76 | #include "vchat-messages.h" |
@@ -80,21 +80,21 @@ static int getportnum(unsigned char *port); | |||
80 | extern int status; | 80 | extern int status; |
81 | 81 | ||
82 | int usessl = 1; | 82 | int usessl = 1; |
83 | unsigned char *encoding; | 83 | char *encoding; |
84 | 84 | ||
85 | /* connects to server */ | 85 | /* connects to server */ |
86 | int | 86 | int |
87 | vcconnect (unsigned char *server, unsigned char *port) | 87 | vcconnect (char *server, char *port) |
88 | { | 88 | { |
89 | /* used for tilde expansion of cert & key filenames */ | 89 | /* used for tilde expansion of cert & key filenames */ |
90 | unsigned char *tildex = NULL; | 90 | char *tildex = NULL; |
91 | /* buffer for X.509 subject of server certificate */ | 91 | /* buffer for X.509 subject of server certificate */ |
92 | unsigned char subjbuf[256]; | 92 | char subjbuf[256]; |
93 | /* variables used to split the subject */ | 93 | /* variables used to split the subject */ |
94 | unsigned char *subjv = NULL; | 94 | char *subjv = NULL; |
95 | unsigned char *subjn = NULL; | 95 | char *subjn = NULL; |
96 | unsigned char *subjc = NULL; | 96 | char *subjc = NULL; |
97 | unsigned char *subjh = NULL; | 97 | char *subjh = NULL; |
98 | /* pointer to key in certificate */ | 98 | /* pointer to key in certificate */ |
99 | EVP_PKEY *certpubkey = NULL; | 99 | EVP_PKEY *certpubkey = NULL; |
100 | /* temporary result */ | 100 | /* temporary result */ |
@@ -109,7 +109,7 @@ vcconnect (unsigned char *server, unsigned char *port) | |||
109 | SSL_METHOD *sslmeth = NULL; | 109 | SSL_METHOD *sslmeth = NULL; |
110 | 110 | ||
111 | /* pointer to tilde-expanded certificate/keyfile-names */ | 111 | /* pointer to tilde-expanded certificate/keyfile-names */ |
112 | unsigned char *certfile = NULL, *keyfile = NULL; | 112 | char *certfile = NULL, *keyfile = NULL; |
113 | 113 | ||
114 | /* variable for verify return */ | 114 | /* variable for verify return */ |
115 | long verify; | 115 | long verify; |
@@ -154,7 +154,7 @@ vcconnect (unsigned char *server, unsigned char *port) | |||
154 | SSL_CTX_set_default_passwd_cb (sslctx, passprompt); | 154 | SSL_CTX_set_default_passwd_cb (sslctx, passprompt); |
155 | 155 | ||
156 | /* set our list of accepted ciphers */ | 156 | /* set our list of accepted ciphers */ |
157 | ssl_create_cipher_list (sslctx->method, &(sslctx->cipher_list), &(sslctx->cipher_list_by_id), getstroption (CF_CIPHERSUITE)); | 157 | ssl_create_cipher_list (sslctx->method, &(sslctx->cipher_list), &(sslctx->cipher_list_by_id), (unsigned char*)getstroption (CF_CIPHERSUITE)); |
158 | 158 | ||
159 | /* get name of certificate file */ | 159 | /* get name of certificate file */ |
160 | certfile = getstroption (CF_CERTFILE); | 160 | certfile = getstroption (CF_CERTFILE); |
@@ -366,7 +366,7 @@ vcdisconnect () | |||
366 | } | 366 | } |
367 | 367 | ||
368 | /* lookup a port number by service string */ | 368 | /* lookup a port number by service string */ |
369 | static int getportnum (unsigned char *port) | 369 | static int getportnum (char *port) |
370 | { | 370 | { |
371 | char *endpt = NULL; | 371 | char *endpt = NULL; |
372 | struct servent *service = getservbyname(port, "tcp"); | 372 | struct servent *service = getservbyname(port, "tcp"); |
@@ -382,7 +382,7 @@ static int getportnum (unsigned char *port) | |||
382 | /* handle a pm not sent error | 382 | /* handle a pm not sent error |
383 | * format: 412 %s */ | 383 | * format: 412 %s */ |
384 | static void | 384 | static void |
385 | pmnotsent (unsigned char *message) | 385 | pmnotsent (char *message) |
386 | { | 386 | { |
387 | while(*message && *message!=' ') message++; | 387 | while(*message && *message!=' ') message++; |
388 | snprintf(tmpstr,TMPSTRSIZE,getformatstr(FS_ERR),message+1); | 388 | snprintf(tmpstr,TMPSTRSIZE,getformatstr(FS_ERR),message+1); |
@@ -395,9 +395,9 @@ pmnotsent (unsigned char *message) | |||
395 | * vars: %s nick | 395 | * vars: %s nick |
396 | * %s action */ | 396 | * %s action */ |
397 | static void | 397 | static void |
398 | pubaction (unsigned char *message) | 398 | pubaction (char *message) |
399 | { | 399 | { |
400 | unsigned char *nick = NULL, *action = NULL; | 400 | char *nick = NULL, *action = NULL; |
401 | nick = strchr (message, ' '); | 401 | nick = strchr (message, ' '); |
402 | nick[0] = '\0'; | 402 | nick[0] = '\0'; |
403 | nick++; | 403 | nick++; |
@@ -415,9 +415,9 @@ pubaction (unsigned char *message) | |||
415 | * vars: %s nick | 415 | * vars: %s nick |
416 | * %s thought */ | 416 | * %s thought */ |
417 | static void | 417 | static void |
418 | pubthoughts (unsigned char *message) | 418 | pubthoughts (char *message) |
419 | { | 419 | { |
420 | unsigned char *nick = NULL, *thoughts = NULL; | 420 | char *nick = NULL, *thoughts = NULL; |
421 | nick = strchr (message, ' '); | 421 | nick = strchr (message, ' '); |
422 | nick[0] = '\0'; | 422 | nick[0] = '\0'; |
423 | nick++; | 423 | nick++; |
@@ -432,7 +432,7 @@ pubthoughts (unsigned char *message) | |||
432 | 432 | ||
433 | /* parse and handle server logon */ | 433 | /* parse and handle server logon */ |
434 | static void | 434 | static void |
435 | serverlogin (unsigned char *message) | 435 | serverlogin (char *message) |
436 | { | 436 | { |
437 | #ifndef NO_LOCALE | 437 | #ifndef NO_LOCALE |
438 | int utf8=!strcmp(nl_langinfo(CODESET), "UTF-8"); | 438 | int utf8=!strcmp(nl_langinfo(CODESET), "UTF-8"); |
@@ -444,9 +444,9 @@ serverlogin (unsigned char *message) | |||
444 | * format: 305 | 444 | * format: 305 |
445 | * vars: %s message */ | 445 | * vars: %s message */ |
446 | static void | 446 | static void |
447 | idleprompt (unsigned char *message) | 447 | idleprompt (char *message) |
448 | { | 448 | { |
449 | unsigned char *msg = NULL; | 449 | char *msg = NULL; |
450 | msg = strchr (message, ' '); | 450 | msg = strchr (message, ' '); |
451 | msg[0] = '\0'; | 451 | msg[0] = '\0'; |
452 | msg++; | 452 | msg++; |
@@ -460,9 +460,9 @@ idleprompt (unsigned char *message) | |||
460 | * vars: %d chan - channel number | 460 | * vars: %d chan - channel number |
461 | * %s topic - topic */ | 461 | * %s topic - topic */ |
462 | static void | 462 | static void |
463 | topicinfo (unsigned char *message) | 463 | topicinfo (char *message) |
464 | { | 464 | { |
465 | unsigned char *channel = NULL, *topic = NULL; | 465 | char *channel = NULL, *topic = NULL; |
466 | int tmpchan = 0; | 466 | int tmpchan = 0; |
467 | 467 | ||
468 | /* search start of channel number */ | 468 | /* search start of channel number */ |
@@ -499,9 +499,9 @@ topicinfo (unsigned char *message) | |||
499 | * vars: %s nick | 499 | * vars: %s nick |
500 | * %s topic */ | 500 | * %s topic */ |
501 | static void | 501 | static void |
502 | topicchange (unsigned char *message) | 502 | topicchange (char *message) |
503 | { | 503 | { |
504 | unsigned char *nick = NULL, *topic = NULL; | 504 | char *nick = NULL, *topic = NULL; |
505 | int len; | 505 | int len; |
506 | 506 | ||
507 | /* search start of nickname */ | 507 | /* search start of nickname */ |
@@ -537,9 +537,9 @@ topicchange (unsigned char *message) | |||
537 | * vars: %s str1 - nick used to login | 537 | * vars: %s str1 - nick used to login |
538 | * %s str2 - servers message */ | 538 | * %s str2 - servers message */ |
539 | static void | 539 | static void |
540 | justloggedin (unsigned char *message) | 540 | justloggedin (char *message) |
541 | { | 541 | { |
542 | unsigned char *str1 = NULL, *str2 = NULL; | 542 | char *str1 = NULL, *str2 = NULL; |
543 | /* search start of nickname */ | 543 | /* search start of nickname */ |
544 | str1 = strchr (message, ' '); | 544 | str1 = strchr (message, ' '); |
545 | str1++; | 545 | str1++; |
@@ -590,7 +590,7 @@ ownleave (int channel) | |||
590 | 590 | ||
591 | /* this user changes his nick */ | 591 | /* this user changes his nick */ |
592 | void | 592 | void |
593 | ownnickchange (unsigned char *newnick) | 593 | ownnickchange (char *newnick) |
594 | { | 594 | { |
595 | /* free old nick, store copy of new nick */ | 595 | /* free old nick, store copy of new nick */ |
596 | setstroption(CF_NICK,newnick); | 596 | setstroption(CF_NICK,newnick); |
@@ -606,9 +606,9 @@ ownnickchange (unsigned char *newnick) | |||
606 | * 415 %s | 606 | * 415 %s |
607 | * vars: %s - server message */ | 607 | * vars: %s - server message */ |
608 | static void | 608 | static void |
609 | nickerr (unsigned char *message) | 609 | nickerr (char *message) |
610 | { | 610 | { |
611 | unsigned char *helpkiller = NULL; | 611 | char *helpkiller = NULL; |
612 | /* mutate message for output */ | 612 | /* mutate message for output */ |
613 | message[2] = '!'; | 613 | message[2] = '!'; |
614 | /* help information found? remove it. */ | 614 | /* help information found? remove it. */ |
@@ -639,9 +639,9 @@ nickerr (unsigned char *message) | |||
639 | * vars: %s - this users registered nick | 639 | * vars: %s - this users registered nick |
640 | * %s msg - server message */ | 640 | * %s msg - server message */ |
641 | static void | 641 | static void |
642 | login (unsigned char *message) | 642 | login (char *message) |
643 | { | 643 | { |
644 | unsigned char *msg = NULL; | 644 | char *msg = NULL; |
645 | 645 | ||
646 | /* mutate message for output */ | 646 | /* mutate message for output */ |
647 | message[2] = '*'; | 647 | message[2] = '*'; |
@@ -675,7 +675,7 @@ login (unsigned char *message) | |||
675 | * format: 121 %s | 675 | * format: 121 %s |
676 | * vars: %s - server message */ | 676 | * vars: %s - server message */ |
677 | static void | 677 | static void |
678 | anonlogin (unsigned char *message) | 678 | anonlogin (char *message) |
679 | { | 679 | { |
680 | /* mutate message for output */ | 680 | /* mutate message for output */ |
681 | message[2] = '*'; | 681 | message[2] = '*'; |
@@ -695,11 +695,11 @@ anonlogin (unsigned char *message) | |||
695 | * format: 119 %s .. | 695 | * format: 119 %s .. |
696 | * vars: %s nick - a users nick */ | 696 | * vars: %s nick - a users nick */ |
697 | static void | 697 | static void |
698 | receivenicks (unsigned char *message) | 698 | receivenicks (char *message) |
699 | { | 699 | { |
700 | unsigned char *str1 = NULL, *str2 = NULL; | 700 | char *str1 = NULL, *str2 = NULL; |
701 | int mychan = 0; | 701 | int mychan = 0; |
702 | void (*ul_myfunc)(unsigned char*,int); | 702 | void (*ul_myfunc)(char*,int); |
703 | 703 | ||
704 | /* show message to user */ | 704 | /* show message to user */ |
705 | snprintf (tmpstr, TMPSTRSIZE, getformatstr(FS_USONLINE), &message[4]); | 705 | snprintf (tmpstr, TMPSTRSIZE, getformatstr(FS_USONLINE), &message[4]); |
@@ -745,9 +745,9 @@ receivenicks (unsigned char *message) | |||
745 | * vars: %s nick - who logged on | 745 | * vars: %s nick - who logged on |
746 | * %s msg - servers message */ | 746 | * %s msg - servers message */ |
747 | static void | 747 | static void |
748 | usersignon (unsigned char *message) | 748 | usersignon (char *message) |
749 | { | 749 | { |
750 | unsigned char *nick = NULL, *msg = NULL; | 750 | char *nick = NULL, *msg = NULL; |
751 | /* search start of nickname */ | 751 | /* search start of nickname */ |
752 | nick = strchr (message, ' '); | 752 | nick = strchr (message, ' '); |
753 | nick++; | 753 | nick++; |
@@ -770,9 +770,9 @@ usersignon (unsigned char *message) | |||
770 | * vars: %s nick - who logged off | 770 | * vars: %s nick - who logged off |
771 | * %s msg - servers message */ | 771 | * %s msg - servers message */ |
772 | static void | 772 | static void |
773 | usersignoff (unsigned char *message) | 773 | usersignoff (char *message) |
774 | { | 774 | { |
775 | unsigned char *nick = NULL, *msg = NULL; | 775 | char *nick = NULL, *msg = NULL; |
776 | /* search start of nickname */ | 776 | /* search start of nickname */ |
777 | nick = strchr (message, ' '); | 777 | nick = strchr (message, ' '); |
778 | nick++; | 778 | nick++; |
@@ -796,9 +796,9 @@ usersignoff (unsigned char *message) | |||
796 | * %s msg - servers message | 796 | * %s msg - servers message |
797 | * %d chan - channel joined */ | 797 | * %d chan - channel joined */ |
798 | static void | 798 | static void |
799 | userjoin (unsigned char *message) | 799 | userjoin (char *message) |
800 | { | 800 | { |
801 | unsigned char *nick = NULL, *msg = NULL, *channel = NULL; | 801 | char *nick = NULL, *msg = NULL, *channel = NULL; |
802 | int chan = 0; | 802 | int chan = 0; |
803 | 803 | ||
804 | /* search start of nickname */ | 804 | /* search start of nickname */ |
@@ -832,9 +832,9 @@ userjoin (unsigned char *message) | |||
832 | * %s msg - servers message | 832 | * %s msg - servers message |
833 | * %d chan - channel joined */ | 833 | * %d chan - channel joined */ |
834 | static void | 834 | static void |
835 | userleave (unsigned char *message) | 835 | userleave (char *message) |
836 | { | 836 | { |
837 | unsigned char *nick = NULL, *msg = NULL, *channel = NULL; | 837 | char *nick = NULL, *msg = NULL, *channel = NULL; |
838 | int chan = 0; | 838 | int chan = 0; |
839 | 839 | ||
840 | /* search start of nickname */ | 840 | /* search start of nickname */ |
@@ -868,9 +868,9 @@ userleave (unsigned char *message) | |||
868 | * %s newnick - users new nick | 868 | * %s newnick - users new nick |
869 | * %s msg - server message */ | 869 | * %s msg - server message */ |
870 | static void | 870 | static void |
871 | usernickchange (unsigned char *message) | 871 | usernickchange (char *message) |
872 | { | 872 | { |
873 | unsigned char *oldnick = NULL, *newnick = NULL, *msg = NULL; | 873 | char *oldnick = NULL, *newnick = NULL, *msg = NULL; |
874 | 874 | ||
875 | /* search start of old nickname */ | 875 | /* search start of old nickname */ |
876 | oldnick = strchr (message, ' '); | 876 | oldnick = strchr (message, ' '); |
@@ -896,9 +896,9 @@ usernickchange (unsigned char *message) | |||
896 | 896 | ||
897 | /* handle received message from server */ | 897 | /* handle received message from server */ |
898 | static void | 898 | static void |
899 | parsemsg (unsigned char *message) | 899 | parsemsg (char *message) |
900 | { | 900 | { |
901 | unsigned char *str1, *str2; | 901 | char *str1, *str2; |
902 | int i; | 902 | int i; |
903 | /* message to short or starts with '<'? must be channel */ | 903 | /* message to short or starts with '<'? must be channel */ |
904 | if (message[0] == '<') | 904 | if (message[0] == '<') |
@@ -1014,10 +1014,10 @@ void | |||
1014 | networkinput (void) | 1014 | networkinput (void) |
1015 | { | 1015 | { |
1016 | int bytes; | 1016 | int bytes; |
1017 | unsigned char *tmp = NULL; | 1017 | char *tmp = NULL; |
1018 | #define BUFSIZE 4096 | 1018 | #define BUFSIZE 4096 |
1019 | unsigned char buf[BUFSIZE]; /* data buffer */ | 1019 | char buf[BUFSIZE]; /* data buffer */ |
1020 | unsigned char *ltmp = buf; | 1020 | char *ltmp = buf; |
1021 | buf[BUFSIZE-1] = '\0'; /* sanity stop */ | 1021 | buf[BUFSIZE-1] = '\0'; /* sanity stop */ |
1022 | 1022 | ||
1023 | /* check if we use ssl or if we don't and receive data at offset */ | 1023 | /* check if we use ssl or if we don't and receive data at offset */ |
@@ -1085,7 +1085,7 @@ networkinput (void) | |||
1085 | } | 1085 | } |
1086 | 1086 | ||
1087 | void | 1087 | void |
1088 | networkoutput (unsigned char *msg) | 1088 | networkoutput (char *msg) |
1089 | { | 1089 | { |
1090 | #ifdef DEBUG | 1090 | #ifdef DEBUG |
1091 | /* debugging? log network output! */ | 1091 | /* debugging? log network output! */ |
@@ -30,13 +30,13 @@ | |||
30 | #include "vchat.h" | 30 | #include "vchat.h" |
31 | 31 | ||
32 | /* version of this module */ | 32 | /* version of this module */ |
33 | unsigned char *vchat_ui_version = "$Id$"; | 33 | char *vchat_ui_version = "$Id$"; |
34 | 34 | ||
35 | /* externally used variables */ | 35 | /* externally used variables */ |
36 | /* current string in topic window */ | 36 | /* current string in topic window */ |
37 | unsigned char topicstr[TOPICSTRSIZE] = "[] VChat 0.16"; | 37 | char topicstr[TOPICSTRSIZE] = "[] VChat 0.16"; |
38 | /* current string in console window */ | 38 | /* current string in console window */ |
39 | unsigned char consolestr[CONSOLESTRSIZE] = "[ Get help: .h for server /h for client commands"; | 39 | char consolestr[CONSOLESTRSIZE] = "[ Get help: .h for server /h for client commands"; |
40 | 40 | ||
41 | static unsigned int ui_init = 0; | 41 | static unsigned int ui_init = 0; |
42 | 42 | ||
@@ -48,8 +48,6 @@ static WINDOW *channel = NULL; | |||
48 | static WINDOW *private = NULL; | 48 | static WINDOW *private = NULL; |
49 | static WINDOW *output = NULL; | 49 | static WINDOW *output = NULL; |
50 | 50 | ||
51 | static FILE *vchat_logfile = NULL; | ||
52 | |||
53 | /* our screen dimensions */ | 51 | /* our screen dimensions */ |
54 | static int screensx = 0; | 52 | static int screensx = 0; |
55 | static int screensy = 0; | 53 | static int screensy = 0; |
@@ -68,12 +66,13 @@ static int privheight_desired = 0; | |||
68 | static int privwinhidden = 0; | 66 | static int privwinhidden = 0; |
69 | int usetime = 1; | 67 | int usetime = 1; |
70 | int outputcountdown = 0; | 68 | int outputcountdown = 0; |
69 | char *querypartner = NULL; | ||
71 | 70 | ||
72 | struct sb_entry { | 71 | struct sb_entry { |
73 | int id; | 72 | int id; |
74 | time_t when; | 73 | time_t when; |
75 | int stamp; | 74 | int stamp; |
76 | unsigned char *what; | 75 | char *what; |
77 | struct sb_entry *link; | 76 | struct sb_entry *link; |
78 | }; | 77 | }; |
79 | 78 | ||
@@ -93,9 +92,9 @@ static int sb_win = 0; /* 0 for pub, 1 for priv */ | |||
93 | 92 | ||
94 | /* struct to keep filter list */ | 93 | /* struct to keep filter list */ |
95 | struct filt { | 94 | struct filt { |
96 | unsigned char colour; | 95 | char colour; |
97 | unsigned int id; | 96 | unsigned int id; |
98 | unsigned char *text; | 97 | char *text; |
99 | regex_t regex; | 98 | regex_t regex; |
100 | struct filt *next; | 99 | struct filt *next; |
101 | }; | 100 | }; |
@@ -119,7 +118,7 @@ static void resize_output (void); | |||
119 | static int getsbeheight (struct sb_entry *entry, const int xwidth, int needstime ); | 118 | static int getsbeheight (struct sb_entry *entry, const int xwidth, int needstime ); |
120 | static int getsbdataheight (struct sb_data *data, const int xwidth, int needstime ); | 119 | static int getsbdataheight (struct sb_data *data, const int xwidth, int needstime ); |
121 | /* CURRENTLY UNUSED | 120 | /* CURRENTLY UNUSED |
122 | static void writecolorized (WINDOW *win, unsigned char *string); | 121 | static void writecolorized (WINDOW *win, char *string); |
123 | */ | 122 | */ |
124 | 123 | ||
125 | enum { | 124 | enum { |
@@ -129,10 +128,20 @@ enum { | |||
129 | RMFILTER_KEEPANDSTOP | 128 | RMFILTER_KEEPANDSTOP |
130 | }; | 129 | }; |
131 | 130 | ||
131 | /* */ | ||
132 | static void | ||
133 | togglequery() { | ||
134 | if( querypartner && private ) { | ||
135 | { struct sb_data *tmp = sb_pub; sb_pub = sb_priv; sb_priv = tmp; } | ||
136 | { WINDOW *tmp= private; private = channel; channel = tmp; } | ||
137 | } | ||
138 | } | ||
139 | |||
132 | /* readlines callback when a line is completed */ | 140 | /* readlines callback when a line is completed */ |
133 | static void | 141 | static void |
134 | linecomplete (unsigned char *line) | 142 | linecomplete (char *line) |
135 | { | 143 | { |
144 | char *c; | ||
136 | int i; | 145 | int i; |
137 | 146 | ||
138 | /* send linefeed, return pointer, reset cursors */ | 147 | /* send linefeed, return pointer, reset cursors */ |
@@ -157,6 +166,10 @@ linecomplete (unsigned char *line) | |||
157 | handleline (line); | 166 | handleline (line); |
158 | free (line); | 167 | free (line); |
159 | 168 | ||
169 | /* If in query mode, feed query prefix */ | ||
170 | if (( c = querypartner )) | ||
171 | while( *c ) rl_stuff_char( *c++ ); | ||
172 | |||
160 | /* wipe input line and reset cursor */ | 173 | /* wipe input line and reset cursor */ |
161 | wmove (input, 0, 0); | 174 | wmove (input, 0, 0); |
162 | for (i = 0; i < input->_maxx; i++) | 175 | for (i = 0; i < input->_maxx; i++) |
@@ -212,8 +225,8 @@ userinput (void) | |||
212 | } | 225 | } |
213 | 226 | ||
214 | static int | 227 | static int |
215 | calcdrawcus (unsigned char * const str) { | 228 | calcdrawcus (char * const str) { |
216 | unsigned char *tmp = str; | 229 | char *tmp = str; |
217 | int zero = 0; | 230 | int zero = 0; |
218 | while( *tmp && (*tmp!=' ') && (*tmp!='\n')) { if(*tmp==1) zero+=2; tmp++; } | 231 | while( *tmp && (*tmp!=' ') && (*tmp!='\n')) { if(*tmp==1) zero+=2; tmp++; } |
219 | return (tmp - str) - zero; | 232 | return (tmp - str) - zero; |
@@ -240,7 +253,7 @@ sb_clear ( struct sb_data **sb ) { | |||
240 | }*/ | 253 | }*/ |
241 | 254 | ||
242 | static struct sb_entry* | 255 | static struct sb_entry* |
243 | sb_add (struct sb_data *sb, unsigned char *line, time_t when) { | 256 | sb_add (struct sb_data *sb, char *line, time_t when) { |
244 | struct sb_entry *newone = malloc (sizeof(struct sb_entry)); | 257 | struct sb_entry *newone = malloc (sizeof(struct sb_entry)); |
245 | if( newone ) { | 258 | if( newone ) { |
246 | if( sb->count == sb->scroll ) sb->scroll++; | 259 | if( sb->count == sb->scroll ) sb->scroll++; |
@@ -282,7 +295,7 @@ void showout (void) | |||
282 | resize(0); | 295 | resize(0); |
283 | } | 296 | } |
284 | 297 | ||
285 | void writeout (unsigned char *str) | 298 | void writeout (char *str) |
286 | { | 299 | { |
287 | int i; | 300 | int i; |
288 | sb_add(sb_out,str,time(NULL)); | 301 | sb_add(sb_out,str,time(NULL)); |
@@ -290,43 +303,47 @@ void writeout (unsigned char *str) | |||
290 | if( i > outputwidth_desired ) outputwidth_desired = i; | 303 | if( i > outputwidth_desired ) outputwidth_desired = i; |
291 | } | 304 | } |
292 | 305 | ||
293 | int writechan (unsigned char *str) { | 306 | int writechan (char *str) { |
294 | struct sb_entry *tmp; | 307 | struct sb_entry *tmp; |
295 | int i = 0; | 308 | int i = 0; |
296 | time_t now = time(NULL); | 309 | time_t now = time(NULL); |
297 | tmp = sb_add(sb_pub,str,now); | 310 | tmp = sb_add(sb_pub,str,now); |
298 | 311 | ||
299 | if( getintoption( CF_KEEPLOG ) && vchat_logfile ) | ||
300 | fprintf( vchat_logfile, "%016llX0%s\n", (signed long long)now, str); | ||
301 | |||
302 | if ( (sb_pub->scroll == sb_pub->count) && ((filtertype == 0) || ( testfilter(tmp)))) { | 312 | if ( (sb_pub->scroll == sb_pub->count) && ((filtertype == 0) || ( testfilter(tmp)))) { |
303 | i = writescr(channel, tmp); | 313 | i = writescr(channel, tmp); |
304 | wnoutrefresh(channel); | 314 | wnoutrefresh(channel); |
305 | } | 315 | } |
306 | consoleline(NULL); | 316 | |
317 | if( querypartner && private ) | ||
318 | topicline(NULL); | ||
319 | else | ||
320 | consoleline(NULL); | ||
321 | |||
307 | return i; | 322 | return i; |
308 | } | 323 | } |
309 | 324 | ||
310 | int writecf (formtstr id,unsigned char *str) { | 325 | int writecf (formtstr id, char *str) { |
311 | struct sb_entry *tmp; | 326 | struct sb_entry *tmp; |
312 | int i = 0; | 327 | int i = 0; |
313 | time_t now = time(NULL); | 328 | time_t now = time(NULL); |
314 | snprintf(tmpstr,TMPSTRSIZE,getformatstr(id),str); | 329 | snprintf(tmpstr,TMPSTRSIZE,getformatstr(id),str); |
315 | tmp = sb_add(sb_pub,tmpstr,now); | 330 | tmp = sb_add(sb_pub,tmpstr,now); |
316 | 331 | ||
317 | if( getintoption( CF_KEEPLOG ) && vchat_logfile ) | ||
318 | fprintf( vchat_logfile, "%016llX0%s\n", (unsigned long long)now, tmpstr); | ||
319 | |||
320 | if ( (sb_pub->scroll == sb_pub->count) && | 332 | if ( (sb_pub->scroll == sb_pub->count) && |
321 | ((filtertype == 0) || ( testfilter(tmp)))) { | 333 | ((filtertype == 0) || ( testfilter(tmp)))) { |
322 | i = writescr(channel, tmp); | 334 | i = writescr(channel, tmp); |
323 | wnoutrefresh(channel); | 335 | wnoutrefresh(channel); |
324 | } | 336 | } |
325 | consoleline(NULL); | 337 | |
338 | if( querypartner && private ) | ||
339 | topicline(NULL); | ||
340 | else | ||
341 | consoleline(NULL); | ||
342 | |||
326 | return i; | 343 | return i; |
327 | } | 344 | } |
328 | 345 | ||
329 | int writepriv (unsigned char *str, int maybeep) { | 346 | int writepriv (char *str, int maybeep) { |
330 | int i = 0; | 347 | int i = 0; |
331 | if (private) { | 348 | if (private) { |
332 | 349 | ||
@@ -334,10 +351,6 @@ int writepriv (unsigned char *str, int maybeep) { | |||
334 | struct sb_entry *tmp; | 351 | struct sb_entry *tmp; |
335 | tmp = sb_add(sb_priv,str,now); | 352 | tmp = sb_add(sb_priv,str,now); |
336 | 353 | ||
337 | if( getintoption( CF_KEEPLOG ) && vchat_logfile ) { | ||
338 | fprintf( vchat_logfile, "%016llX1%s\n", (unsigned long long)now, str); | ||
339 | } | ||
340 | |||
341 | if ( !privwinhidden && (sb_priv->scroll == sb_priv->count) && | 354 | if ( !privwinhidden && (sb_priv->scroll == sb_priv->count) && |
342 | ((filtertype == 0) || ( testfilter(tmp)))) { | 355 | ((filtertype == 0) || ( testfilter(tmp)))) { |
343 | i = writescr(private, tmp); | 356 | i = writescr(private, tmp); |
@@ -350,7 +363,12 @@ int writepriv (unsigned char *str, int maybeep) { | |||
350 | resize(0); | 363 | resize(0); |
351 | } | 364 | } |
352 | wnoutrefresh(private); | 365 | wnoutrefresh(private); |
353 | topicline(NULL); | 366 | |
367 | if( querypartner && private ) | ||
368 | consoleline(NULL); | ||
369 | else | ||
370 | topicline(NULL); | ||
371 | |||
354 | } else | 372 | } else |
355 | i = writechan( str ); | 373 | i = writechan( str ); |
356 | 374 | ||
@@ -388,13 +406,13 @@ static int attributes[] = { A_ALTCHARSET, A_BOLD, 0, A_DIM, 0, 0, 0, 0, A_INVIS, | |||
388 | 0, 0, 1, 0, 0 }; | 406 | 0, 0, 1, 0, 0 }; |
389 | 407 | ||
390 | static void | 408 | static void |
391 | docolorize (unsigned char colour, ncurs_attr *attr, ncurs_attr orgattr) { | 409 | docolorize (char colour, ncurs_attr *attr, ncurs_attr orgattr) { |
392 | if( colour== '0') { | 410 | if( colour== '0') { |
393 | *attr = orgattr; | 411 | *attr = orgattr; |
394 | } else if( ( colour > '0') && ( colour <= '9')) { | 412 | } else if( ( colour > '0') && ( colour <= '9')) { |
395 | BCOLR_SET( attr, colour - '0' ); | 413 | BCOLR_SET( attr, colour - '0' ); |
396 | } else { | 414 | } else { |
397 | unsigned char upc = colour & ( 0x20 ^ 0xff ); /* colour AND NOT 0x20 */ | 415 | char upc = colour & ( 0x20 ^ 0xff ); /* colour AND NOT 0x20 */ |
398 | attr_t newattr; | 416 | attr_t newattr; |
399 | if( ( upc >= 'A') && ( upc<='Z' ) && ( newattr = attributes[upc - 'A']) ) | 417 | if( ( upc >= 'A') && ( upc<='Z' ) && ( newattr = attributes[upc - 'A']) ) |
400 | attr->attr = ( colour & 0x20 ) ? attr->attr | newattr : attr->attr & ~newattr; | 418 | attr->attr = ( colour & 0x20 ) ? attr->attr | newattr : attr->attr & ~newattr; |
@@ -404,13 +422,13 @@ docolorize (unsigned char colour, ncurs_attr *attr, ncurs_attr orgattr) { | |||
404 | /* draw arbitrary strings */ | 422 | /* draw arbitrary strings */ |
405 | static int | 423 | static int |
406 | writescr ( WINDOW *win, struct sb_entry *entry ) { | 424 | writescr ( WINDOW *win, struct sb_entry *entry ) { |
407 | unsigned char tmp [64]; | 425 | char tmp [64]; |
408 | int charcount = 0; | 426 | int charcount = 0; |
409 | int i; | 427 | int i; |
410 | int textlen = strlen( entry->what ); | 428 | int textlen = strlen( entry->what ); |
411 | int timelen = ((win == channel)||(win == private)) && usetime ? | 429 | int timelen = ((win == channel)||(win == private)) && usetime ? |
412 | (int)strftime(tmp,64,getformatstr(FS_TIME),localtime(&entry->when)) : 0; | 430 | (int)strftime(tmp,64,getformatstr(FS_TIME),localtime(&entry->when)) : 0; |
413 | unsigned char textbuffer[ textlen+timelen+1 ]; | 431 | char textbuffer[ textlen+timelen+1 ]; |
414 | ncurs_attr attrbuffer[ textlen+timelen+1 ]; | 432 | ncurs_attr attrbuffer[ textlen+timelen+1 ]; |
415 | ncurs_attr orgattr; | 433 | ncurs_attr orgattr; |
416 | 434 | ||
@@ -446,9 +464,9 @@ writescr ( WINDOW *win, struct sb_entry *entry ) { | |||
446 | 464 | ||
447 | /* hilite */ | 465 | /* hilite */ |
448 | if((win == channel)||(win == private)) { /* do not higlight bars */ | 466 | if((win == channel)||(win == private)) { /* do not higlight bars */ |
449 | filt *flt = filterlist; | 467 | filt *flt = filterlist; |
450 | unsigned char *instr = textbuffer; | 468 | char *instr = textbuffer; |
451 | regmatch_t match; | 469 | regmatch_t match; |
452 | int j; | 470 | int j; |
453 | 471 | ||
454 | while( flt ) { | 472 | while( flt ) { |
@@ -494,87 +512,6 @@ writescr ( WINDOW *win, struct sb_entry *entry ) { | |||
494 | } | 512 | } |
495 | 513 | ||
496 | static void | 514 | static void |
497 | writelog_processentry ( FILE *file, struct sb_entry* entry ) | ||
498 | { | ||
499 | char *outtmp; | ||
500 | int outoff = 0; | ||
501 | if( usetime ) { | ||
502 | outtmp = tmpstr+64; | ||
503 | strftime(outtmp,64,getformatstr(FS_TIME),localtime(&entry->when)); | ||
504 | while(*outtmp) | ||
505 | if( *outtmp > 1 ) | ||
506 | tmpstr[outoff++] = *(outtmp++); | ||
507 | else | ||
508 | if( *(++outtmp)) | ||
509 | outtmp++; | ||
510 | } | ||
511 | |||
512 | outtmp = entry->what; | ||
513 | while(*outtmp) | ||
514 | while(*outtmp && ( outoff < TMPSTRSIZE-1) ) { | ||
515 | if( *outtmp > 1 ) | ||
516 | tmpstr[outoff++] = *(outtmp++); | ||
517 | else | ||
518 | if( *(++outtmp)) | ||
519 | outtmp++; | ||
520 | tmpstr[outoff]=0; outoff = 0; | ||
521 | fputs( tmpstr, file ); | ||
522 | } | ||
523 | |||
524 | fputc( '\n', file); | ||
525 | } | ||
526 | |||
527 | void | ||
528 | writelog_i ( FILE *file) | ||
529 | { | ||
530 | if( !private ) { | ||
531 | writelog( file); | ||
532 | } else { | ||
533 | struct sb_entry *now1= sb_pub->last, *prev1 = NULL, *tmp; | ||
534 | struct sb_entry *now2= sb_priv->last, *prev2 = NULL; | ||
535 | fputs( "Interleaved messages:\n\n", file); | ||
536 | while( now1 || now2 ) { | ||
537 | int process; | ||
538 | if( now1 && now2 ) { | ||
539 | process = ( now1->when < now2->when ) ? 1 : 2; | ||
540 | } else { | ||
541 | process = now1 ? 1 : 2; | ||
542 | } | ||
543 | |||
544 | if( process == 1 ) { | ||
545 | writelog_processentry( file, now1 ); | ||
546 | tmp = now1; now1 = (struct sb_entry*)((unsigned long)now1->link ^ (unsigned long)prev1); prev1 = tmp; | ||
547 | } else { | ||
548 | writelog_processentry( file, now2 ); | ||
549 | tmp = now2; now2 = (struct sb_entry*)((unsigned long)now2->link ^ (unsigned long)prev2); prev2 = tmp; | ||
550 | } | ||
551 | } | ||
552 | } | ||
553 | } | ||
554 | |||
555 | void | ||
556 | writelog ( FILE *file ) | ||
557 | { | ||
558 | if( sb_pub->last ) { | ||
559 | struct sb_entry *now = sb_pub->last, *prev = NULL, *tmp; | ||
560 | fputs( "Public messages:\n\n", file); | ||
561 | while( now ) { | ||
562 | writelog_processentry( file, now ); | ||
563 | tmp = now; now = (struct sb_entry*)((unsigned long)now->link ^ (unsigned long)prev); prev = tmp; | ||
564 | } | ||
565 | putc( '\n', file ); | ||
566 | } | ||
567 | if( private && sb_priv->last ) { | ||
568 | struct sb_entry *now = sb_priv->last, *prev = NULL, *tmp; | ||
569 | fputs( "Private messages:\n\n", file); | ||
570 | while( now ) { | ||
571 | writelog_processentry( file, now ); | ||
572 | tmp = now; now = (struct sb_entry*)((unsigned long)now->link ^ (unsigned long)prev); prev = tmp; | ||
573 | } | ||
574 | } | ||
575 | } | ||
576 | |||
577 | static void | ||
578 | resize_output ( ) | 515 | resize_output ( ) |
579 | { | 516 | { |
580 | int outputwidth = (outputwidth_desired + 7 > screensx) ? screensx - 7 : outputwidth_desired; | 517 | int outputwidth = (outputwidth_desired + 7 > screensx) ? screensx - 7 : outputwidth_desired; |
@@ -587,7 +524,9 @@ resize_output ( ) | |||
587 | } | 524 | } |
588 | 525 | ||
589 | static void | 526 | static void |
590 | doscroll( int up ) { | 527 | doscroll ( int up ) { |
528 | togglequery(); | ||
529 | { | ||
591 | WINDOW *destwin = (sb_win && private) ? private : channel; | 530 | WINDOW *destwin = (sb_win && private) ? private : channel; |
592 | struct sb_data *sb = (sb_win && private) ? sb_priv : sb_pub; | 531 | struct sb_data *sb = (sb_win && private) ? sb_priv : sb_pub; |
593 | struct sb_entry *now = sb->entries, *prev = NULL, *tmp; | 532 | struct sb_entry *now = sb->entries, *prev = NULL, *tmp; |
@@ -617,7 +556,14 @@ doscroll( int up ) { | |||
617 | 556 | ||
618 | drawwin(destwin, sb); | 557 | drawwin(destwin, sb); |
619 | wnoutrefresh(destwin); | 558 | wnoutrefresh(destwin); |
620 | if( sb_win && private ) topicline(NULL); else consoleline(NULL); | 559 | |
560 | togglequery(); | ||
561 | |||
562 | if( private && (destwin == channel) ) | ||
563 | topicline( NULL); | ||
564 | else | ||
565 | consoleline( NULL); | ||
566 | } | ||
621 | } | 567 | } |
622 | 568 | ||
623 | 569 | ||
@@ -634,7 +580,7 @@ scrolldown (void) | |||
634 | } | 580 | } |
635 | 581 | ||
636 | void | 582 | void |
637 | scrollwin (vod) | 583 | scrollwin (void) |
638 | { | 584 | { |
639 | if (!sb_win && private && !privwinhidden) sb_win = 1; | 585 | if (!sb_win && private && !privwinhidden) sb_win = 1; |
640 | else sb_win = 0; | 586 | else sb_win = 0; |
@@ -643,7 +589,7 @@ scrollwin (vod) | |||
643 | } | 589 | } |
644 | 590 | ||
645 | void | 591 | void |
646 | growprivwin (vod) { | 592 | growprivwin (void) { |
647 | if( private ) { | 593 | if( private ) { |
648 | if( privwinhidden) | 594 | if( privwinhidden) |
649 | privwinhidden = 0; | 595 | privwinhidden = 0; |
@@ -653,7 +599,7 @@ growprivwin (vod) { | |||
653 | } | 599 | } |
654 | } | 600 | } |
655 | 601 | ||
656 | void toggleprivwin (vod) { | 602 | void toggleprivwin (void) { |
657 | if( outputshown ) { | 603 | if( outputshown ) { |
658 | outputshown = 0; | 604 | outputshown = 0; |
659 | resize(0); | 605 | resize(0); |
@@ -674,7 +620,7 @@ void toggleprivwin (vod) { | |||
674 | } | 620 | } |
675 | 621 | ||
676 | void | 622 | void |
677 | shrinkprivwin (vod) { | 623 | shrinkprivwin (void) { |
678 | if( private && !privwinhidden ) { | 624 | if( private && !privwinhidden ) { |
679 | if( --privheight_desired < 1) privheight_desired = 1; | 625 | if( --privheight_desired < 1) privheight_desired = 1; |
680 | if( privheight_desired > screensy - 5) privheight_desired = screensy - 5; | 626 | if( privheight_desired > screensy - 5) privheight_desired = screensy - 5; |
@@ -778,7 +724,7 @@ forceredraw (void) | |||
778 | if(console) wclear(console); | 724 | if(console) wclear(console); |
779 | if(topic) wclear(topic); | 725 | if(topic) wclear(topic); |
780 | if(private) wclear(private); | 726 | if(private) wclear(private); |
781 | if(channel) wclear( channel ); | 727 | if(channel) wclear(channel ); |
782 | if(output) wclear(output); | 728 | if(output) wclear(output); |
783 | if(input) wclear(input); | 729 | if(input) wclear(input); |
784 | resize(0); | 730 | resize(0); |
@@ -828,6 +774,8 @@ resize (int signal) | |||
828 | * Arrange windows on screen | 774 | * Arrange windows on screen |
829 | *****/ | 775 | *****/ |
830 | 776 | ||
777 | togglequery(); | ||
778 | |||
831 | /* console and input are always there and always 1 line tall */ | 779 | /* console and input are always there and always 1 line tall */ |
832 | wresize(console,1,screensx); | 780 | wresize(console,1,screensx); |
833 | wresize(input,1,screensx); | 781 | wresize(input,1,screensx); |
@@ -882,6 +830,8 @@ resize (int signal) | |||
882 | if(private && !privwinhidden ) | 830 | if(private && !privwinhidden ) |
883 | wnoutrefresh(private); | 831 | wnoutrefresh(private); |
884 | 832 | ||
833 | togglequery(); | ||
834 | |||
885 | /* Resize and draw our message window, render topic and | 835 | /* Resize and draw our message window, render topic and |
886 | console line */ | 836 | console line */ |
887 | if(outputshown) resize_output(); | 837 | if(outputshown) resize_output(); |
@@ -1277,34 +1227,6 @@ initui (void) | |||
1277 | showout( ); | 1227 | showout( ); |
1278 | */ | 1228 | */ |
1279 | 1229 | ||
1280 | if( getintoption( CF_KEEPLOG ) ) { | ||
1281 | unsigned char *logfile = getstroption( CF_LOGFILE ); | ||
1282 | if( logfile && *logfile ) { | ||
1283 | if( *logfile == '~' ) | ||
1284 | logfile = tilde_expand( logfile ); | ||
1285 | vchat_logfile = fopen( logfile, "r+" ); | ||
1286 | if( vchat_logfile ) { | ||
1287 | time_t now; | ||
1288 | long long now_; | ||
1289 | char dst; | ||
1290 | int lenstr; | ||
1291 | while( !feof( vchat_logfile)) { | ||
1292 | if( (fscanf( vchat_logfile, "%016llX%c", (unsigned long long*)&now_, &dst)) && | ||
1293 | ((dst == '0') || (dst == '1'))) | ||
1294 | { | ||
1295 | now = (time_t)now_; | ||
1296 | if(fgets(tmpstr, TMPSTRSIZE, vchat_logfile)) { | ||
1297 | lenstr = strlen( tmpstr ); | ||
1298 | tmpstr[lenstr-1] = '\0'; | ||
1299 | sb_add( dst == '0' ? sb_pub : sb_priv, tmpstr, now); | ||
1300 | } | ||
1301 | } else | ||
1302 | while( !feof( vchat_logfile) && ( fgetc( vchat_logfile ) != '\n')); | ||
1303 | } | ||
1304 | } | ||
1305 | } | ||
1306 | } | ||
1307 | |||
1308 | resize(0); | 1230 | resize(0); |
1309 | } | 1231 | } |
1310 | 1232 | ||
@@ -1314,7 +1236,7 @@ initui (void) | |||
1314 | Enable, when needed | 1236 | Enable, when needed |
1315 | 1237 | ||
1316 | static void | 1238 | static void |
1317 | writecolorized( WINDOW *win, unsigned char *string) { | 1239 | writecolorized( WINDOW *win, char *string) { |
1318 | ncurs_attr old_att, new_att; | 1240 | ncurs_attr old_att, new_att; |
1319 | int i; | 1241 | int i; |
1320 | 1242 | ||
@@ -1333,12 +1255,14 @@ writecolorized( WINDOW *win, unsigned char *string) { | |||
1333 | 1255 | ||
1334 | /* render consoleline to screen */ | 1256 | /* render consoleline to screen */ |
1335 | void | 1257 | void |
1336 | consoleline (unsigned char *message) | 1258 | consoleline (char *message) |
1337 | { | 1259 | { |
1338 | /* clear console, set string (or default), redraw display */ | 1260 | /* clear console, set string (or default), redraw display */ |
1339 | int i; | 1261 | int i; |
1340 | ncurs_attr old_att, new_att; | 1262 | ncurs_attr old_att, new_att; |
1341 | 1263 | ||
1264 | togglequery(); | ||
1265 | |||
1342 | memset( &new_att, 0, sizeof(new_att)); | 1266 | memset( &new_att, 0, sizeof(new_att)); |
1343 | BCOLR_SET( (&new_att), 8 ); | 1267 | BCOLR_SET( (&new_att), 8 ); |
1344 | wmove (console, 0, 0); | 1268 | wmove (console, 0, 0); |
@@ -1370,13 +1294,15 @@ consoleline (unsigned char *message) | |||
1370 | redrawwin(output); | 1294 | redrawwin(output); |
1371 | wnoutrefresh(output); | 1295 | wnoutrefresh(output); |
1372 | } | 1296 | } |
1297 | |||
1298 | togglequery(); | ||
1373 | wnoutrefresh(input); | 1299 | wnoutrefresh(input); |
1374 | doupdate(); | 1300 | doupdate(); |
1375 | } | 1301 | } |
1376 | 1302 | ||
1377 | /* render topicline to screen */ | 1303 | /* render topicline to screen */ |
1378 | void | 1304 | void |
1379 | topicline (unsigned char *message) | 1305 | topicline (char *message) |
1380 | { | 1306 | { |
1381 | int i; | 1307 | int i; |
1382 | ncurs_attr old_att, new_att; | 1308 | ncurs_attr old_att, new_att; |
@@ -1384,6 +1310,8 @@ topicline (unsigned char *message) | |||
1384 | if( !topic ) | 1310 | if( !topic ) |
1385 | return; | 1311 | return; |
1386 | 1312 | ||
1313 | togglequery(); | ||
1314 | |||
1387 | memset( &new_att, 0, sizeof(new_att)); | 1315 | memset( &new_att, 0, sizeof(new_att)); |
1388 | BCOLR_SET( (&new_att), 8 ); | 1316 | BCOLR_SET( (&new_att), 8 ); |
1389 | 1317 | ||
@@ -1409,6 +1337,8 @@ topicline (unsigned char *message) | |||
1409 | redrawwin(output); | 1337 | redrawwin(output); |
1410 | wnoutrefresh(output); | 1338 | wnoutrefresh(output); |
1411 | } | 1339 | } |
1340 | |||
1341 | togglequery(); | ||
1412 | wnoutrefresh(input); | 1342 | wnoutrefresh(input); |
1413 | doupdate(); | 1343 | doupdate(); |
1414 | } | 1344 | } |
@@ -1421,8 +1351,6 @@ exitui (void) | |||
1421 | rl_callback_handler_remove (); | 1351 | rl_callback_handler_remove (); |
1422 | endwin (); | 1352 | endwin (); |
1423 | ui_init = 0; | 1353 | ui_init = 0; |
1424 | if( vchat_logfile ) | ||
1425 | fclose( vchat_logfile ); | ||
1426 | } | 1354 | } |
1427 | } | 1355 | } |
1428 | 1356 | ||
@@ -1465,7 +1393,7 @@ static void | |||
1465 | vcnredraw (void) | 1393 | vcnredraw (void) |
1466 | { | 1394 | { |
1467 | int i; | 1395 | int i; |
1468 | unsigned char *passbof="-*-*-*-*-*-*-"; | 1396 | char *passbof="-*-*-*-*-*-*-"; |
1469 | 1397 | ||
1470 | /* wipe input line and reset cursor */ | 1398 | /* wipe input line and reset cursor */ |
1471 | wmove(input, 0, 0); | 1399 | wmove(input, 0, 0); |
@@ -1486,7 +1414,7 @@ int | |||
1486 | passprompt (char *buf, int size, int rwflag, void *userdata) | 1414 | passprompt (char *buf, int size, int rwflag, void *userdata) |
1487 | { | 1415 | { |
1488 | int i; | 1416 | int i; |
1489 | unsigned char *passphrase = NULL; | 1417 | char *passphrase = NULL; |
1490 | 1418 | ||
1491 | /* use special non-revealing redraw function */ | 1419 | /* use special non-revealing redraw function */ |
1492 | /* FIXME: passphrase isn't protected against e.g. swapping */ | 1420 | /* FIXME: passphrase isn't protected against e.g. swapping */ |
@@ -1619,7 +1547,7 @@ clearfilters( char colour ) { | |||
1619 | 1547 | ||
1620 | /* removes filter pattern */ | 1548 | /* removes filter pattern */ |
1621 | void | 1549 | void |
1622 | removefilter( unsigned char *tail ) { | 1550 | removefilter( char *tail ) { |
1623 | int rmv = 0, val; | 1551 | int rmv = 0, val; |
1624 | char* end; | 1552 | char* end; |
1625 | 1553 | ||
@@ -1627,8 +1555,8 @@ removefilter( unsigned char *tail ) { | |||
1627 | 1555 | ||
1628 | rmv = removefromfilterlist( test_simplerm, (void *)tail, 0 ); | 1556 | rmv = removefromfilterlist( test_simplerm, (void *)tail, 0 ); |
1629 | if(!rmv) { | 1557 | if(!rmv) { |
1630 | val = strtol((char*)tail, &end, 10); | 1558 | val = strtol(tail, &end, 10); |
1631 | if( (tail != (unsigned char*)end) && (!*end) ) | 1559 | if( (tail != end) && (!*end) ) |
1632 | rmv = removefromfilterlist( test_numericrm, (void *)val, 0); | 1560 | rmv = removefromfilterlist( test_numericrm, (void *)val, 0); |
1633 | } | 1561 | } |
1634 | 1562 | ||
@@ -1646,7 +1574,7 @@ static unsigned int uniqueidpool = 1; | |||
1646 | 1574 | ||
1647 | /* returns unique id for filter pattern or 0 for failure */ | 1575 | /* returns unique id for filter pattern or 0 for failure */ |
1648 | unsigned int | 1576 | unsigned int |
1649 | addfilter( char colour, unsigned char *regex ) { | 1577 | addfilter( char colour, char *regex ) { |
1650 | filt *newflt = malloc( sizeof(filt)), **flt = &filterlist; | 1578 | filt *newflt = malloc( sizeof(filt)), **flt = &filterlist; |
1651 | 1579 | ||
1652 | if( !newflt ) return 0; | 1580 | if( !newflt ) return 0; |
@@ -1753,3 +1681,31 @@ listfilters( void ) { | |||
1753 | } | 1681 | } |
1754 | showout(); | 1682 | showout(); |
1755 | } | 1683 | } |
1684 | |||
1685 | void | ||
1686 | handlequery( char *tail ) { | ||
1687 | if( *tail ) { | ||
1688 | // ".m %s " -> string + 4 | ||
1689 | if( querypartner && private ) { | ||
1690 | WINDOW *tmp= private; private = channel; channel = tmp; | ||
1691 | } | ||
1692 | querypartner = (char *)realloc( querypartner, 5 + strlen( tail )); | ||
1693 | if( querypartner ) { | ||
1694 | snprintf( querypartner, 5 + strlen( tail ), ".m %s ", tail ); | ||
1695 | if( private ) { | ||
1696 | WINDOW *tmp= private; private = channel; channel = tmp; | ||
1697 | } | ||
1698 | } | ||
1699 | resize( 0 ); | ||
1700 | } else { | ||
1701 | // QUERY ends | ||
1702 | if( querypartner ) { | ||
1703 | free( querypartner ); | ||
1704 | querypartner = NULL; | ||
1705 | if( private ) { | ||
1706 | WINDOW *tmp= private; private = channel; channel = tmp; | ||
1707 | } | ||
1708 | resize( 0 ); | ||
1709 | } | ||
1710 | } | ||
1711 | } | ||
diff --git a/vchat-user.c b/vchat-user.c index 1e14112..65b32b7 100755 --- a/vchat-user.c +++ b/vchat-user.c | |||
@@ -26,20 +26,20 @@ | |||
26 | 26 | ||
27 | struct user | 27 | struct user |
28 | { | 28 | { |
29 | unsigned char *nick; /* nick of user */ | 29 | char *nick; /* nick of user */ |
30 | int chan; /* channel user is on */ | 30 | int chan; /* channel user is on */ |
31 | int chan_valid; /* are we sure he is? */ | 31 | int chan_valid; /* are we sure he is? */ |
32 | int client_pv; /* client protocol version */ | 32 | int client_pv; /* client protocol version */ |
33 | int messaged; /* did we message with this user? */ | 33 | int messaged; /* did we message with this user? */ |
34 | struct user *next; /* next user in linked list */ | 34 | struct user *next;/* next user in linked list */ |
35 | }; | 35 | }; |
36 | 36 | ||
37 | /* version of this module */ | 37 | /* version of this module */ |
38 | unsigned char *vchat_us_version = "$Id$"; | 38 | char *vchat_us_version = "$Id$"; |
39 | 39 | ||
40 | /* externally used variables */ | 40 | /* externally used variables */ |
41 | /* current nick */ | 41 | /* current nick */ |
42 | unsigned char *nick = NULL; | 42 | char *nick = NULL; |
43 | /* current channel */ | 43 | /* current channel */ |
44 | int chan = 0; | 44 | int chan = 0; |
45 | /* userlist */ | 45 | /* userlist */ |
@@ -47,7 +47,7 @@ user *nicks = NULL; | |||
47 | 47 | ||
48 | /* add user to userlist */ | 48 | /* add user to userlist */ |
49 | void | 49 | void |
50 | ul_add (unsigned char *name, int ignored) | 50 | ul_add (char *name, int ignored) |
51 | { | 51 | { |
52 | user *tmp = NULL; | 52 | user *tmp = NULL; |
53 | 53 | ||
@@ -100,7 +100,7 @@ ul_add (unsigned char *name, int ignored) | |||
100 | 100 | ||
101 | /* delete user from userlist */ | 101 | /* delete user from userlist */ |
102 | void | 102 | void |
103 | ul_del (unsigned char *name, int ignored) | 103 | ul_del (char *name, int ignored) |
104 | { | 104 | { |
105 | user *tmp = NULL, *ltmp = NULL; | 105 | user *tmp = NULL, *ltmp = NULL; |
106 | 106 | ||
@@ -143,7 +143,7 @@ ul_del (unsigned char *name, int ignored) | |||
143 | 143 | ||
144 | /* let user join a channel */ | 144 | /* let user join a channel */ |
145 | void | 145 | void |
146 | ul_join (unsigned char *name, int channel) | 146 | ul_join (char *name, int channel) |
147 | { | 147 | { |
148 | /* is it this client? handle and return */ | 148 | /* is it this client? handle and return */ |
149 | if (nick && !strcmp (nick, name)) | 149 | if (nick && !strcmp (nick, name)) |
@@ -157,7 +157,7 @@ ul_join (unsigned char *name, int channel) | |||
157 | } | 157 | } |
158 | 158 | ||
159 | user * | 159 | user * |
160 | ul_finduser (unsigned char *name) { | 160 | ul_finduser (char *name) { |
161 | user *tmp = nicks; | 161 | user *tmp = nicks; |
162 | snprintf( tmpstr, TMPSTRSIZE, "%s:", name); | 162 | snprintf( tmpstr, TMPSTRSIZE, "%s:", name); |
163 | 163 | ||
@@ -175,11 +175,11 @@ ul_finduser (unsigned char *name) { | |||
175 | return NULL; | 175 | return NULL; |
176 | } | 176 | } |
177 | 177 | ||
178 | unsigned char * | 178 | char * |
179 | ul_matchuser( unsigned char *regex) { | 179 | ul_matchuser( char *regex) { |
180 | user *tmp = nicks; | 180 | user *tmp = nicks; |
181 | unsigned char *dest = tmpstr; | 181 | char *dest = tmpstr; |
182 | regex_t preg; | 182 | regex_t preg; |
183 | 183 | ||
184 | *dest = 0; | 184 | *dest = 0; |
185 | if( !regcomp( &preg, regex, REG_ICASE | REG_EXTENDED | REG_NEWLINE)) { | 185 | if( !regcomp( &preg, regex, REG_ICASE | REG_EXTENDED | REG_NEWLINE)) { |
@@ -212,7 +212,7 @@ ul_usertofront( user *who ) { | |||
212 | } | 212 | } |
213 | 213 | ||
214 | void | 214 | void |
215 | ul_msgto (unsigned char *name) { | 215 | ul_msgto (char *name) { |
216 | user *tmp = ul_finduser(name); | 216 | user *tmp = ul_finduser(name); |
217 | 217 | ||
218 | if (tmp) { | 218 | if (tmp) { |
@@ -222,7 +222,7 @@ ul_msgto (unsigned char *name) { | |||
222 | } | 222 | } |
223 | 223 | ||
224 | void | 224 | void |
225 | ul_msgfrom (unsigned char *name) { | 225 | ul_msgfrom (char *name) { |
226 | user *tmp = ul_finduser(name); | 226 | user *tmp = ul_finduser(name); |
227 | 227 | ||
228 | if (tmp) { | 228 | if (tmp) { |
@@ -233,7 +233,7 @@ ul_msgfrom (unsigned char *name) { | |||
233 | 233 | ||
234 | /* set channel of user */ | 234 | /* set channel of user */ |
235 | void | 235 | void |
236 | ul_moveuser (unsigned char *name, int channel) { | 236 | ul_moveuser (char *name, int channel) { |
237 | user *tmp = ul_finduser(name); | 237 | user *tmp = ul_finduser(name); |
238 | 238 | ||
239 | if (tmp) { | 239 | if (tmp) { |
@@ -248,7 +248,7 @@ ul_moveuser (unsigned char *name, int channel) { | |||
248 | 248 | ||
249 | /* let user leave a channel */ | 249 | /* let user leave a channel */ |
250 | void | 250 | void |
251 | ul_leave (unsigned char *name, int channel) | 251 | ul_leave (char *name, int channel) |
252 | { | 252 | { |
253 | user *tmp = ul_finduser(name); | 253 | user *tmp = ul_finduser(name); |
254 | /* is it this client? handle and return */ | 254 | /* is it this client? handle and return */ |
@@ -271,7 +271,7 @@ ul_leave (unsigned char *name, int channel) | |||
271 | 271 | ||
272 | /* let user change nick */ | 272 | /* let user change nick */ |
273 | void | 273 | void |
274 | ul_nickchange (unsigned char *oldnick, unsigned char *newnick) | 274 | ul_nickchange (char *oldnick, char *newnick) |
275 | { | 275 | { |
276 | user *tmp = ul_finduser(oldnick); | 276 | user *tmp = ul_finduser(oldnick); |
277 | /* is it this client? handle and return */ | 277 | /* is it this client? handle and return */ |
@@ -314,19 +314,19 @@ ul_clear (void) | |||
314 | #endif | 314 | #endif |
315 | } | 315 | } |
316 | 316 | ||
317 | int ulnc_casenick(user *tmp, const unsigned char *text, int len, int value) { | 317 | int ulnc_casenick(user *tmp, const char *text, int len, int value) { |
318 | return (!strncmp(tmp->nick, text, len)); | 318 | return (!strncmp(tmp->nick, text, len)); |
319 | } | 319 | } |
320 | 320 | ||
321 | int ulnc_ncasenick(user *tmp, const unsigned char *text, int len, int value) { | 321 | int ulnc_ncasenick(user *tmp, const char *text, int len, int value) { |
322 | return (!strncasecmp(tmp->nick, text, len)); | 322 | return (!strncasecmp(tmp->nick, text, len)); |
323 | } | 323 | } |
324 | 324 | ||
325 | unsigned char * | 325 | char * |
326 | ulnc_complete (const unsigned char *text, int state, int value, int (*checkfn)(user *,const unsigned char *,int,int)) { | 326 | ulnc_complete (const char *text, int state, int value, int (*checkfn)(user *,const char *,int,int)) { |
327 | static int len; | 327 | static int len; |
328 | static user *tmp; | 328 | static user *tmp; |
329 | unsigned char *name; | 329 | char *name; |
330 | 330 | ||
331 | /* first round? reset pointers! */ | 331 | /* first round? reset pointers! */ |
332 | if (!state) | 332 | if (!state) |
@@ -355,11 +355,11 @@ ulnc_complete (const unsigned char *text, int state, int value, int (*checkfn)(u | |||
355 | } | 355 | } |
356 | 356 | ||
357 | /* nick completion functions for readline in vchat-ui.c */ | 357 | /* nick completion functions for readline in vchat-ui.c */ |
358 | unsigned char * | 358 | char * |
359 | ul_nickcomp (const unsigned char *text, int state) | 359 | ul_nickcomp (const char *text, int state) |
360 | { | 360 | { |
361 | int ncasemode = 1; | 361 | int ncasemode = 1; |
362 | unsigned char *name = NULL; | 362 | char *name = NULL; |
363 | if (!state) ncasemode = 0; | 363 | if (!state) ncasemode = 0; |
364 | if (!ncasemode) { | 364 | if (!ncasemode) { |
365 | name = ulnc_complete(text,state,0,ulnc_casenick); | 365 | name = ulnc_complete(text,state,0,ulnc_casenick); |
@@ -373,20 +373,20 @@ ul_nickcomp (const unsigned char *text, int state) | |||
373 | return NULL; | 373 | return NULL; |
374 | } | 374 | } |
375 | 375 | ||
376 | int ulnc_casenickc(user *tmp, const unsigned char *text, int len, int value) { | 376 | int ulnc_casenickc(user *tmp, const char *text, int len, int value) { |
377 | return (!strncmp(tmp->nick, text, len) && (tmp->chan_valid) && (tmp->chan == value)); | 377 | return (!strncmp(tmp->nick, text, len) && (tmp->chan_valid) && (tmp->chan == value)); |
378 | } | 378 | } |
379 | 379 | ||
380 | int ulnc_ncasenickc(user *tmp, const unsigned char *text, int len, int value) { | 380 | int ulnc_ncasenickc(user *tmp, const char *text, int len, int value) { |
381 | return (!strncasecmp(tmp->nick, text, len) && (tmp->chan_valid) && (tmp->chan == value)); | 381 | return (!strncasecmp(tmp->nick, text, len) && (tmp->chan_valid) && (tmp->chan == value)); |
382 | } | 382 | } |
383 | 383 | ||
384 | /* nick completion for channel, used by vchat-ui.c */ | 384 | /* nick completion for channel, used by vchat-ui.c */ |
385 | unsigned char * | 385 | char * |
386 | ul_cnickcomp (const unsigned char *text, int state) | 386 | ul_cnickcomp (const char *text, int state) |
387 | { | 387 | { |
388 | int ncasemode = 1; | 388 | int ncasemode = 1; |
389 | static unsigned char *name = NULL; | 389 | static char *name = NULL; |
390 | 390 | ||
391 | if (!state) ncasemode = 0; | 391 | if (!state) ncasemode = 0; |
392 | if (!ncasemode) { | 392 | if (!ncasemode) { |
@@ -402,20 +402,20 @@ ul_cnickcomp (const unsigned char *text, int state) | |||
402 | return NULL; | 402 | return NULL; |
403 | } | 403 | } |
404 | 404 | ||
405 | int ulnc_casenickm(user *tmp, const unsigned char *text, int len, int value) { | 405 | int ulnc_casenickm(user *tmp, const char *text, int len, int value) { |
406 | return (!strncmp(tmp->nick, text, len) && (tmp->messaged)); | 406 | return (!strncmp(tmp->nick, text, len) && (tmp->messaged)); |
407 | } | 407 | } |
408 | 408 | ||
409 | int ulnc_ncasenickm(user *tmp, const unsigned char *text, int len, int value) { | 409 | int ulnc_ncasenickm(user *tmp, const char *text, int len, int value) { |
410 | return (!strncasecmp(tmp->nick, text, len) && (tmp->messaged)); | 410 | return (!strncasecmp(tmp->nick, text, len) && (tmp->messaged)); |
411 | } | 411 | } |
412 | 412 | ||
413 | /* nick completion for channel, used by vchat-ui.c */ | 413 | /* nick completion for channel, used by vchat-ui.c */ |
414 | unsigned char * | 414 | char * |
415 | ul_mnickcomp (const unsigned char *text, int state) | 415 | ul_mnickcomp (const char *text, int state) |
416 | { | 416 | { |
417 | int ncasemode = 1; | 417 | int ncasemode = 1; |
418 | static unsigned char *name = NULL; | 418 | static char *name = NULL; |
419 | 419 | ||
420 | if (!state) ncasemode = 0; | 420 | if (!state) ncasemode = 0; |
421 | if (!ncasemode) { | 421 | if (!ncasemode) { |
@@ -26,20 +26,20 @@ typedef enum { SM_IGNORE, SM_INFO, SM_USERINFO, SM_CHANNEL, SM_ERROR } smtype; | |||
26 | /* servermessage structure */ | 26 | /* servermessage structure */ |
27 | struct servermessage | 27 | struct servermessage |
28 | { | 28 | { |
29 | unsigned char id[4]; /* three-character message id */ | 29 | char id[4]; /* three-character message id */ |
30 | smtype type; /* message type */ | 30 | smtype type; /* message type */ |
31 | void (*funct) (unsigned char *); /* function used by client */ | 31 | void (*funct) (char *); /* function used by client */ |
32 | void (*hook) (unsigned char *); /* function hook for scripting */ | 32 | void (*hook) (char *); /* function hook for scripting */ |
33 | }; | 33 | }; |
34 | typedef struct servermessage servermessage; | 34 | typedef struct servermessage servermessage; |
35 | 35 | ||
36 | /* configuration types and variable numbers */ | 36 | /* configuration types and variable numbers */ |
37 | typedef enum { CO_NIL, CO_STR, CO_INT } conftype; | 37 | typedef enum { CO_NIL, CO_STR, CO_INT } conftype; |
38 | typedef enum { CF_NIL, CF_NICK, CF_FROM, CF_SERVERHOST, CF_SERVERPORT, | 38 | typedef enum { CF_NIL, CF_NICK, CF_FROM, CF_SERVERHOST, CF_SERVERPORT, |
39 | CF_CIPHERSUITE, CF_CONFIGFILE, CF_CERTFILE, CF_KEYFILE, CF_FORMFILE, CF_LOGFILE, | 39 | CF_CIPHERSUITE, CF_CONFIGFILE, CF_CERTFILE, CF_KEYFILE, CF_FORMFILE, |
40 | CF_USESSL, CF_USECERT, CF_PRIVHEIGHT, CF_HSCROLL, CF_CHANNEL, CF_USETIME, | 40 | CF_USESSL, CF_USECERT, CF_PRIVHEIGHT, CF_HSCROLL, CF_CHANNEL, CF_USETIME, |
41 | CF_USETOPIC, CF_SCROLLBPRIV, CF_SCROLLBACK, CF_SCROLLBPRIVT, CF_SCROLLBACKT, | 41 | CF_USETOPIC, CF_SCROLLBPRIV, CF_SCROLLBACK, CF_SCROLLBPRIVT, CF_SCROLLBACKT, |
42 | CF_KEEPLOG, CF_ENCODING, CF_BELLPRIV } confopt; | 42 | CF_ENCODING, CF_BELLPRIV } confopt; |
43 | 43 | ||
44 | /* format strings */ | 44 | /* format strings */ |
45 | typedef enum { FS_PLAIN, FS_CHAN, FS_PRIV, FS_SERV, FS_GLOB, FS_DBG, FS_ERR, | 45 | typedef enum { FS_PLAIN, FS_CHAN, FS_PRIV, FS_SERV, FS_GLOB, FS_DBG, FS_ERR, |
@@ -54,14 +54,14 @@ FS_SBINF, FS_MISSTYPED, FS_UNKNCMD, FS_BADREGEX, FS_ERR_STRING } formtstr; | |||
54 | /* configoption structure */ | 54 | /* configoption structure */ |
55 | struct configoption | 55 | struct configoption |
56 | { | 56 | { |
57 | confopt id; | 57 | confopt id; |
58 | conftype type; | 58 | conftype type; |
59 | unsigned char *varname; | 59 | char *varname; |
60 | unsigned char *defaultvalue; | 60 | char *defaultvalue; |
61 | unsigned char *value; | 61 | char *value; |
62 | union { | 62 | union { |
63 | unsigned char **pstr; | 63 | char **pstr; |
64 | int *pint; | 64 | unsigned int *pint; |
65 | } localvar; | 65 | } localvar; |
66 | }; | 66 | }; |
67 | 67 | ||
@@ -71,74 +71,74 @@ typedef struct configoption configoption; | |||
71 | struct formatstring | 71 | struct formatstring |
72 | { | 72 | { |
73 | formtstr id; | 73 | formtstr id; |
74 | unsigned char *idstring; | 74 | char *idstring; |
75 | unsigned char *formatstr; | 75 | char *formatstr; |
76 | }; | 76 | }; |
77 | typedef struct formatstring formatstring; | 77 | typedef struct formatstring formatstring; |
78 | 78 | ||
79 | /* static tmpstr in all modules */ | 79 | /* static tmpstr in all modules */ |
80 | #define TMPSTRSIZE 1024 | 80 | #define TMPSTRSIZE 1024 |
81 | static unsigned char tmpstr[TMPSTRSIZE]; | 81 | static char tmpstr[TMPSTRSIZE]; |
82 | 82 | ||
83 | extern unsigned char *nick; | 83 | extern char *nick; |
84 | extern int chan; | 84 | extern int chan; |
85 | 85 | ||
86 | extern unsigned int loggedin; | 86 | extern unsigned int loggedin; |
87 | 87 | ||
88 | /* vchat-client.c */ | 88 | /* vchat-client.c */ |
89 | #define ERRSTRSIZE 1024 | 89 | #define ERRSTRSIZE 1024 |
90 | extern unsigned char errstr[]; | 90 | extern char errstr[]; |
91 | extern unsigned char *vchat_cl_version; | 91 | extern char *vchat_cl_version; |
92 | void cleanup(int signal); | 92 | void cleanup(int signal); |
93 | 93 | ||
94 | /* configuration helper funktions from vchat-client.c */ | 94 | /* configuration helper funktions from vchat-client.c */ |
95 | unsigned char *getformatstr (formtstr id); | 95 | char *getformatstr (formtstr id); |
96 | unsigned char *getstroption (confopt option); | 96 | char *getstroption (confopt option); |
97 | void setstroption (confopt option, unsigned char *string); | 97 | void setstroption (confopt option, char *string); |
98 | int getintoption (confopt option); | 98 | int getintoption (confopt option); |
99 | void setintoption (confopt option, int value); | 99 | void setintoption (confopt option, int value); |
100 | 100 | ||
101 | /* vchat-user.c */ | 101 | /* vchat-user.c */ |
102 | extern unsigned char *vchat_us_version; | 102 | extern char *vchat_us_version; |
103 | 103 | ||
104 | /* add / delete user */ | 104 | /* add / delete user */ |
105 | void ul_add (unsigned char *nick, int ignored); | 105 | void ul_add (char *nick, int ignored); |
106 | void ul_del (unsigned char *nick, int ignored); | 106 | void ul_del (char *nick, int ignored); |
107 | 107 | ||
108 | /* clear userlist */ | 108 | /* clear userlist */ |
109 | void ul_clear (); | 109 | void ul_clear (); |
110 | 110 | ||
111 | /* channel join / leave */ | 111 | /* channel join / leave */ |
112 | void ul_join (unsigned char *nick, int channel); | 112 | void ul_join (char *nick, int channel); |
113 | void ul_leave (unsigned char *nick, int channel); | 113 | void ul_leave (char *nick, int channel); |
114 | 114 | ||
115 | /* nickchange */ | 115 | /* nickchange */ |
116 | void ul_nickchange (unsigned char *oldnick, unsigned char *newnick); | 116 | void ul_nickchange (char *oldnick, char *newnick); |
117 | 117 | ||
118 | /* place user in channel */ | 118 | /* place user in channel */ |
119 | void ul_moveuser (unsigned char *nick, int channel); | 119 | void ul_moveuser (char *nick, int channel); |
120 | 120 | ||
121 | /* message nick completion */ | 121 | /* message nick completion */ |
122 | void ul_msgto (unsigned char *nick); | 122 | void ul_msgto (char *nick); |
123 | void ul_msgfrom (unsigned char *nick); | 123 | void ul_msgfrom (char *nick); |
124 | 124 | ||
125 | /* nick-completion for vchat-ui.c */ | 125 | /* nick-completion for vchat-ui.c */ |
126 | unsigned char *ul_nickcomp (const unsigned char *text, int state); | 126 | char *ul_nickcomp (const char *text, int state); |
127 | unsigned char *ul_cnickcomp (const unsigned char *text, int state); | 127 | char *ul_cnickcomp (const char *text, int state); |
128 | unsigned char *ul_mnickcomp (const unsigned char *text, int state); | 128 | char *ul_mnickcomp (const char *text, int state); |
129 | 129 | ||
130 | /* try to find user by substring */ | 130 | /* try to find user by substring */ |
131 | unsigned char *ul_matchuser ( unsigned char *substr); | 131 | char *ul_matchuser (char *substr); |
132 | 132 | ||
133 | /* vchat-ui.c */ | 133 | /* vchat-ui.c */ |
134 | extern unsigned char *vchat_ui_version; | 134 | extern char *vchat_ui_version; |
135 | 135 | ||
136 | /* topic and console strings */ | 136 | /* topic and console strings */ |
137 | #define TOPICSTRSIZE 1024 | 137 | #define TOPICSTRSIZE 1024 |
138 | #define CONSOLESTRSIZE 1024 | 138 | #define CONSOLESTRSIZE 1024 |
139 | extern unsigned char topicstr[]; | 139 | extern char topicstr[]; |
140 | extern unsigned char consolestr[]; | 140 | extern char consolestr[]; |
141 | extern unsigned char *encoding; | 141 | extern char *encoding; |
142 | 142 | ||
143 | /* init / exit functions */ | 143 | /* init / exit functions */ |
144 | void initui (void); | 144 | void initui (void); |
@@ -148,22 +148,20 @@ void exitui (void); | |||
148 | void userinput (void); | 148 | void userinput (void); |
149 | 149 | ||
150 | /* display various messages */ | 150 | /* display various messages */ |
151 | int writechan (unsigned char *str); | 151 | int writechan (char *str); |
152 | int writepriv (unsigned char *str, int maybeep ); | 152 | int writepriv (char *str, int maybeep ); |
153 | void writeout (unsigned char *str); | 153 | void writeout (char *str); |
154 | void showout (void); | 154 | void showout (void); |
155 | void flushout (void); | 155 | void flushout (void); |
156 | #define msgout(STR) {flushout();writeout(STR);showout();} | 156 | #define msgout(STR) {flushout();writeout(STR);showout();} |
157 | void hideout (void); | 157 | void hideout (void); |
158 | int writecf (formtstr id, unsigned char *str); | 158 | int writecf (formtstr id, char *str); |
159 | void writelog (FILE *file); | ||
160 | void writelog_i(FILE *file); | ||
161 | 159 | ||
162 | extern int outputcountdown; | 160 | extern int outputcountdown; |
163 | 161 | ||
164 | /* update console / topic window */ | 162 | /* update console / topic window */ |
165 | void consoleline (unsigned char *); | 163 | void consoleline (char *); |
166 | void topicline (unsigned char *); | 164 | void topicline (char *); |
167 | 165 | ||
168 | /* prompt for nick or password */ | 166 | /* prompt for nick or password */ |
169 | void nickprompt (void); | 167 | void nickprompt (void); |
@@ -172,40 +170,42 @@ int passprompt (char *buf, int size, int rwflag, void *userdata); | |||
172 | /* filter functions */ | 170 | /* filter functions */ |
173 | void refilterscrollback( void); | 171 | void refilterscrollback( void); |
174 | 172 | ||
175 | unsigned int addfilter ( char colour, unsigned char *regex ); | 173 | unsigned int addfilter ( char colour, char *regex ); |
176 | void removefilter ( unsigned char *line ); | 174 | void removefilter ( char *line ); |
177 | void listfilters ( void ); | 175 | void listfilters ( void ); |
178 | void clearfilters ( char colour ); | 176 | void clearfilters ( char colour ); |
179 | 177 | ||
178 | void handlequery ( char *line ); | ||
179 | |||
180 | /* vchat-protocol.c */ | 180 | /* vchat-protocol.c */ |
181 | extern unsigned char *vchat_io_version; | 181 | extern char *vchat_io_version; |
182 | 182 | ||
183 | /* connect/disconnect */ | 183 | /* connect/disconnect */ |
184 | int vcconnect (unsigned char *server, unsigned char *port); | 184 | int vcconnect (char *server, char *port); |
185 | void vcdisconnect (); | 185 | void vcdisconnect (); |
186 | 186 | ||
187 | /* network I/O */ | 187 | /* network I/O */ |
188 | void networkinput (void); | 188 | void networkinput (void); |
189 | void networkoutput (unsigned char *); | 189 | void networkoutput (char *); |
190 | 190 | ||
191 | /* helpers for vchat-user.c */ | 191 | /* helpers for vchat-user.c */ |
192 | void ownjoin (int channel); | 192 | void ownjoin (int channel); |
193 | void ownleave (int channel); | 193 | void ownleave (int channel); |
194 | void ownnickchange (unsigned char *newnick); | 194 | void ownnickchange (char *newnick); |
195 | 195 | ||
196 | /* vchat-commands.c */ | 196 | /* vchat-commands.c */ |
197 | extern unsigned char *vchat_cm_version; | 197 | extern char *vchat_cm_version; |
198 | void command_version ( unsigned char *tail); | 198 | void command_version ( char *tail); |
199 | 199 | ||
200 | /* user input */ | 200 | /* user input */ |
201 | void handleline (unsigned char *); | 201 | void handleline (char *); |
202 | 202 | ||
203 | /* struct for defining "/command" handlers */ | 203 | /* struct for defining "/command" handlers */ |
204 | typedef struct { | 204 | typedef struct { |
205 | int number; | 205 | int number; |
206 | unsigned char name[8]; | 206 | char name[8]; |
207 | int len; | 207 | int len; |
208 | void (*handler)(unsigned char *); | 208 | void (*handler)(char *); |
209 | unsigned char *short_help; | 209 | char *short_help; |
210 | unsigned char *help; | 210 | char *help; |
211 | } commandentry; | 211 | } commandentry; |