a few VMS updates from John A Fotheringham added

* vms/readme.vms vms/build_libxml.com nanoftp.c
  include/libxml/xmlversion.h.in: a few VMS updates from
  John A Fotheringham
* include/libxml/xmlIO.h xmlIO.c: added xmlCleanupInputCallbacks()
  and xmlCleanupOutputCallbacks() for the Perl binding people.
Daniel
diff --git a/ChangeLog b/ChangeLog
index e5a5225..0f65d08 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Mon Oct 29 19:09:46 CET 2001 Daniel Veillard <daniel@veillard.com>
+
+	* vms/readme.vms vms/build_libxml.com nanoftp.c 
+	  include/libxml/xmlversion.h.in: a few VMS updates from
+	  John A Fotheringham
+	* include/libxml/xmlIO.h xmlIO.c: added xmlCleanupInputCallbacks()
+	  and xmlCleanupOutputCallbacks() for the Perl binding people.
+
 Mon Oct 29 12:44:17 CET 2001 Daniel Veillard <daniel@veillard.com>
 
 	* parser.c globals.c DOCBparser.c HTMLparser.c error.c:
diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h
index 0bdf6a5..f99c2c5 100644
--- a/include/libxml/xmlIO.h
+++ b/include/libxml/xmlIO.h
@@ -77,6 +77,8 @@
 /*
  * Interfaces for input
  */
+void	xmlCleanupInputCallbacks		(void);
+void	xmlCleanupOutputCallbacks		(void);
 
 void	xmlRegisterDefaultInputCallbacks	(void);
 xmlParserInputBufferPtr
diff --git a/include/libxml/xmlversion.h.in b/include/libxml/xmlversion.h.in
index c5ffc88..651d693 100644
--- a/include/libxml/xmlversion.h.in
+++ b/include/libxml/xmlversion.h.in
@@ -50,6 +50,7 @@
  */
 #define LIBXML_TEST_VERSION xmlCheckVersion(@LIBXML_VERSION_NUMBER@);
 
+#ifndef VMS
 #if @WITH_TRIO@
 /**
  * WITH_TRIO:
@@ -65,6 +66,9 @@
  */
 #define WITHOUT_TRIO
 #endif
