From 752fa4fc538dba1f327b2575362a2e3aa324db89 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?U-WIN-U2045GN0RNQ=5CV=C3=ADtor=20Santos=20Costa?=
 <VĂ­tor Santos Costa@WIN-U2045GN0RNQ.(none)>
Date: Wed, 9 Mar 2011 00:02:21 +0000
Subject: [PATCH] support windows compilation, upgrade to current uxnt.

---
 Makefile.in                         | 42 ++++++++++++++---------------
 packages/CLPBN/clpbn/bp/Makefile.in |  2 +-
 packages/PLStream/pl-incl.h         | 18 +++----------
 packages/PLStream/windows/uxnt.c    | 39 ++++++++++++++++-----------
 packages/PLStream/windows/uxnt.h    |  4 +--
 packages/tai/Makefile.in            |  2 +-
 pl/boot.yap                         |  1 -
 pl/control.yap                      |  0
 8 files changed, 53 insertions(+), 55 deletions(-)
 mode change 100644 => 100755 packages/CLPBN/clpbn/bp/Makefile.in
 mode change 100644 => 100755 packages/PLStream/windows/uxnt.h
 mode change 100644 => 100755 pl/control.yap

diff --git a/Makefile.in b/Makefile.in
index f36ebaa98..d7dfd8125 100755
--- a/Makefile.in
+++ b/Makefile.in
@@ -554,70 +554,70 @@ pl-ntmain.o: $(srcdir)/console/LGPL/pl-ntmain.c config.h
 	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/console/LGPL/pl-ntmain.c -o $@
 
 pl-buffer.o: $(srcdir)/packages/PLStream/pl-buffer.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-buffer.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows  $(srcdir)/packages/PLStream/pl-buffer.c -o $@
 
 pl-codelist.o: $(srcdir)/packages/PLStream/pl-codelist.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-codelist.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-codelist.c -o $@
 
 pl-ctype.o: $(srcdir)/packages/PLStream/pl-ctype.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-ctype.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-ctype.c -o $@
 
 pl-dtoa.o: $(srcdir)/packages/PLStream/pl-dtoa.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-dtoa.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-dtoa.c -o $@
 
 pl-error.o: $(srcdir)/packages/PLStream/pl-error.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-error.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-error.c -o $@
 
 pl-file.o: $(srcdir)/packages/PLStream/pl-file.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-file.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-file.c -o $@
 
 pl-files.o: $(srcdir)/packages/PLStream/pl-files.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-files.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-files.c -o $@
 
 pl-fmt.o: $(srcdir)/packages/PLStream/pl-fmt.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-fmt.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-fmt.c -o $@
 
 pl-glob.o: $(srcdir)/packages/PLStream/pl-glob.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-glob.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-glob.c -o $@
 
 pl-option.o: $(srcdir)/packages/PLStream/pl-option.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-option.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-option.c -o $@
 
 pl-os.o: $(srcdir)/packages/PLStream/pl-os.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-os.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-os.c -o $@
 
 pl-privitf.o: $(srcdir)/packages/PLStream/pl-privitf.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-privitf.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-privitf.c -o $@
 
 pl-rl.o: $(srcdir)/packages/PLStream/pl-rl.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-rl.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-rl.c -o $@
 
 pl-read.o: $(srcdir)/packages/PLStream/pl-read.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-read.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-read.c -o $@
 
 pl-stream.o: $(srcdir)/packages/PLStream/pl-stream.c
 	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-stream.c -o $@
 
 pl-string.o: $(srcdir)/packages/PLStream/pl-string.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-string.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-string.c -o $@
 
 pl-table.o: $(srcdir)/packages/PLStream/pl-table.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-table.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-table.c -o $@
 
 pl-text.o: $(srcdir)/packages/PLStream/pl-text.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-text.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-text.c -o $@
 
 pl-utf8.o: $(srcdir)/packages/PLStream/pl-utf8.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-utf8.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-utf8.c -o $@
 
 pl-write.o: $(srcdir)/packages/PLStream/pl-write.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-write.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-write.c -o $@
 
 pl-yap.o: $(srcdir)/packages/PLStream/pl-yap.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/pl-yap.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/pl-yap.c -o $@
 
 uxnt.o: $(srcdir)/packages/PLStream/windows/uxnt.c
-	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream $(srcdir)/packages/PLStream/windows/uxnt.c -o $@
+	$(CC) -c $(CFLAGS) -I$(srcdir)/include  -I$(srcdir)  -I$(srcdir)/packages/PLStream -I$(srcdir)/packages/PLStream/windows $(srcdir)/packages/PLStream/windows/uxnt.c -o $@
 
 # default rule
 %.o : $(srcdir)/C/%.c config.h
