aboutsummaryrefslogtreecommitdiff
path: root/src/irc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/irc.c')
-rw-r--r--src/irc.c131
1 files changed, 87 insertions, 44 deletions
diff --git a/src/irc.c b/src/irc.c
index 28ce527..db86b12 100644
--- a/src/irc.c
+++ b/src/irc.c
@@ -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();
}
}