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