diff --git a/packages/CLPBN/clpbn/bp/Makefile.in b/packages/CLPBN/clpbn/bp/Makefile.in
old mode 100644
new mode 100755
index cd96942bb..3907e5509
--- a/packages/CLPBN/clpbn/bp/Makefile.in
+++ b/packages/CLPBN/clpbn/bp/Makefile.in
@@ -92,7 +92,7 @@ xmlParser.o : $(srcdir)/xmlParser/xmlParser.cpp
 	$(CXX) -c $(CXXFLAGS) $< -o $@
 
 @DO_SECOND_LD@horus.@SO@: $(OBJS)
-@DO_SECOND_LD@	@SHLIB_CXX_LD@ -o horus.@SO@ $(OBJS)
+@DO_SECOND_LD@	@SHLIB_CXX_LD@ -o horus.@SO@ $(OBJS) @EXTRA_LIBS_FOR_SWIDLLS@
 
 biftest: $(BIF_OBJS)
 	$(CXX) -o biftest $(BIF_OBJS)
diff --git a/packages/PLStream/pl-incl.h b/packages/PLStream/pl-incl.h
index ba62a5958..b3b460e29 100755
--- a/packages/PLStream/pl-incl.h
+++ b/packages/PLStream/pl-incl.h
@@ -16,6 +16,10 @@
 #endif
 
 #include "Yap.h"
+#ifdef __WINDOWS__
+#include <windows.h>
+#include <uxnt.h>
+#endif
 #include "YapHeap.h"
 /* try not to pollute the SWI space */
 #ifdef P
@@ -138,9 +142,6 @@ typedef enum
 #if HAVE_SYS_PARAM_H
 #include <sys/param.h> //MAXPATHLEN
 #endif
-#ifdef __WINDOWS__
-#include <windows.h>
-#endif
 #if __YAP_PROLOG__
 #include "pl-yap.h"
 #if _WIN32
@@ -583,17 +584,6 @@ typedef double			real;
 
 /* uxnt package interface */
 #if defined(__YAP_PROLOG__) && defined(__MINGW32__)
-#define O_XOS 1
-
-#define _XOS_ISFILE	0x01
-#define _XOS_ISDIR	0x02
-
-#define _XOS_FILE	0x0001		/* is a file */
-#define _XOS_DIR	0x0002		/* is a directory */
-
-#define XOS_DOWNCASE	0x01		/* _xos_canonical_filename() */
-
-#define statfunc	stat
 
 #ifndef __WINDOWS__
 #define __WINDOWS__ 1
diff --git a/packages/PLStream/windows/uxnt.c b/packages/PLStream/windows/uxnt.c
index e2f0eae4b..27f878d6a 100755
--- a/packages/PLStream/windows/uxnt.c
+++ b/packages/PLStream/windows/uxnt.c
@@ -26,6 +26,9 @@
 #define _UNICODE 1
 
 #define _UXNT_KERNEL 1
+#include "uxnt.h"			/* my prototypes */
+#include "utf8.c"
+
 #include <windows.h>
 #include <tchar.h>
 #include <wchar.h>
@@ -44,9 +47,6 @@
 #endif
 #include <errno.h>
 
-#include "uxnt.h"			/* my prototypes */
-#include "utf8.c"
-
 #ifndef TRUE
 #define TRUE 1
 #define FALSE 0
@@ -293,7 +293,7 @@ _xos_os_filename(const char *cname, char *osname, size_t len)
 
   if ( !_xos_os_filenameW(cname, buf, PATH_MAX) )
     return NULL;
-  
+
   return wcstoutf8(osname, buf, len);
 }
 
