/* 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); }