New batch of patches by Jeff Rush; moved his readme.txt portion here.
diff --git a/PC/os2vacpp/config.c b/PC/os2vacpp/config.c
index 5f7ad91..3e7adf9 100644
--- a/PC/os2vacpp/config.c
+++ b/PC/os2vacpp/config.c
@@ -63,6 +63,7 @@
 extern void initthread();
 extern void initcStringIO();
 extern void initcPickle();
+extern void initpcre();
 #ifdef WIN32
 extern void initmsvcrt();
 #endif
@@ -113,6 +114,7 @@
 #endif
         {"cStringIO", initcStringIO},
         {"cPickle", initcPickle},
+        {"pcre", initpcre},
 #ifdef WIN32
         {"msvcrt", initmsvcrt},
 #endif
diff --git a/PC/os2vacpp/config.h b/PC/os2vacpp/config.h
index 19438f5..ad7626b 100644
--- a/PC/os2vacpp/config.h
+++ b/PC/os2vacpp/config.h
@@ -74,11 +74,6 @@
 /* Configuration Options for Finding Modules */
 #define PREFIX                 ""
 #define EXEC_PREFIX            ""
-//#define VPATH "."
-
-//#define PYTHONPATH PREFIX "/lib/python" VERSION DELIM \
-//	           PREFIX "/lib/python" VERSION "/test" DELIM \
-//	      EXEC_PREFIX "/lib/python" VERSION "/sharedmodules"
 
 /***************************************************/
 /*    32-Bit IBM VisualAge C/C++ v3.0 for OS/2     */
@@ -91,7 +86,7 @@
   #define PYCC_VACPP /* Define Indicator of C Compiler */
 
   /* Platform Filesystem */
-  #define PYTHONPATH ".;.\\lib;.\\lib\\plat-os2;.\\lib\\dos_8x3;.\\lib\\lib-tk"
+  #define PYTHONPATH ".;.\\lib;.\\lib\\plat-win;.\\lib\\dos-8x3;.\\lib\\lib-tk"
   #define DOSFILESYS /* OS/2 Uses the DOS File Naming Conventions */
   /* #define IMPORT_8x3_NAMES */
 
@@ -483,7 +478,7 @@
 /* #define WITH_READLINE 1 */
 
 /* Define if you have clock.  */
-/* #define HAVE_CLOCK */
+#define HAVE_CLOCK
 
 /* Define if you have ftime.  */
 #define HAVE_FTIME
@@ -540,7 +535,7 @@
 /* #undef HAVE_TCSETPGRP */
 
 /* Define if you have times.  */
-/* #undef HAVE_TIMES */
+#define HAVE_TIMES
 
 /* Define if you have uname.  */
 /* #undef HAVE_UNAME */
diff --git a/PC/os2vacpp/getpathp.c b/PC/os2vacpp/getpathp.c
index 2cfba16..69e38cb 100644
--- a/PC/os2vacpp/getpathp.c
+++ b/PC/os2vacpp/getpathp.c
@@ -50,7 +50,11 @@
 
 /* Search in some common locations for the associated Python libraries.
  *
- * This version always returns "" for both prefix and exec_prefix.
+ * Two directories must be found, the platform independent directory
+ * (prefix), containing the common .py and .pyc files, and the platform
+ * dependent directory (exec_prefix), containing the shared library
+ * modules.  Note that prefix and exec_prefix can be the same directory,
+ * but for some installations, they are different.
  *
  * Py_GetPath() tries to return a sensible Python module search path.
  *
@@ -75,6 +79,7 @@
 #endif
 
 static char prefix[MAXPATHLEN+1];
+static char exec_prefix[MAXPATHLEN+1];
 static char progpath[MAXPATHLEN+1];
 static char *module_search_path = NULL;
 
@@ -345,9 +350,21 @@
 		else
 			pythonhome = NULL;
 	}
-	else
+	else {
+        char *delim;
+
 		strcpy(prefix, pythonhome);
 
+        /* Extract Any Optional Trailing EXEC_PREFIX */
+        /* e.g. PYTHONHOME=<prefix>:<exec_prefix>   */
+        delim = strchr(prefix, DELIM);
+        if (delim) {
+            *delim = '\0';
+            strcpy(exec_prefix, delim+1);
+        } else
+            strcpy(exec_prefix, EXEC_PREFIX);
+    }
+
 	if (envpath && *envpath == '\0')
 		envpath = NULL;
 
@@ -475,7 +492,10 @@
 char *
 Py_GetExecPrefix()
 {
-	return Py_GetPrefix();
+	if (!module_search_path)
+		calculate_path();
+
+	return exec_prefix;
 }
 
 char *
diff --git a/PC/os2vacpp/makefile b/PC/os2vacpp/makefile
index cecbe96..d609d50 100644
--- a/PC/os2vacpp/makefile
+++ b/PC/os2vacpp/makefile
@@ -165,6 +165,9 @@
                   $(PATHOBJ)\MD5Module.obj     \
                   $(PATHOBJ)\NewModule.obj     \
                   $(PATHOBJ)\Operator.obj      \
+                  $(PATHOBJ)\PCREModule.obj    \
+                  $(PATHOBJ)\PyPCRE.obj        \
+                  $(PATHOBJ)\RotorModule.obj   \
                   $(PATHOBJ)\PosixModule.obj   \
                   $(PATHOBJ)\RegexModule.obj   \
                   $(PATHOBJ)\RegExpr.obj       \
@@ -197,7 +200,7 @@
 		# /Q   = Omit IBM Copyright
 		# /W2  = Show Warnings/Errors Only
 
