if (nrules != 0) (void) qsort((void *) rules, (size_t) nrules, (size_t) sizeof *rules, rcomp); for (i = 0; i < nzones; ++i) { zp = &zones[i]; zp->z_rules = NULL; zp->z_nrules = 0;
for (i = 0; i < leapcnt; ++i) { trans[i] = tadd(trans[i], last); last = corr[i] += last;
associate P((void)){	register struct zone *	zp;	register struct rule *	rp;	register int		base, out;	register int		i;	if (nrules != 0)		(void) qsort((void *) rules, (size_t) nrules,			(size_t) sizeof *rules, rcomp);	for (i = 0; i < nzones; ++i) {		zp = &zones[i];		zp->z_rules = NULL;		zp->z_nrules = 0;	}	for (base = 0; base < nrules; base = out) {		rp = &rules[base];		for (out = base + 1; out < nrules; ++out)			if (strcmp(rp->r_name, rules[out].r_name) != 0)				break;		for (i = 0; i < nzones; ++i) {			zp = &zones[i];			if (strcmp(zp->z_rule, rp->r_name) != 0)				continue;			zp->z_rules = rp;			zp->z_nrules = out - base;		}	}	for (i = 0; i < nzones; ++i) {		zp = &zones[i];		if (zp->z_nrules == 0) {			/*			** Maybe we have a local standard time offset.			*/			eat(zp->z_filename, zp->z_linenum);			zp->z_stdoff = gethms(zp->z_rule, "unruly zone", TRUE);			/*			** Note, though, that if there's no rule,			** a '%s' in the format is a bad thing.			*/			if (strchr(zp->z_format, '%') != 0)				error("%s in ruleless zone");		}	}	if (errors)		(void) exit(EXIT_FAILURE);}