@@ -319,7 +319,7 @@ _xos_canonical_filenameW(const wchar_t *spec,
 
   for(; *s; s++)
   { int c = *s;
-    
+
     if ( c == '\\' )
     { c = '/';
     } else if ( (flags&XOS_DOWNCASE) )
@@ -344,7 +344,7 @@ _xos_canonical_filename(const char *spec, char *xname, size_t len, int flags)
 
   if ( !utf8towcs(buf, spec, PATH_MAX) )
     return NULL;
-  
+
   return _xos_canonical_filenameW(buf, xname, len, flags);
 }
 
@@ -521,7 +521,7 @@ _xos_limited_os_filename(const char *spec, char *limited)
 
   while(*i)
   { int wc;
-  
+
     i = utf8_get_char(i, &wc);
     wc = towlower((wchar_t)wc);
     o = utf8_put_char(o, wc);
@@ -541,7 +541,7 @@ _xos_open(const char *path, int access, ...)
 { va_list args;
   TCHAR buf[PATH_MAX];
   int mode;
-  
+
   va_start(args, access);
   mode = va_arg(args, int);
   va_end(args);
@@ -647,18 +647,22 @@ _xos_rename(const char *old, const char *new)
        !_xos_os_filenameW(new, osnew, PATH_MAX) )
     return -1;
 
-  return _wrename(osold, osnew);
+  if ( MoveFileEx(osold, osnew, MOVEFILE_REPLACE_EXISTING) )
+    return 0;
+
+  errno = EPERM;
+  return -1;				/* TBD: map error codes */
 }
 
 
 int
-_xos_stat(const char *path, struct _stat *sbuf)
+_xos_stat(const char *path, struct _stati64 *sbuf)
 { TCHAR buf[PATH_MAX];
 
    if ( !_xos_os_filenameW(path, buf, PATH_MAX) )
     return -1;
-  
-  return _wstat(buf, sbuf);
+
+  return _wstati64(buf, sbuf);
 }
 
 
@@ -699,11 +703,14 @@ opendir(const char *path)
   DIR *dp = malloc(sizeof(DIR));
 
   if ( !_xos_os_filenameW(path, buf, PATH_MAX-4) )
+  { free(dp);
     return NULL;
+  }
   _tcscat(buf, _T("\\*.*"));
-  
+
   if ( !(dp->data = malloc(sizeof(WIN32_FIND_DATA))) )
-  { errno = ENOMEM;
+  { free(dp);
+    errno = ENOMEM;
     return NULL;
   }
   dp->first = 1;
@@ -712,6 +719,7 @@ opendir(const char *path)
   if ( dp->handle == INVALID_HANDLE_VALUE )
   { if ( _waccess(buf, 04) )		/* does not exist */
     { free(dp->data);
+      free(dp);
       return NULL;
     }
   }
@@ -825,6 +833,7 @@ _xos_getcwd(char *buf, size_t len)
   return NULL;
 }
 
+
 		 /*******************************
 		 *	    ENVIRONMENT		*
 		 *******************************/
@@ -853,7 +862,7 @@ _xos_getenv(const char *name, char *buf, size_t buflen)
       rc = strlen(buf);
     else
       rc = wcutf8len(valp);
-    
+
     if ( valp != val )
       free(valp);
 
diff --git a/packages/PLStream/windows/uxnt.h b/packages/PLStream/windows/uxnt.h
old mode 100644
new mode 100755
index 09ae6764c..5c11227fd
--- a/packages/PLStream/windows/uxnt.h
+++ b/packages/PLStream/windows/uxnt.h
@@ -33,6 +33,7 @@
 #endif
 
 #include <sys/types.h>
+#include <sys/stat.h>
 #include <stdio.h>
 #include <io.h>
 #include <direct.h>
@@ -45,7 +46,6 @@ typedef intptr_t ssize_t;		/* signed version of size_t */
 #endif
 
 #ifndef _UXNT_KERNEL
-#include <sys/stat.h>
 
 #undef remove
 #undef rename
@@ -133,7 +133,7 @@ _export int	_xos_access(const char *path, int mode);
 _export int	_xos_chmod(const char *path, int mode);
 _export int	_xos_remove(const char *path);
 _export int	_xos_rename(const char *old, const char *newname);
-_export int	_xos_stat(const char *path, struct _stat *sbuf);
+_export int	_xos_stat(const char *path, struct _stati64 *sbuf);
 _export int	_xos_chdir(const char *path);
 _export int	_xos_mkdir(const char *path, int mode);
 _export int	_xos_rmdir(const char *path);
diff --git a/packages/tai/Makefile.in b/packages/tai/Makefile.in
index b7dc4c8ce..d4164eee3 100755
--- a/packages/tai/Makefile.in
+++ b/packages/tai/Makefile.in
@@ -20,7 +20,7 @@ YAPLIBDIR=@libdir@/Yap
 #
 DEFS=@DEFS@ -D_YAP_NOT_INSTALLED_=1
 CC=@CC@
-CFLAGS= @SHLIB_CFLAGS@ $(YAP_EXTRAS) $(DEFS) -I$(srcdir) -I../.. -I$(srcdir)/../../include -I$(srcdir)/../PLStream -I$(srcdir)/../../H
+CFLAGS= @SHLIB_CFLAGS@ $(YAP_EXTRAS) $(DEFS) -I$(srcdir) -I../.. -I$(srcdir)/../../include -I$(srcdir)/../PLStream -I$(srcdir)/../PLStream/windows -I$(srcdir)/../../H
 #
 #
 # You shouldn't need to change what follows.
diff --git a/pl/boot.yap b/pl/boot.yap
index 345bcfb23..5e603742a 100755
--- a/pl/boot.yap
+++ b/pl/boot.yap
@@ -238,7 +238,6 @@ true :- true.
 % then we can execute the programs.
 '$startup_goals' :-
 	recorded('$startup_goal',G,_),
-writeln(G),
 	'$current_module'(Module),
 	'$system_catch'('$query'(once(G), []),Module,Error,user:'$Error'(Error)),
 	fail.
diff --git a/pl/control.yap b/pl/control.yap
old mode 100644
new mode 100755