-_GEN		= /G4 /Gm /Gd
+_GEN		= /G4 /Gm /Gd-
 		# /G4  = Generate Code for 486 (Use 386 for Debugger)
 		# /Gm  = Use Multithread Runtime
 		# /Gd  = Dynamically Load Runtime
@@ -208,7 +211,8 @@
 		# /Gu  = Advise Linker All Ext Data is ID'd
 		# /Gl  = Have Linker Remove Unused Fns
 
-_DBG		= /DHAVE_CONFIG_H /DUSE_SOCKET
+_DBG		= /Wpro- /Ti- /DHAVE_CONFIG_H /DUSE_SOCKET
+                # /Wpro= Generate Compiler Warnings re Missing Prototypes
 		# /Ti  = Embed Debugger/Analyzer Recs
 		# /Tm  = Enable Debug Memory Fns
 		# /Tx  = Request Full Dump Upon Exception
diff --git a/PC/os2vacpp/readme.txt b/PC/os2vacpp/readme.txt
new file mode 100644
index 0000000..f805232
--- /dev/null
+++ b/PC/os2vacpp/readme.txt
@@ -0,0 +1,114 @@
+IBM VisualAge C/C++ for OS/2

+============================

+

+To build Python for OS/2, change into ./os2vacpp and issue an 'NMAKE'

+command.  This will build a PYTHON15.DLL containing the set of Python

+modules listed in config.c and a small PYTHON.EXE to start the

+interpreter.

+

+By changing the C compiler flag /Gd- in the makefile to /Gd+, you can

+reduce the size of these by causing Python to dynamically link to the

+C runtime DLLs instead of including their bulk in your binaries. 

+However, this means that any system on which you run Python must have

+the VAC++ compiler installed in order to have those DLLs available.

+

+During the build process you may see a couple of harmless warnings:

+

+  From the C Compiler, "No function prototype given for XXX", which

+  comes from the use of K&R parameters within Python for portability.

+

+  From the ILIB librarian, "Module Not Found (XXX)", which comes

+  from its attempt to perform the (-+) operation, which removes and

+  then adds a .OBJ to the library.  The first time a build is done,

+  it obviously cannot remove what is not yet built.

+

+This build includes support for most Python functionality as well as

+TCP/IP sockets.  It omits the Posix ability to 'fork' a process but

+supports threads using OS/2 native capabilities.  I have tried to

+support everything possible but here are a few usage notes.

+

+

+-- os.popen() Usage Warnings

+

+With respect to my implementation of popen() under OS/2:

+

+    import os

+

+    fd = os.popen("pkzip.exe -@ junk.zip", 'wb')

+    fd.write("file1.txt\n")

+    fd.write("file2.txt\n")

+    fd.write("file3.txt\n")

+    fd.write("\x1a")  # Should Not Be Necessary But Is

+    fd.close()

+

+There is a bug, either in the VAC++ compiler or OS/2 itself, where the

+simple closure of the write-side of a pipe -to- a process does not

+send an EOF to that process.  I find I must explicitly write a

+control-Z (EOF) before closing the pipe.  This is not a problem when

+using popen() in read mode.

+

+One other slight difference with my popen() is that I return None

+from the close(), instead of the Unix convention of the return code

+of the spawned program.  I could find no easy way to do this under

+OS/2.

+

+

+-- BEGINLIBPATH/ENDLIBPATH

+

+With respect to environment variables, this OS/2 port supports the

+special-to-OS/2 magic names of 'BEGINLIBPATH' and 'ENDLIBPATH' to

+control where to load conventional DLLs from.  Those names are

+intercepted and converted to calls on the OS/2 kernel APIs and

+are inherited by child processes, whether Python-based or not.

+

+A few new attributes have been added to the os module:

+

+    os.meminstalled  # Count of Bytes of RAM Installed on Machine

+    os.memkernel     # Count of Bytes of RAM Reserved (Non-Swappable)

+    os.memvirtual    # Count of Bytes of Virtual RAM Possible

+    os.timeslice     # Duration of Scheduler Timeslice, in Milliseconds

+    os.maxpathlen    # Maximum Length of a Path Specification, in chars

+    os.maxnamelen    # Maximum Length of a Single Dir/File Name, in chars

+    os.version       # Version of OS/2 Being Run e.g. "4.00"

+    os.revision      # Revision of OS/2 Being Run (usually zero)

+    os.bootdrive     # Drive that System Booted From e.g. "C:"

+                     # (useful to find the CONFIG.SYS used to boot with)

+

+

+-- Using Python as the Default OS/2 Batch Language

+

+Note that OS/2 supports the Unix technique of putting the special

+comment line at the time of scripts e.g. "#!/usr/bin/python" in

+a different syntactic form.  To do this, put your script into a file

+with a .CMD extension and added 'extproc' to the top as follows:

+

+    extproc C:\Python\Python.exe -x

+    import os

+    print "Hello from Python"

+

+The '-x' option tells Python to skip the first line of the file

+while processing the rest as normal Python source.

+

+

+-- Suggested Environment Variable Setup

+

+With respect to the environment variables for Python, I use the

+following setup:

+

+    Set PYTHONHOME=E:\Tau\Projects\Python;D:\DLLs

+    Set PYTHONPATH=.;E:\Tau\Projects\Python\Lib; \

+                     E:\Tau\Projects\Python\Lib\plat-win

+

+The EXEC_PREFIX (optional second pathspec on PYTHONHOME) is where

+you put any Python extension DLLs you may create/obtain.  There

+are none provided with this release.

+

+

+-- Contact Info

+

+If you have questions, suggestions or problems specifically with

+the OS/2 VAC++ port of Python, please contact me at:

+

+    Jeff Rush <jrush@summit-research.com>.

+

+I support no other platform but OS/2 (and eventually AmigaDOS).