/* New for v2.0: readline support -- daw */ /* * this is a reimplementation of the standard tickcounter, *without* alarm()! * god i hate alarm() -- it screws everything up, and isn't portable, * and tintin was calling alarm() every second! blech. */ #include "tintin.h" extern int time0, tick_size; extern struct session *sessionlist; extern void tintin_puts(); int timetilltick( /* void */ ) { int now, ttt; ttt = (time(0) - time0) % tick_size; ttt = (tick_size - ttt) % tick_size; return (ttt); } /* * returns how long before the next event, in seconds. * (i.e. if we're 13 seconds till tick in some session, * we return 3, because in 3 seconds we'll need to warn * the user that they are 10 seconds short of the tick.) * * also prints the tick warnings, by the way. :-) * * bug: if you suspend tintin++ for a few minutes, then * bring it back, you get lots of tick warnings. is this * the desired behavior? */ int checktick( /* void */ ) { static int last = -1, ttt = -1; /* ttt = time to tick */ int now; struct session *s; if (time0 <= 0) return (100); /* big number */ now = time(0); if (last > 0) while (last <= now) { ttt = (++last - time0) % tick_size; ttt = (tick_size - ttt) % tick_size; if (ttt != 0 && ttt != 10) continue; for (s = sessionlist; s; s = s->next) if (s->tickstatus) tintin_puts((ttt == 0) ? "#TICK!!!" : "#10 SECONDS TO TICK!!!", s); } else { last = now + 1; ttt = (now - time0) % tick_size; ttt = (tick_size - ttt) % tick_size; } if (ttt > 10) return (ttt - 10); else if (ttt > 0) return (ttt); else return (tick_size); }