applied patch from Marcin 'Shard' Konicki to provide BeOS thread support.

* nanoftp.c nanohttp.c testThreads.c threads.c: applied patch from
  Marcin 'Shard' Konicki to provide BeOS thread support.
Daniel
diff --git a/testThreads.c b/testThreads.c
index 24633ee..d740a14 100644
--- a/testThreads.c
+++ b/testThreads.c
@@ -7,7 +7,11 @@
 #include <libxml/threads.h>
 #include <libxml/parser.h>
 #include <libxml/catalog.h>
+#ifdef HAVE_PTHREAD_H
 #include <pthread.h>
+#elif defined HAVE_BEOS_THREADS
+#include <OS.h>
+#endif
 #include <string.h>
 #if !defined(_MSC_VER)
 #include <unistd.h>
@@ -15,7 +19,11 @@
 #include <assert.h>
 
 #define	MAX_ARGC	20
+#ifdef HAVE_PTHREAD_H
 static pthread_t tid[MAX_ARGC];
+#elif defined HAVE_BEOS_THREADS
+static thread_id tid[MAX_ARGC];
+#endif
 
 static const char *catalog = "test/threads/complex.xml";
 static const char *testfiles[] = {
@@ -83,6 +91,7 @@
     return ((void *) Okay);
 }
 
+#ifdef HAVE_PTHREAD_H
 int
 main(void)
 {
@@ -125,6 +134,62 @@
     xmlMemoryDump();
     return (0);
 }
+#elif defined HAVE_BEOS_THREADS
+int
+main(void)
+{
+    unsigned int i, repeat;
+    unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
+    void *results[MAX_ARGC];
+    status_t ret;
+
+    xmlInitParser();
+    printf("Parser initialized\n");
+    for (repeat = 0;repeat < 500;repeat++) {
+    printf("repeat: %d\n",repeat);
+	xmlLoadCatalog(catalog);
+	printf("loaded catalog: %s\n", catalog);
+	for (i = 0; i < num_threads; i++) {
+	    results[i] = NULL;
+	    tid[i] = (thread_id) -1;
+	}
+	printf("cleaned threads\n");
+	for (i = 0; i < num_threads; i++) {
+		tid[i] = spawn_thread(thread_specific_data, "xmlTestThread", B_NORMAL_PRIORITY, (void *) testfiles[i]);
+		if (tid[i] < B_OK) {
+			perror("beos_thread_create");
+			exit(1);
+		}
+		printf("beos_thread_create %d -> %d\n", i, tid[i]);
+	}
+	for (i = 0; i < num_threads; i++) {
+	    ret = wait_for_thread(tid[i], &results[i]);
+	    printf("beos_thread_wait %d -> %d\n", i, ret);
+	    if (ret != B_OK) {
+			perror("beos_thread_wait");
+			exit(1);
+	    }
+	}
+
+	xmlCatalogCleanup();
+	ret = B_OK;
+	for (i = 0; i < num_threads; i++)
+	    if (results[i] != (void *) Okay) {
+			printf("Thread %d handling %s failed\n", i, testfiles[i]);
+			ret = B_ERROR;
+		}
+    }
+    xmlCleanupParser();
+    xmlMemoryDump();
+
+	if (ret == B_OK)
+		printf("testThread : BeOS : SUCCESS!\n");
+	else
+		printf("testThread : BeOS : FAILED!\n");
+
+    return (0);
+}
+#endif /* pthreads or BeOS threads */
 
 #else /* !LIBXML_THREADS_ENABLED */
 int