diff options
Diffstat (limited to 'src/irc.c')
| -rw-r--r-- | src/irc.c | 131 |
1 files changed, 87 insertions, 44 deletions
@@ -4,12 +4,13 @@ #include <ctype.h> #include "irc.h" +#include "screen.h" +#include "edbox.h" #include "numerics.h" #ifdef __ATARI__ #include <atari.h> #include <conio.h> -#include "conio.h" #include "nio.h" #else #define CH_EOL '|' @@ -31,7 +32,7 @@ static int joined = 0; #ifdef __ATARI__ static void join_channel(void) { - ui_print("Joining channel...\n"); + scr_create(channel, 1); txbuf_set_str("JOIN "); txbuf_append_str(channel); txbuf_append_str("\n"); @@ -40,34 +41,44 @@ static void join_channel(void) { } static void do_pong(void) { - ui_putchar(CH_EOL); - ui_print("PING/PONG\n"); /* make hiding this a preference, or just ditch it */ + scr_print(SCR_SERVER, "PING/PONG\n"); /* make hiding this a preference, or just ditch it */ txbuf_set_str("PONG "); txbuf_append_str(msg_args[0]); txbuf_send(); } -static void do_privmsg(void) { - static char chan; - - chan = (*msg_dest == '#'); +static char do_chantext(void) { + char s; - if(chan) { - ui_putchar('<'); - } else { - ui_putchar('*'); + s = scr_getbyname(msg_dest); + scr_putc(s, '<'); + scr_print(s, msg_src); + if(!s) { /* if we don't have a window for it */ + scr_putc(s, '/'); + scr_print(s, msg_dest); } + scr_putc(s, '>'); + return s; +} - ui_print(msg_src); +static char do_private(void) { + char s; - if(chan) { - ui_putchar('>'); - } else { - ui_putchar('*'); - } + scr_putc(SCR_PRIV, '*'); + scr_print(SCR_PRIV, msg_src); + scr_putc(SCR_PRIV, '*'); + return s; +} + +static void do_privmsg(void) { + char s; + + if(*msg_dest == '#') + s = do_chantext(); + else + s = do_private(); - ui_putchar(' '); - ui_print(msg_text); + scr_print(s, msg_text); /* text ends with an EOL, don't print another */ } /* numerics call this with arg==1, since arg 0 is always our nick. @@ -75,24 +86,25 @@ static void do_privmsg(void) { */ static void do_catchall(int arg) { if(msg_src) { - ui_print(msg_src); - ui_putchar(' '); + scr_print(SCR_SERVER, msg_src); + scr_putc(SCR_SERVER, ' '); } - ui_print(msg_cmd); + scr_print(SCR_SERVER, msg_cmd); for(; arg < msg_argcount; arg++) { - ui_putchar(' '); - ui_print(msg_args[arg]); + scr_putc(SCR_SERVER, ' '); + scr_print(SCR_SERVER, msg_args[arg]); } if(msg_text) { - ui_putchar(' '); - ui_print(msg_text); + scr_putc(SCR_SERVER, ' '); + scr_print(SCR_SERVER, msg_text); } } static void do_numeric(void) { + char s; unsigned int num = atoi(msg_cmd); switch(num) { @@ -103,16 +115,18 @@ static void do_numeric(void) { break; case RPL_TOPIC: - ui_print("Topic for "); - ui_print(msg_args[1]); - ui_print(": "); - ui_print(msg_text); + s = scr_getbyname(msg_args[1]); + scr_print(s, "Topic for "); + scr_print(s, msg_args[1]); + scr_print(s, ": "); + scr_print(s, msg_text); break; case RPL_TOPICWHOTIME: - ui_print("Topic set by: "); - ui_print(msg_args[1]); - ui_putchar('\n'); + s = scr_getbyname(msg_args[1]); + scr_print(s, "Topic set by: "); + scr_print(s, msg_args[1]); + scr_putc(s, '\n'); break; default: @@ -122,9 +136,9 @@ static void do_numeric(void) { } static void invalid_msg(char type) { - ui_print("??? unknown, type "); - ui_putchar(type); - ui_putchar('\n'); + scr_print(SCR_SERVER, "??? unknown, type "); + scr_putc(SCR_SERVER, type); + scr_putc(SCR_SERVER, '\n'); } #else static void do_pong(void) { } @@ -210,7 +224,7 @@ static void parse_msg(void) { #ifdef __ATARI__ OS.crsinh = 1; - ui_start_msg(); + // ui_start_msg(); if(streq_i(msg_cmd, "PRIVMSG")) { do_privmsg(); } else if(isdigit(msg_cmd[0])) { @@ -218,7 +232,7 @@ static void parse_msg(void) { } else { do_catchall(0); } - ui_end_msg(); + // ui_end_msg(); #else { int i; @@ -253,6 +267,16 @@ static void irc_parse(void) { } } +/* TODO: there needs to be a scr_printnum() */ +void print_errnum(void) { + extern unsigned char err; + char tmp[10]; + scr_print(SCR_CURR, "Error #"); + itoa(err, tmp, 10); + scr_print(SCR_CURR, tmp); + scr_print(SCR_CURR, ", press any key...\n"); +} + #ifdef __ATARI__ int irc_read(void) { if(!trip) return 1; @@ -260,11 +284,11 @@ int irc_read(void) { err = nstatus(url); if(err == 136) { - ui_print("Disconnected, press any key...\n"); + scr_print(SCR_CURR, "Disconnected, press any key...\n"); cgetc(); return 0; } else if(err != 1) { - print_error(err); + print_errnum(); return 0; } @@ -277,8 +301,8 @@ int irc_read(void) { if(bw > 0) { err = nread(url, rx_buf, bw); if(err != 1) { - ui_print("READ ERROR: "); - print_error(err); + scr_print(SCR_CURR, "READ ERROR: "); + print_errnum(); return 0; } @@ -307,6 +331,25 @@ void irc_register(void) { txbuf_send(); } +static void start_keystroke(void) { + char i, s; + + i = cgetc(); + if(i >= '1' && i <= '7') { + s = i - '1'; + if(scr_active[s] != SCR_UNUSED) + scr_display(s); + } +} + +static void keystroke(void) { + if(GTIA_READ.consol == 6) { /* start pressed */ + start_keystroke(); + } else { + edbox_keystroke(); + } +} + /* only exits on error (e.g. connection closed, which might be via /QUIT). */ void irc_loop(void) { while(1) { @@ -314,7 +357,7 @@ void irc_loop(void) { if(kbhit()) if(joined) - ui_keystroke(); + keystroke(); else join_channel(); } } |
