diff options
| author | erdgeist <> | 2006-01-26 18:40:30 +0000 |
|---|---|---|
| committer | erdgeist <> | 2006-01-26 18:40:30 +0000 |
| commit | 57689e698230030803c872072a03329fdd4fecc6 (patch) | |
| tree | b4f8671dbe04741be93091e99eb3c6aa81b9bebd /vchat-ui.c | |
| parent | 4413fb15bec35744c06ac3cfce2ae2bfa6953ae1 (diff) | |
unsigned char tidy up, query mode
Diffstat (limited to 'vchat-ui.c')
| -rwxr-xr-x | vchat-ui.c | 284 |
1 files changed, 120 insertions, 164 deletions
| @@ -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 | } | ||
