stream = HTStreamStack(rep_in, format_out, sink , anchor);
PUBLIC int HTParseFile ARGS5(	HTFormat,		rep_in,	HTFormat,		format_out,	HTParentAnchor *,	anchor,	FILE *,			fp,	HTStream*,		sink){    HTStream * stream;    HTStreamClass targetClass;    int rv;    stream = HTStreamStack(rep_in,			format_out,			sink , anchor);    if (!stream) {	char *buffer = 0;	if (LYCancelDownload) {	    LYCancelDownload = FALSE;	    return -1;	}	HTSprintf0(&buffer, CANNOT_CONVERT_I_TO_O,		HTAtom_name(rep_in), HTAtom_name(format_out));	CTRACE(tfp, "HTFormat(in HTParseFile): %s\n", buffer);	rv = HTLoadError(sink, 501, buffer);	FREE(buffer);	return rv;    }    /*	Push the data down the stream    **    **	@@  Bug:  This decision ought to be made based on "encoding"    **	rather than on content-type.  @@@  When we handle encoding.    **	The current method smells anyway.    */    targetClass = *(stream->isa);	/* Copy pointers to procedures */    rv = HTFileCopy(fp, stream);    if (rv == -1 || rv == HT_INTERRUPTED) {	(*targetClass._abort)(stream, NULL);    } else {	(*targetClass._free)(stream);    }    if (rv == -1)	return HT_NO_DATA;    else if (rv == HT_INTERRUPTED || (rv > 0 && rv != HT_LOADED))	return HT_PARTIAL_CONTENT;    else	return HT_LOADED;}