1BSD/s6/continue.c

Compare this file to the similar file:
Show the results in this format:

#
#define DELAY	60
/*
 * continue - continue at a specified date and time
 */

char *ptr;
int times[8];

main(argc, argv)
char **argv;
{
	register int i;
	register char *aptr;
	int tvec[2], *iptr;

	if (argc != 2) {
		printf("CONTINUE MMDDHHMM[YY]\n");
		exit();
	}
	ptr = *++argv;
	range(times[4]=next(), 1, 12);
	times[4]--;
	range(times[3]=next(), 0, 31);
	range(times[2]=next(), 0, 23);
	range(times[1]=next(), 0, 59);
	if (*ptr != '\0')
		range(times[5]=next(), 70, 99);
	else {
		time(tvec);
		iptr = localtime(tvec);
		times[5] = iptr[5];
	}
	if (*ptr != '\0') {
		printf("Illegal time. Enter as MMDDHHMM[YY]\n");
		exit();
	}
	while ((i=checktime()) > 0)
		sleep(i);
}

next()
{
	register int num;

	num = *ptr++ - '0';
	num = num*10 + *ptr++ - '0';
	return(num);
}

range(n1, n2, n3)
{
	if (n1>=n2 && n1<=n3)
		return;
	printf("Illegal number %d\n", n1);
	exit();
}

checktime()
{
	register i, j;
	int tvec[2], *iptr;

	time(tvec);
	iptr = localtime(tvec);
	for (i=0; i<5; i++) {
		j = 5 - i;
		if (iptr[j] > times[j])
			return(0);
		if (iptr[j] < times[j])
			return(DELAY);
	}
	return(0);
}