} else if (!(WHITE(*cp) && (unsigned char)*cp != (unsigned char)CH_ESC)) {
} else if (!(WHITE(*cp) && UCH(*cp) != UCH(CH_ESC))) {
PUBLIC char *LYFindEndOfComment ARGS1(	char *, str){    char *cp, *cp1;    enum comment_state { start1, start2, end1, end2 } state;    if (str == NULL)	/*	 *  We got NULL, so return NULL. - FM	 */	return NULL;    if (strncmp(str, "<!--", 4))	/*	 *  We don't have the start of a comment, so	 *  return the beginning of the string. - FM	 */	return str;    cp = (str + 4);    if (*cp =='>')	/*	 * It's an invalid comment, so	 * return this end character. - FM	 */	return cp;    if ((cp1 = strchr(cp, '>')) == NULL)	/*	 *  We don't have an end character, so	 *  return the beginning of the string. - FM	 */	return str;    if (*cp == '-')	/*	 *  Ugh, it's a "decorative" series of dashes,	 *  so return the next end character. - FM	 */	return cp1;    /*     *	OK, we're ready to start parsing. - FM     */    state = start2;    while (*cp != '\0') {	switch (state) {	    case start1:		if (*cp == '-')		    state = start2;		else		    /*		     *	Invalid comment, so return the first		     *	'>' from the start of the string. - FM		     */		    return cp1;		break;	    case start2:		if (*cp == '-')		    state = end1;		break;	    case end1:		if (*cp == '-')		    state = end2;		else		    /*		     *	Invalid comment, so return the first		     *	'>' from the start of the string. - FM		     */		    return cp1;		break;	    case end2:		if (*cp == '>')		    /*		     *	Valid comment, so return the end character. - FM		     */		    return cp;		if (*cp == '-') {		    state = start1;		} else if (!(WHITE(*cp) && (unsigned char)*cp != (unsigned char)CH_ESC)) {  /* S/390 -- gil -- 1686 */		    /*		     *	Invalid comment, so return the first		     *	'>' from the start of the string. - FM		     */		    return cp1;		 }		break;	    default:		break;	}	cp++;    }    /*     *	Invalid comment, so return the first     *	'>' from the start of the string. - FM     */    return cp1;}