*****Listing 1*****

date_print3(date)
date date;	/* internal date form */
{
	static struct datecache {
		date internal;
		printable_date external;
		unsigned inuse : 1;
	} dates[MAXDATEPRINTS];

	static struct datecache *d_last_used = dates;
	static struct datecache *d_last_stored = dates;

	/* last one used is highly likely */
	struct datecache *d = d_last_used;

	do {
		if (d->internal == date) {
			d_last_used = d;
			d->inuse = TRUE;
			return(d->external);
		}
		d = next_date(d);
	} while (d != d_last_used);

	/* we have moved all the way around the buffer */
	/* and didn't find it in cache */
	/* find a new buffer */
	d = next_date(d_last_stored);
	do {
		if (d->inuse) d->inuse = FALSE;
		else break;
	} while (d != d_last_stored);

	/* either found one not in use, or all in use */
	d->inuse = FALSE; /* nec. if all are in use */
	d_last_used = d;
	d_last_stored = d;

	/* actually do the work and convert date */
	/* into a printable representation */
	.....
	memcpy(d_last_used->external,....);
	return(d_last_used->external);
}

