From b74d292847b22cf282ff8ae7d1b51df34176ce4d Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Wed, 25 Mar 2026 03:08:11 -0400 Subject: Banish cgetc(), and all its annoyances. Much more flexible and precise keyboard control, see keytab.[ch] and kgetc.[ch] --- src/irc.c | 64 +++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 28 deletions(-) (limited to 'src/irc.c') diff --git a/src/irc.c b/src/irc.c index fb3b979..71026c0 100644 --- a/src/irc.c +++ b/src/irc.c @@ -7,7 +7,6 @@ #include "screen.h" #include "edbox.h" #include "numerics.h" -#include "keyclick.h" #include #include @@ -15,6 +14,8 @@ #include "config.h" #include "indic8.h" #include "complete.h" +#include "keytab.h" +#include "kgetc.h" #ifndef VERSION #define VERSION "?????" @@ -811,12 +812,10 @@ void irc_register(void) { } static void scrollback() { - OS.ch = 0xff; scr_scrollback(); - while(OS.ch == 0xff) + while(!keypress()) irc_read(); - keyclick(); - OS.ch = 0xff; + kgetc(); scr_end_scrollback(); } @@ -949,18 +948,14 @@ static void toggle_edbox_only(void) { OS.sdlst = edbox_only_dlist; } -void start_keystroke(void) { - char i, s; +void start_keystroke(char c) { + char s; - i = cgetc(); + start_latch = 0; + if(c == CH_ESC) return; - start_latch = OS.escflg = OS.invflg = 0; - if(i == CH_ESC) { - return; - } - - if(i >= '1' && i <= '7') { - s = i - '1'; + if(c >= '1' && c <= '7') { + s = c - '1'; if(s != scr_current) { if(scr_status[s] != SCR_UNUSED) { scr_prev = scr_current; @@ -970,8 +965,8 @@ void start_keystroke(void) { return; } - switch(tolower(i)) { - case CH_CURS_UP: + switch(tolower(c)) { + case XCH_UP: case '-': scrollback(); return; @@ -982,20 +977,20 @@ void start_keystroke(void) { scr_prev = SCR_PRIV; scr_destroy(scr_current); return; - case CH_CURS_LEFT: + case XCH_LEFT: case '+': scr_prev = scr_current; hunt_screen(-1); return; - case CH_CURS_RIGHT: + case XCH_RIGHT: case '*': scr_prev = scr_current; hunt_screen(1); return; - case CH_TAB: - i = scr_current; + case XCH_TAB: + c = scr_current; scr_display(scr_prev); - scr_prev = i; + scr_prev = c; return; case 'q': if(scr_current == SCR_PRIV && *last_pm_nick) { @@ -1043,16 +1038,29 @@ void start_keystroke(void) { } } -static void keystroke(void) { - if(OS.ch == 0xff) return; +static void poll_keyboard(void) { + char c, s; + + s = GTIA_READ.consol; + + if(!keypress()) return; + + c = kgetc(); + if(!c) return; + + if(s == 6) start_latch = 1; + + /* maybe this shouldn't happen until user presses Enter in the edbox? + would let lurkers lurk and read scrollback... */ if(irc_away) { txbuf_send_str("AWAY"); irc_away = 0; } - if(GTIA_READ.consol == 6 || start_latch) { /* start pressed */ - start_keystroke(); + + if(start_latch) { /* start pressed */ + start_keystroke(c); } else { - edbox_keystroke(); + edbox_keystroke(c); OS.cdtmv3 = hz / 2; } } @@ -1078,7 +1086,7 @@ void irc_loop(void) { } OS.cdtmv3 = 0; do { - keystroke(); + poll_keyboard(); } while(OS.cdtmv3); } } -- cgit v1.2.3