diff options
| author | B. Watson <urchlay@slackware.uk> | 2026-03-09 00:13:54 -0400 |
|---|---|---|
| committer | B. Watson <urchlay@slackware.uk> | 2026-03-09 00:13:54 -0400 |
| commit | 632b484974d98742cf67274838fcc4bc2c078e6a (patch) | |
| tree | e6008fda9043366238b851449ae53eda7482dd6f | |
| parent | 05c066e18ac9ad909379634089813350841ce70e (diff) | |
| download | fujinet-chat-632b484974d98742cf67274838fcc4bc2c078e6a.tar.gz | |
auto-away on ATRACT, auto-un-away on keystroke.
| -rw-r--r-- | TODO | 1 | ||||
| -rw-r--r-- | src/cmd.c | 11 | ||||
| -rw-r--r-- | src/irc.c | 10 | ||||
| -rw-r--r-- | src/irc.h | 1 |
4 files changed, 21 insertions, 2 deletions
@@ -3,7 +3,6 @@ FujiChat features: - handle incoming PONG (with latency) - visual and audible bell - nick tab completion (FujiChat's was very lame) -- auto-away when ATRACT mode kicks in - option to not show ping/pong - hide motd - settable real name (currently hardcoded "FujiNetChat User") @@ -12,6 +12,7 @@ char *command, *arg1, *arg2, *arg3; static char *target; +static void do_away(void); static void do_color(void); static void do_ctcp(void); static void do_info(void); @@ -36,9 +37,10 @@ typedef struct { } cmd_t; /* future commands: - AWAY OP DEOP VOICE DEVOICE KICK BAN KB IGNORE UNIGNORE MODE + OP DEOP VOICE DEVOICE KICK BAN KB IGNORE UNIGNORE MODE */ cmd_t command_defs[] = { + { "AWAY", do_away, 1 }, { "COLOR", do_color, 1 }, { "CTCP", do_ctcp, 1 }, { "INFO", do_info, 0 }, @@ -344,6 +346,13 @@ static void do_msg(void) { } } +static void do_away(void) { + OS.atract = 0x80; + irc_away = 1; + txbuf_set_str2("AWAY :", arg1); + txbuf_send(); +} + static int cmd_local(void) { arg1 = nextarg(command); @@ -19,6 +19,8 @@ char *msg_src, *msg_cmd, *msg_dest, *msg_text; char *msg_args[MAX_MSG_ARGS]; int msg_argcount; +char irc_away = 0; + static char msgbuf[MAX_MSG] = { 0 }; static char *msg; /* with source removed */ static int msgbuf_len = 0, msg_len = 0; @@ -644,6 +646,10 @@ static void start_keystroke(void) { static void keystroke(void) { if(OS.ch == 0xff) return; + if(irc_away) { + txbuf_send_str("AWAY"); + irc_away = 0; + } if(GTIA_READ.consol == 6) { /* start pressed */ start_keystroke(); } else { @@ -654,6 +660,10 @@ static void keystroke(void) { /* only exits on error (e.g. connection closed, which might be via /QUIT). */ void irc_loop(void) { while(1) { + if(!irc_away && (OS.atract & 0x80)) { + irc_away = 1; + txbuf_send_str("AWAY :ATRACT mode"); + } if(!irc_read()) return; keystroke(); } @@ -44,6 +44,7 @@ void print_error(unsigned char err); extern char *msg_src, *msg_cmd, *msg_dest, *msg_text; extern char *msg_args[MAX_MSG_ARGS]; extern int msg_argcount; +extern char irc_away; /* call this once, right after TCP connection is established. */ void irc_register(void); |
