return ch_out;
return UCH(ch_out);
PUBLIC int UCReverseTransChar ARGS3(	char,		ch_out,	int,		charset_in,	int,		charset_out){    int Gn;    int rc;    int UChndl_in, UChndl_out;    int isdefault;    int i_ch = (unsigned char)ch_out;    CONST u16 * ut;#ifndef UC_NO_SHORTCUTS    if (charset_in == charset_out)	return ch_out;#endif /* UC_NO_SHORTCUTS */    if (charset_in < 0)	return -11;    if ((UChndl_in = LYCharSet_UC[charset_in].UChndl) < 0)	return -11;    if (!UCInfo[UChndl_in].num_uni)	return -11;    if (charset_out < 0)	return -12;    if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0) {	if ((UChndl_out = default_UChndl) < 0)	    return -12;	isdefault = 1;    } else {	isdefault = UCInfo[UChndl_out].replacedesc.isdefault;    }    if (!isdefault) {	/*	 *  Try to use the inverse table if charset_out is not equivalent	 *  to using just the default table.  If it is, it should have	 *  just ASCII chars and trying to back-translate those should	 *  not give anything but themselves. - kw	 */	ut = UCInfo[UChndl_out].unitable;	if (ut == UC_current_unitable) {	    if ((Gn = UCInfo[UChndl_in].GN) >= 0) {		UC_translate = set_translate(Gn);		rc = inv_translate[i_ch];		if (rc >= 32) {		    return rc;		}	    } else {		Gn = UC_MapGN(UChndl_in,1);		UC_translate = set_translate(Gn);		rc = inv_translate[i_ch];		if (rc >= 32) {		    return rc;		}	    }	}    }    return UCTransChar(ch_out, charset_out, charset_in);}