+#else /* VMS */
+#define WITH_TRIO 1
+#endif /* VMS */
 
 /**
  * LIBXML_THREADS_ENABLED:
diff --git a/nanoftp.c b/nanoftp.c
index 8fd0d55..c7d76c7 100644
--- a/nanoftp.c
+++ b/nanoftp.c
@@ -75,6 +75,9 @@
 #define closesocket(s) close(s)
 #define SOCKET int
 #endif
+#if defined(VMS) || defined(__VMS)
+#define SOCKLEN_T unsigned int
+#endif
 
 #define FTP_COMMAND_OK		200
 #define FTP_SYNTAX_ERROR	500
diff --git a/vms/build_libxml.com b/vms/build_libxml.com
index 0c7622a..28f69c9 100755
--- a/vms/build_libxml.com
+++ b/vms/build_libxml.com
@@ -1,60 +1,204 @@
-$! BUILD_LIBXML.COM

-$!

-$! Build the LIBXML object library

-$!

-$! Ensure the logical name LIBXML is defined to point to the LIBXML source 

-$! directory. This procedure creates an object library LIBXML.OLB in the LIBXML

-$! directory. After the library is built, you can link LIBXML routines into

-$! your code with the command  $ LINK your_modules,LIBXML:LIBXML.OLB/LIBRARY

-$! 

-$!	

-$!------------------------------------------------------------------------------

-$ cc_command = "CC/DEBUG/NOOPT"

-$ lib_command = "LIBRARY/REPLACE LIBXML.OLB"

-$!

-$ exit_status = 1

-$ saved_default = f$environment("default")

-$ on error then goto ERROR_OUT 

-$ set def libxml

-$ if f$search("DEBUG.DIR").eqs."" then create/dir [.DEBUG]

-$ if f$search("LIBXML.OLB").eqs."" then library/create LIBXML.OLB

-$!

-$ call COMPILE DEBUGXML.C       

-$ call COMPILE ENCODING.C       

-$ call COMPILE ENTITIES.C       

-$ call COMPILE ERROR.C          

-$ call COMPILE HTMLPARSER.C     

-$ call COMPILE HTMLTREE.C       

-$ call COMPILE NANOFTP.C        

-$ call COMPILE NANOHTTP.C       

-$ call COMPILE PARSER.C         

-$ call COMPILE SAX.C            

-$ call COMPILE TREE.C           

-$ call COMPILE URI.C            

-$ call COMPILE VALID.C          

-$ call COMPILE XLINK.C          

-$ call COMPILE XMLIO.C          

-$ call COMPILE XMLLINT.C        

-$ call COMPILE XMLMEMORY.C      

-$ call COMPILE XPATH.C          

-$!

-$EXIT_OUT:

-$ set def 'saved_default

-$ exit 'exit_status

-$!

-$

-$ERROR_OUT:

-$ exit_status = $status

-$ write sys$output 'f$message(exit_status)'

-$ goto EXIT_OUT

-$!

-$COMPILE: subroutine

-$   on warning then goto EXIT_COMPILE

-$   source_file = p1

-$   name = f$element(0,".",source_file)

-$   object_file = f$fao("[.debug]!AS.OBJ",name)

-$   cc_command /object='object_file 'source_file'

-$   lib_command 'object_file'

-$EXIT_COMPILE:

-$   exit $status

-$endsubroutine

+$! BUILD_LIBXML.COM
+$!
+$! Build the LIBXML object library
+$!
+$! Ensure the logical name LIBXML is defined to point to the LIBXML source 
+$! directory. This procedure creates an object library LIBXML.OLB in the LIBXML
+$! directory. After the library is built, you can link LIBXML routines into
+$! your code with the command  $ LINK your_modules,LIBXML:LIBXML.OLB/LIBRARY
+$! 
+$!- configuration -------------------------------------------------------------
+$!
+$!- compile command.  If p1="nowarn" suppress the expected warning types
+$!
+$   cc_command = "CC/DEBUG/NOOPT"
+$   if p1.eqs."NOWARN" then 		-
+      cc_command = cc_command + "/WARN=DISABLE=(FLOATOVERFL,NOMAINUFLO)"
+$!
+$!- list of sources to be built into the LIBXML library.  Compare this list
+$!  to the definition of "libxml2_la_SOURCES" in the file MAKEFILE.
+$!
+$   sources = "SAX.c entities.c encoding.c error.c parserInternals.c parser.c"
+$   sources = sources + " tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c valid.c"
+$   sources = sources + " xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c "
+$   sources = sources + " xpointer.c xinclude.c nanohttp.c nanoftp.c "
+$   sources = sources + " DOCBparser.c catalog.c globals.c threads.c"
+$!
+$!- for VMS, we add in trio support
+$!
+$   sources = sources + " trio.c strio.c"
+$!
+$!- list of main modules to compile and link.  Compare this list to the
+$!  definition of bin_PROGRAMS in MAKEFILE.
+$!
+$   bin_progs = "xmllint xmlcatalog"
+$!
+$!- list of test modules to compile and link.  Compare this list to the
+$!  definition of noinst_PROGRAMS in MAKEFILE.
+$!
+$   test_progs = "testSAX testHTML testXPath testURI testDocbook"
+$!
+$!- set up build logicals -----------------------------------------------------\
+$!
+$   if f$trnlnm("xml_srcdir").eqs.""
+$   then
+$     globfile = f$search("[...]globals.c")
+$     if globfile.eqs.""
+$     then
+$	write sys$output "Can't locate globals.c.  You need to define a XML_SRCDIR logical"
+$     else
+$	srcdir = f$element(0,"]",globfile)+ "]"
+$	define/process xml_srcdir "''srcdir'"
+$       write sys$output "Defining xml_srcdir as ""''srcdir'"""
+$     endif
+$   endif
+$!
+$   if f$trnlnm("libxml").eqs."" 
+$   then 
+$     globfile = f$search("[...]globals.h")
+$     if globfile.nes.""
+$     then
+$	write sys$output "Can't locate globals.h.  You need to define a LIBXML logical"
+$	exit
+$     else
+$	includedir = f$element(0,"]",globfile)+ "]"
+$	define/process libxml "''includedir'"
+$       write sys$output "Defining libxml as ""''includedir'"""
+$     endif
+$   endif
+$!
+$!- set up error handling (such as it is) -------------------------------------
+$!
+$ exit_status = 1
+$ saved_default = f$environment("default")
+$ on error then goto ERROR_OUT 
+$ on control_y then goto ERROR_OUT 
+$!
+$!- move to the source directory and create any necessary subdirs and the 
+$!  object library
+$!
+$ set def xml_srcdir
+$ if f$search("DEBUG.DIR").eqs."" then create/dir [.DEBUG]
+$ if f$search("LIBXML.OLB").eqs."" then library/create LIBXML.OLB
+$!
+$ goto start_here
+$ start_here:	  ! move this line to debug/rerun parts of this command file
+$!
+$!- compile modules into the library ------------------------------------------
+$!
+$ lib_command   = "LIBRARY/REPLACE LIBXML.OLB"
+$ link_command	= ""
+$!
+$ write sys$output ""
+$ write sys$output "Building modules into the LIBXML object library"
+$ write sys$output ""
+$!
+$ s_no = 0
+$ sources = f$edit(sources,"COMPRESS")
+$!
+$ source_loop:
+$!
+$   next_source = f$element (S_no," ",sources)
+$   if next_source.nes."" .and. next_source.nes." "
+$   then
+$!
+$     if next_source.eqs."xpath.c"
+$     then
+$	call build 'next_source' /IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE
+$     else
+$       call build 'next_source'
+$     endif
+$     s_no = s_no + 1
+$     goto source_loop
+$!
+$   endif
+$!
+$!- now build self-test programs ----------------------------------------------
+$!
+$! these pograms are built as ordinary modules into LIBXML.OLB.  Here they
+$! are built a second time with /DEFINE=(STANDALONE) in which case a main()
+$! is also compiled into the module
+$ 
+$ lib_command	= ""
+$ link_command	= "LINK"
+$!
+$ write sys$output ""
+$ write sys$output "Building STANDALONE self-test programs"
+$ write sys$output ""
+$!
+$ call build NANOFTP.C	/DEFINE=(STANDALONE)
+$ call build NANOHTTP.C	/DEFINE=(STANDALONE)
+$ call build TRIONAN.C	/DEFINE=(STANDALONE)/IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE
+$!
+$!- now build main and test programs ------------------------------------------
+$!
+$!
+$ lib_command	= ""
+$ link_command	= "LINK"
+$!
+$ write sys$output ""
+$ write sys$output "Building main programs and test programs"
+$ write sys$output ""
+$!
+$ p_no = 0
+$ all_progs = bin_progs + " " + test_progs
+$ all_progs = f$edit(all_progs,"COMPRESS")
+$!
+$ prog_loop:
+$!
+$   next_prog = f$element (p_no," ",all_progs)
+$   if next_prog.nes."" .and. next_prog.nes." "
+$   then
+$!
+$     call build 'next_prog'.c /IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE
+$     p_no = p_no + 1
+$     goto prog_loop
+$!
+$   endif
+$!
+$!- Th-th-th-th-th-that's all folks! ------------------------------------------
+$!
+$ exit       
+$ goto exit_out
+$!
+$!
+$EXIT_OUT:
+$!
+$ purge/nolog [.debug]
+$ set def 'saved_default
+$ exit 'exit_status
+$!
+$
+$ERROR_OUT:
+$ exit_status = $status
+$ write sys$output "''f$message(exit_status)'"
+$ goto EXIT_OUT
+$!
+$!- the BUILD subroutine.  Compile then insert into library or link as required
+$!
+$BUILD: subroutine
+$   on warning then goto EXIT_BUILD
+$   source_file = p1
+$   name = f$element(0,".",source_file)
+$   object_file = f$fao("[.debug]!AS.OBJ",name)
+$!
+$!- compile
+$   write sys$output "Compiling ",p1,p2,"..."
+$   cc_command /object='object_file 'source_file' 'p2'
+$!
+$!- insert into library if command defined
+$   if lib_command.nes.""  then lib_command 'object_file'
+$!
+$!- link module if command defined
+$   if link_command.nes."" 
+$   then
+$	text = f$element(0,".",p1)	! lose the ".c"
+$	write sys$output "Linking ",text,"..."
+$	link_command 'object_file',-
+      		[]libxml.olb/library
+$   endif
+$!
+$EXIT_BUILD:
+$   exit $status
+$!
+$endsubroutine
diff --git a/xmlIO.c b/xmlIO.c
index 86b4701..fac9132 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -122,6 +122,56 @@
 static int xmlOutputCallbackNr = 0;
 static int xmlOutputCallbackInitialized = 0;
 
+/**
+ * xmlCleanupInputCallbacks:
+ *
+ * clears the entire input callback table. this includes the
+ * compiled-in I/O. 
+ */
+void
+xmlCleanupInputCallbacks(void)
+{
+    int i;
+
+    if (!xmlInputCallbackInitialized)
+        return;
+
+    for (i = xmlInputCallbackNr - 1; i <= 0; i--) {
+        xmlInputCallbackTable[i].matchcallback = NULL;
+        xmlInputCallbackTable[i].opencallback = NULL;
+        xmlInputCallbackTable[i].readcallback = NULL;
+        xmlInputCallbackTable[i].closecallback = NULL;
+    }
+
+    xmlInputCallbackNr = 0;
+    xmlInputCallbackInitialized = 0;
+}
+
+/**
+ * xmlCleanupOutputCallbacks:
+ *
+ * clears the entire output callback table. this includes the
+ * compiled-in I/O callbacks. 
+ */
+void
+xmlCleanupOutputCallbacks(void)
+{
+    int i;
+
+    if (!xmlOutputCallbackInitialized)
+        return;
+
+    for (i = xmlOutputCallbackNr - 1; i <= 0; i--) {
+        xmlOutputCallbackTable[i].matchcallback = NULL;
+        xmlOutputCallbackTable[i].opencallback = NULL;
+        xmlOutputCallbackTable[i].writecallback = NULL;
+        xmlOutputCallbackTable[i].closecallback = NULL;
+    }
+
+    xmlOutputCallbackNr = 0;
+    xmlOutputCallbackInitialized = 0;
+}
+
 /************************************************************************
  *									*
  *		Standard I/O for file accesses				*