aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO1
-rw-r--r--src/cmd.c10
-rw-r--r--src/irc.c36
-rw-r--r--src/irc.h2
4 files changed, 28 insertions, 21 deletions
diff --git a/TODO b/TODO
index 755f5f0..9490827 100644
--- a/TODO
+++ b/TODO
@@ -1,6 +1,5 @@
FujiChat features:
-- handle incoming PONG (with latency)
- nick tab completion (FujiChat's was very lame)
- option to not show ping/pong
- hide motd
diff --git a/src/cmd.c b/src/cmd.c
index e871240..2f5b59e 100644
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -229,14 +229,13 @@ static void send_ctcp(void) {
txbuf_send();
}
-long read_rtclok(void) {
- return (OS.rtclok[0] << 16) | (OS.rtclok[1] << 8) | OS.rtclok[2];
+/* only the bottom 15 bits! */
+unsigned int read_rtclok(void) {
+ return ((OS.rtclok[1] << 8) | (OS.rtclok[2])) & 0x7fff;
}
static void rtclok_to_numbuf(void) {
- long r;
- r = read_rtclok();
- ltoa(r, numbuf, 10);
+ itoa(read_rtclok(), numbuf, 10);
}
static void do_ctcp_ping(void) {
@@ -342,7 +341,6 @@ static void do_query(void) {
}
static void do_msg(void) {
- char s;
arg2 = nextarg(arg1);
if(arg2) {
scr_print_current("->*");
diff --git a/src/irc.c b/src/irc.c
index 8343897..8740e15 100644
--- a/src/irc.c
+++ b/src/irc.c
@@ -26,7 +26,7 @@ char bell_type = 3;
static char msgbuf[MAX_MSG] = { 0 };
static char *msg; /* with source removed */
-static int msgbuf_len = 0, msg_len = 0;
+static int msgbuf_len = 0;
static char regged = 0, hilite = 0;
static char scr_prev = SCR_PRIV;
@@ -81,21 +81,31 @@ static void do_chan_nick(void) {
}
static void do_priv_nick(void) {
- scr_print_active("*");
- scr_print_active(msg_src);
- scr_print_active("* ");
- bell();
+ if(msg_src) {
+ scr_print_active("*");
+ scr_print_active(msg_src);
+ scr_print_active("* ");
+ bell();
+ }
}
+/* this ping calculation relies on the assumption that
+ nobody's ping time will ever be more than 9 minutes. anyone
+ that lagged will have been disconnected from the server already.
+ if this assumption turns out to be false, the ping time displayed
+ will be wrong (module ~9 mins). I don't think it's ever going to be
+ a real problem.
+ Why do it this way? Because using longs instead of ints bloats the
+ code by 778 bytes! */
static void print_ping_time(char *p) {
- static long now, pingtime;
- static int sec, frac;
+ static unsigned int now, pingtime;
+ static unsigned int sec, frac;
now = read_rtclok();
- pingtime = atol(p);
+ pingtime = (unsigned int)atoi(p);
- /* correct for rtclock rollover (every 77 hours) */
- if(now < pingtime) now |= 0x01000000L;
+ /* correct for rtclock rollover (every ~9 mins) */
+ if(now < pingtime) now |= 0x8000;
pingtime = now - pingtime;
@@ -114,9 +124,10 @@ static void print_ping_time(char *p) {
scr_print_active(numbuf);
scr_print_active(" sec");
- /* for debugging:
+ /*
+ // for debugging:
scr_print_active(" ");
- ltoa(pingtime, numbuf, 10);
+ itoa(pingtime, numbuf, 10);
scr_print_active(numbuf);
*/
}
@@ -339,7 +350,6 @@ static void permute_nick(void) {
}
static void do_numeric(void) {
- char s;
unsigned int num = atoi(msg_cmd);
switch(num) {
diff --git a/src/irc.h b/src/irc.h
index b6791ad..2525120 100644
--- a/src/irc.h
+++ b/src/irc.h
@@ -61,4 +61,4 @@ void print_errnum(void);
/**** cmd.c */
void cmd_command(char *cmd);
void cmd_execute(void);
-long read_rtclok(void); /* irc.c needs this one so it's not static */
+unsigned int read_rtclok(void); /* irc.c needs this one so it's not static */