Changes in / [5f3168a:680ed23]
- Files:
-
- 1 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile.in
r9c7a701 r5ff830a 26 26 keypress.c keymap.c keybinding.c cmd.c context.c zcrypt.c \ 27 27 aim.c buddy.c buddylist.c timer.c style.c stylefunc.c errqueue.c \ 28 zbuddylist.c muxevents.c popexec.c obarray.c select.c wcwidth.c \ 29 glib_compat.c 28 zbuddylist.c muxevents.c popexec.c obarray.c wcwidth.c glib_compat.c 30 29 OWL_SRC = owl.c 31 30 TESTER_SRC = tester.c -
functions.c
r6b580b0 raf1920fd 798 798 owl_global_set_curmsg(&g, curmsg+1); 799 799 } 800 /* owl_mainwin_redisplay(owl_global_get_mainwin(&g)); */800 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 801 801 owl_global_set_direction_downwards(&g); 802 802 } -
global.c
r9c7a701 reebef19 117 117 118 118 owl_message_init_fmtext_cache(); 119 owl_list_create(&(g->dispatchlist));120 119 } 121 120 … … 933 932 return owl_obarray_insert(&(g->obarray), string); 934 933 } 935 936 owl_list *owl_global_get_dispatchlist(owl_global *g)937 {938 return &(g->dispatchlist);939 } -
keys.c
ra6a4155 rfac5463 44 44 BIND_CMD("M-f", "edit:move-next-word", ""); 45 45 BIND_CMD("M-O 3 C", "edit:move-next-word", ""); 46 BIND_CMD("M-LEFT", "edit:move-next-word", "");47 46 BIND_CMD("M-b", "edit:move-prev-word", ""); 48 47 BIND_CMD("M-O 3 D", "edit:move-prev-word", ""); 49 BIND_CMD("M-RIGHT", "edit:move-prev-word", "");50 48 51 49 BIND_CMD("LEFT", "edit:move-left", ""); -
owl.c
r9c7a701 r6fe806a 46 46 #include <sys/param.h> 47 47 #include <sys/types.h> 48 #include <sys/time.h>49 48 #include <termios.h> 50 49 #include <sys/stat.h> … … 62 61 #endif 63 62 64 #define STDIN 065 66 63 static const char fileIdent[] = "$Id$"; 67 64 … … 74 71 owl_popwin *pw; 75 72 int ret, initialsubs, debug, argcsave, followlast; 73 owl_input j; 76 74 int newmsgs, nexttimediff; 77 75 struct sigaction sigact; … … 216 214 owl_global_set_haveaim(&g); 217 215 218 /* prepare stdin dispatch */219 {220 owl_dispatch *d = owl_malloc(sizeof(owl_dispatch));221 d->fd = STDIN;222 d->cfunc = &owl_process_input;223 d->pfunc = NULL;224 owl_select_add_dispatch(d);225 }226 227 216 #ifdef HAVE_LIBZEPHYR 228 217 /* zephyr init */ 229 218 ret=owl_zephyr_initialize(); 230 if (!ret) { 231 owl_dispatch *d = owl_malloc(sizeof(owl_dispatch)); 232 d->fd = ZGetFD(); 233 d->cfunc = &owl_zephyr_process_events; 234 d->pfunc = NULL; 235 owl_select_add_dispatch(d); 236 owl_global_set_havezephyr(&g); 237 } 238 219 if (!ret) 220 owl_global_set_havezephyr(&g); 239 221 #endif 240 222 … … 451 433 followlast=owl_global_should_followlast(&g); 452 434 435 /* Do AIM stuff */ 436 if (owl_global_is_doaimevents(&g)) { 437 owl_aim_process_events(); 438 439 if (owl_global_is_aimloggedin(&g)) { 440 if (owl_timer_is_expired(owl_global_get_aim_buddyinfo_timer(&g))) { 441 /* owl_buddylist_request_idletimes(owl_global_get_buddylist(&g)); */ 442 owl_timer_reset(owl_global_get_aim_buddyinfo_timer(&g)); 443 } 444 } 445 } 446 453 447 owl_perlconfig_mainloop(); 454 448 … … 468 462 } 469 463 464 owl_zephyr_process_events(); 465 470 466 /* Grab incoming messages. */ 471 467 newmsgs=0; … … 539 535 } 540 536 541 /* select on FDs we know about. */ 542 owl_select(); 537 /* Handle all keypresses. If no key has been pressed, sleep for a 538 * little bit, but otherwise do not. This lets input be grabbed 539 * as quickly as possbile */ 540 j.ch = wgetch(typwin); 541 if (j.ch == ERR) { 542 usleep(10000); 543 } else { 544 j.uch = '\0'; 545 if (j.ch >= KEY_MIN && j.ch <= KEY_MAX) { 546 /* This is a curses control character. */ 547 } 548 else if (j.ch > 0x7f && j.ch < 0xfe) { 549 /* Pull in a full utf-8 character. */ 550 int bytes, i; 551 char utf8buf[7]; 552 memset(utf8buf, '\0', 7); 553 554 utf8buf[0] = j.ch; 555 556 if ((j.ch & 0xc0) && (~j.ch & 0x20)) bytes = 2; 557 else if ((j.ch & 0xe0) && (~j.ch & 0x10)) bytes = 3; 558 else if ((j.ch & 0xf0) && (~j.ch & 0x08)) bytes = 4; 559 else if ((j.ch & 0xf8) && (~j.ch & 0x04)) bytes = 5; 560 else if ((j.ch & 0xfc) && (~j.ch & 0x02)) bytes = 6; 561 else bytes = 1; 562 563 for (i = 1; i < bytes; i++) { 564 int tmp = wgetch(typwin); 565 /* If what we got was not a byte, or not a continuation byte */ 566 if (tmp > 0xff || !(tmp & 0x80 && ~tmp & 0x40)) { 567 /* ill-formed UTF-8 code unit subsequence, put back the 568 char we just got. */ 569 ungetch(tmp); 570 j.ch = ERR; 571 break; 572 } 573 utf8buf[i] = tmp; 574 } 575 576 if (j.ch != ERR) { 577 if (g_utf8_validate(utf8buf, -1, NULL)) { 578 j.uch = g_utf8_get_char(utf8buf); 579 } 580 else { 581 j.ch = ERR; 582 } 583 } 584 } 585 else if (j.ch <= 0x7f) { 586 j.uch = j.ch; 587 } 588 589 owl_global_set_lastinputtime(&g, now); 590 /* find and activate the current keymap. 591 * TODO: this should really get fixed by activating 592 * keymaps as we switch between windows... 593 */ 594 if (pw && owl_popwin_is_active(pw) && owl_global_get_viewwin(&g)) { 595 owl_context_set_popless(owl_global_get_context(&g), 596 owl_global_get_viewwin(&g)); 597 owl_function_activate_keymap("popless"); 598 } else if (owl_global_is_typwin_active(&g) 599 && owl_editwin_get_style(tw)==OWL_EDITWIN_STYLE_ONELINE) { 600 /* 601 owl_context_set_editline(owl_global_get_context(&g), tw); 602 owl_function_activate_keymap("editline"); 603 */ 604 } else if (owl_global_is_typwin_active(&g) 605 && owl_editwin_get_style(tw)==OWL_EDITWIN_STYLE_MULTILINE) { 606 owl_context_set_editmulti(owl_global_get_context(&g), tw); 607 owl_function_activate_keymap("editmulti"); 608 } else { 609 owl_context_set_recv(owl_global_get_context(&g)); 610 owl_function_activate_keymap("recv"); 611 } 612 /* now actually handle the keypress */ 613 ret = owl_keyhandler_process(owl_global_get_keyhandler(&g), j); 614 if (ret!=0 && ret!=1) { 615 owl_function_makemsg("Unable to handle keypress"); 616 } 617 } 543 618 544 619 /* Log any error signals */ … … 658 733 } 659 734 660 void owl_process_aim()661 {662 if (owl_global_is_doaimevents(&g)) {663 owl_aim_process_events();664 665 if (owl_global_is_aimloggedin(&g)) {666 if (owl_timer_is_expired(owl_global_get_aim_buddyinfo_timer(&g))) {667 /* owl_buddylist_request_idletimes(owl_global_get_buddylist(&g)); */668 owl_timer_reset(owl_global_get_aim_buddyinfo_timer(&g));669 }670 }671 }672 }673 674 void owl_process_input()675 {676 int ret;677 owl_input j;678 owl_popwin *pw;679 owl_editwin *tw;680 WINDOW *typwin;681 682 typwin = owl_global_get_curs_typwin(&g);683 j.ch = wgetch(typwin);684 if (j.ch == ERR) return;685 686 owl_global_set_lastinputtime(&g, time(NULL));687 pw=owl_global_get_popwin(&g);688 tw=owl_global_get_typwin(&g);689 690 j.uch = '\0';691 if (j.ch >= KEY_MIN && j.ch <= KEY_MAX) {692 /* This is a curses control character. */693 }694 else if (j.ch > 0x7f && j.ch < 0xfe) {695 /* Pull in a full utf-8 character. */696 int bytes, i;697 char utf8buf[7];698 memset(utf8buf, '\0', 7);699 700 utf8buf[0] = j.ch;701 702 if ((j.ch & 0xc0) && (~j.ch & 0x20)) bytes = 2;703 else if ((j.ch & 0xe0) && (~j.ch & 0x10)) bytes = 3;704 else if ((j.ch & 0xf0) && (~j.ch & 0x08)) bytes = 4;705 else if ((j.ch & 0xf8) && (~j.ch & 0x04)) bytes = 5;706 else if ((j.ch & 0xfc) && (~j.ch & 0x02)) bytes = 6;707 else bytes = 1;708 709 for (i = 1; i < bytes; i++) {710 int tmp = wgetch(typwin);711 /* If what we got was not a byte, or not a continuation byte */712 if (tmp > 0xff || !(tmp & 0x80 && ~tmp & 0x40)) {713 /* ill-formed UTF-8 code unit subsequence, put back the714 char we just got. */715 ungetch(tmp);716 j.ch = ERR;717 break;718 }719 utf8buf[i] = tmp;720 }721 722 if (j.ch != ERR) {723 if (g_utf8_validate(utf8buf, -1, NULL)) {724 j.uch = g_utf8_get_char(utf8buf);725 }726 else {727 j.ch = ERR;728 }729 }730 }731 else if (j.ch <= 0x7f) {732 j.uch = j.ch;733 }734 735 owl_global_set_lastinputtime(&g, time(NULL));736 /* find and activate the current keymap.737 * TODO: this should really get fixed by activating738 * keymaps as we switch between windows...739 */740 if (pw && owl_popwin_is_active(pw) && owl_global_get_viewwin(&g)) {741 owl_context_set_popless(owl_global_get_context(&g),742 owl_global_get_viewwin(&g));743 owl_function_activate_keymap("popless");744 } else if (owl_global_is_typwin_active(&g)745 && owl_editwin_get_style(tw)==OWL_EDITWIN_STYLE_ONELINE) {746 /*747 owl_context_set_editline(owl_global_get_context(&g), tw);748 owl_function_activate_keymap("editline");749 */750 } else if (owl_global_is_typwin_active(&g)751 && owl_editwin_get_style(tw)==OWL_EDITWIN_STYLE_MULTILINE) {752 owl_context_set_editmulti(owl_global_get_context(&g), tw);753 owl_function_activate_keymap("editmulti");754 } else {755 owl_context_set_recv(owl_global_get_context(&g));756 owl_function_activate_keymap("recv");757 }758 /* now actually handle the keypress */759 ret = owl_keyhandler_process(owl_global_get_keyhandler(&g), j);760 if (ret!=0 && ret!=1) {761 owl_function_makemsg("Unable to handle keypress");762 }763 }764 765 735 void sig_handler(int sig, siginfo_t *si, void *data) 766 736 { … … 777 747 owl_function_quit(); 778 748 } 749 779 750 } 780 751 -
owl.h
r9c7a701 r6f6330b 561 561 owl_list strings; 562 562 } owl_obarray; 563 564 typedef struct _owl_dispatch {565 int fd; /* FD to watch for dispatch. */566 void (*cfunc)(); /* C function to dispatch to. */567 SV *pfunc; /* Perl function to dispatch to. */568 } owl_dispatch;569 563 570 564 typedef struct _owl_global { … … 638 632 struct termios startup_tio; 639 633 owl_obarray obarray; 640 owl_list dispatchlist;641 634 } owl_global; 642 635 -
perl/lib/BarnOwl/ModuleLoader.pm
rb4fcc06 rb0c8011 24 24 $modules{$1} = 1; 25 25 } elsif(-d "$dir/$f" && -d "$dir/$f/lib") { 26 unshift@INC, "$dir/$f/lib" unless grep m{^$dir/$f/lib$}, @INC;26 push @INC, "$dir/$f/lib" unless grep m{^$dir/$f/lib$}, @INC; 27 27 $modules{$f} = 1; 28 28 } -
perl/modules/IRC/lib/BarnOwl/Module/IRC.pm
r9c7a701 rcab045b 69 69 } 70 70 71 #sub mainloop_hook { 72 # return unless defined $irc; 73 # eval { 74 # $irc->do_one_loop(); 75 # }; 76 # return; 77 #} 78 79 sub OwlProcess { 71 sub mainloop_hook { 80 72 return unless defined $irc; 81 73 eval { … … 84 76 return; 85 77 } 86 87 78 88 79 sub register_handlers { … … 118 109 $BarnOwl::Hooks::startup->add(\&startup); 119 110 $BarnOwl::Hooks::shutdown->add(\&shutdown); 120 #$BarnOwl::Hooks::mainLoop->add(\&mainloop_hook);111 $BarnOwl::Hooks::mainLoop->add(\&mainloop_hook); 121 112 122 113 ################################################################################ … … 174 165 BarnOwl::admin_message("IRC", "Connected to $alias as $nick"); 175 166 $ircnets{$alias} = $conn; 176 my $fd = $conn->getSocket()->fileno();177 BarnOwl::add_dispatch($fd, \&OwlProcess);178 $conn->{FD} = $fd;179 167 } else { 180 168 die("IRC::Connection->connect failed: $!"); -
perl/modules/IRC/lib/BarnOwl/Module/IRC/Connection.pm
r9c7a701 r5ff830a 69 69 } 70 70 71 sub getSocket72 {73 my $self = shift;74 return $self->conn->socket;75 }76 77 71 ################################################################################ 78 72 ############################### IRC callbacks ################################## … … 174 168 my $self = shift; 175 169 delete $BarnOwl::Module::IRC::ircnets{$self->alias}; 176 BarnOwl::remove_dispatch($self->{FD}); 170 177 171 BarnOwl::admin_message('IRC', 178 172 "[" . $self->alias . "] Disconnected from server"); -
perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm
r6b580b0 r879e7e94 118 118 BarnOwl::error("Connection for $jid undefined -- error in reload?"); 119 119 } 120 # We keep this in the mainloop hook for keep-alives 120 121 121 my $status = $client->Process(0); 122 122 if ( !defined($status) ) { … … 126 126 if ($::shutdown) { 127 127 do_logout($jid); 128 next; 129 } 130 128 return; 129 } 131 130 if ($vars{status_changed}) { 132 131 my $p = new Net::Jabber::Presence; … … 390 389 $conn->renameConnection($jidStr, $fullJid); 391 390 queue_admin_msg("Connected to jabber as $fullJid"); 392 # The remove_dispatch() method is called from the393 # ConnectionManager's removeConnection() method.394 $client->{fileno} = $client->getSocket()->fileno();395 #queue_admin_msg("Connected to jabber as $fullJid ($client->{fileno})");396 BarnOwl::add_dispatch($client->{fileno}, sub { $client->OwlProcess() });397 391 } 398 392 } -
perl/modules/Jabber/lib/BarnOwl/Module/Jabber/Connection.pm
r6b580b0 re0ffe77 111 111 112 112 113 =head2 getSID114 115 Returns the StreamID for this connection.116 117 =cut118 119 sub getStreamID {120 my $self = shift;121 return $self->{SESSION}->{id} || "";122 }123 124 =head2 getSocket125 126 Returns the IO::Socket for this connection.127 128 =cut129 130 sub getSocket {131 my $self = shift;132 my $sid = getStreamID($self);133 return $self->{STREAM}->GetSock($sid) || -1;134 }135 136 =head2 OwlProcess137 138 Non-blocking connection processing. For use in a select loop.139 140 =cut141 142 sub OwlProcess {143 my $self = shift;144 my $status = $self->Process(0);145 if ( !defined($status) ) {146 my $jid = $self->{SESSION}->{FULLJID};147 BarnOwl::error("Jabber account $jid disconnected!");148 BarnOwl::Module::Jabber::do_logout($jid);149 }150 }151 152 113 =head1 SEE ALSO 153 114 -
perl/modules/Jabber/lib/BarnOwl/Module/Jabber/ConnectionManager.pm
r6b580b0 r7f33c18 37 37 return 0 unless exists $self->{$jidStr}; 38 38 39 BarnOwl::remove_dispatch($self->{$jidStr}->{Client}->{fileno}) if $self->{$jidStr}->{Client}->{fileno};40 39 $self->{$jidStr}->{Client}->Disconnect() 41 40 if $self->{$jidStr}->{Client}; … … 52 51 return 0 if $oldJidStr eq $newJidStr; 53 52 54 $self->{$newJidStr} = $self->{$oldJidStr}; 53 $self->{$newJidStr} = $self->{$oldJidStr}; 55 54 delete $self->{$oldJidStr}; 56 55 return 1; -
perlconfig.c
r9c7a701 raf1920fd 487 487 } 488 488 489 void owl_perlconfig_dispatch_free(owl_dispatch *d)490 {491 SvREFCNT_dec(d->pfunc);492 }493 494 489 void owl_perlconfig_edit_callback(owl_editwin *e) 495 490 { … … 538 533 return; 539 534 } 540 541 void owl_perlconfig_do_dispatch(owl_dispatch *d)542 {543 SV *cb = d->pfunc;544 unsigned int n_a;545 dSP;546 if(cb == NULL) {547 owl_function_error("Perl callback is NULL!");548 }549 550 ENTER;551 SAVETMPS;552 553 PUSHMARK(SP);554 PUTBACK;555 556 call_sv(cb, G_DISCARD|G_KEEPERR|G_EVAL);557 558 if(SvTRUE(ERRSV)) {559 owl_function_error("%s", SvPV(ERRSV, n_a));560 }561 562 FREETMPS;563 LEAVE;564 } -
perlglue.xs
r9c7a701 r65fea01 342 342 desc, 343 343 ival); 344 345 void346 add_dispatch(fd, cb)347 int fd348 SV * cb349 CODE:350 SvREFCNT_inc(cb);351 owl_select_add_perl_dispatch(fd, cb);352 353 void354 remove_dispatch(fd)355 int fd356 CODE:357 owl_select_remove_perl_dispatch(fd); -
zephyr.c
r9c7a701 r247cbc9 29 29 return(0); 30 30 } 31 31 32 32 33 int owl_zephyr_shutdown()
Note: See TracChangeset
for help on using the changeset viewer.