These changes are based on libxslt version 1.0.3.

Changed xsltEvalUserParams to iterate over the params array and
call xsltEvalOneUserParam.  The xsltEvalOneUserParam calls
xsltProcessOneUserParamInternal with a flag of 1 to indicate "evaluate
as XPath expression".  Added xsltQuoteUserParams and
xsltQuoteOneUserParam which are similar, but pass the value 0
(do not evaluate as XPath expression) to xsltProcessOneUserParamInternal.

I considered writing two routines (one for eval and one for quoted),
but decided this would be more work to maintain in the long run.

variables.h contains the added prototypes.  This will require an
addition to the .defs file.

I ran the revised code with xsltproc and the libxslt memory
debug option with two parameters in both eval and quote modes. I
then ran the same tests with NuMega BoundsChecker and it found 
the following (false alarm) memory problem:

(Valid) use of pointer to freed memory reported by NuMega BoundsChecker

   In xsltValueOf (transform.c:2314) at line 2357 there
   is a call to xmlAddChild(ctxt->insert, copy):
  
  	    if (copy != NULL) {
			if (comp->noescape)
		    	copy->name = xmlStringTextNoenc;
			xmlAddChild(ctxt->insert, copy);
	    }

    In xmlAddChild (tree.c:2240) "copy" is passes as the formal
    named "cur" and it is freed at line 2281.

	Subsequently, at line 2367 (in xsltValueOf) the pointer is
	compared against NULL:

   		if (copy == NULL) {
			xsltPrintErrorContext(ctxt, NULL, inst);
			xsltGenericError(xsltGenericErrorContext,
	    		"xsltValueOf: text copy failed\n");
    	}	

	This is okay since the pointer is not dereferenced, but it
	leads to false reports about the use of dangling pointers.

    Perhaps a temporary could be introduced such as:
    
        int copyIsNULL = (copy == NULL);
        
	and this used after the call to xmlAddChild.  This would
 	avoid a false error report.


Other changes to the code necessary for building on win32 MSVC6
---------------------------------------------------------------

Add #include <stdlib.h> to catalog.c.

Comment out redefinition of "const" and "volatile" in trionan.c.  This
was really painful since I never imagined that someone would #define const
and then I looked only in .h files.

Add volatile to prototypes in trionan.h.

Add to libxml2.def.src 

	xmlXPathIsNaN
	xmlXPathIsInf
	xmlCatalogResolveURI
	xmlCatalogLocalResolveURI
	xmlCatalogResolve
	xmlCatalogLocalResolve
	xmlCatalogGetDefaults

New functions for libxslt.def.src

	xsltQuoteUserParams
	xsltEvalOneUserParam
	xsltQuoteOneUserParam
	
In libxml/xmlIO.C check for zero length argument ?

	static int
	xmlFileWrite (void * context, const char * buffer, int len) {
		if (len == 0) return 0;  
    	return(fwrite(&buffer[0], 1,  len, (FILE *) context));
	}
	
