if (*string == '*') { trailpad *= affcnt; string++; } }
int tputs(const char *string, int affcnt, int (*outc)(int)){bool	always_delay;bool	normal_delay;int	number;#ifdef BSD_TPUTSint	trailpad;#endif /* BSD_TPUTS */#ifdef TRACEchar	addrbuf[32];	if (_nc_tracing & TRACE_TPUTS)	{		if (outc == _nc_outch)			(void) strcpy(addrbuf, "_nc_outch");		else			(void) sprintf(addrbuf, "%p", outc);		if (_nc_tputs_trace) {			TR(TRACE_MAXIMUM, ("tputs(%s = %s, %d, %s) called", _nc_tputs_trace, _nc_visbuf(string), affcnt, addrbuf));		}		else {			TR(TRACE_MAXIMUM, ("tputs(%s, %d, %s) called", _nc_visbuf(string), affcnt, addrbuf));		}		_nc_tputs_trace = (char *)NULL;	}#endif /* TRACE */		if (!VALID_STRING(string))		return ERR;	if (cur_term == 0) {		always_delay = FALSE;		normal_delay = TRUE;	} else {		always_delay = (string == bell) || (string == flash_screen);		normal_delay =		 !xon_xoff		 && padding_baud_rate#ifdef NCURSES_NO_PADDING		 && (SP == 0 || !(SP->_no_padding))#endif		 && (_nc_baudrate(ospeed) >= padding_baud_rate);	}#ifdef BSD_TPUTS	/*	 * This ugly kluge deals with the fact that some ancient BSD programs	 * (like nethack) actually do the likes of tputs("50") to get delays.	 */	trailpad = 0;	if (isdigit(*string)) {		while (isdigit(*string)) {			trailpad = trailpad * 10 + (*string - '0');			string++;		}		trailpad *= 10;		if (*string == '.') {			string++;			if (isdigit(*string)) {				trailpad += (*string - '0');				string++;			}			while (isdigit(*string))				string++;		}		if (*string == '*') {			trailpad *= affcnt;			string++;		}	}#endif /* BSD_TPUTS */	my_outch = outc;	/* redirect delay_output() */	while (*string) {		if (*string != '$')			(*outc)(*string);		else {			string++;			if (*string != '<') {				(*outc)('$');				if (*string)				    (*outc)(*string);			} else {				bool mandatory;				string++;				if ((!isdigit(*string) && *string != '.') || !strchr(string, '>')) {					(*outc)('$');					(*outc)('<');					continue;				}				number = 0;				while (isdigit(*string)) {					number = number * 10 + (*string - '0');					string++;				}				number *= 10;				if (*string == '.') {					string++;					if (isdigit(*string)) {						number += (*string - '0');						string++;					}					while (isdigit(*string))						string++;				}				mandatory = FALSE;				while (*string == '*' || *string == '/')				{					if (*string == '*') {						number *= affcnt;						string++;					}					else /* if (*string == '/') */ {						mandatory = TRUE;						string++;					}				}				if (number > 0				 && (always_delay				  || normal_delay				  || mandatory))					delay_output(number/10);			} /* endelse (*string == '<') */		} /* endelse (*string == '$') */		if (*string == '\0')			break;		string++;	}#ifdef BSD_TPUTS	/*	 * Emit any BSD-style prefix padding that we've accumulated now.	 */	if (trailpad > 0	 && (always_delay || normal_delay))		delay_output(trailpad/10);#endif /* BSD_TPUTS */	my_outch = _nc_outch;	return OK;}