Patch #708495: Port more stuff to OpenVMS.
diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c
index 61674ba..af23f80 100644
--- a/Python/dynload_shlib.c
+++ b/Python/dynload_shlib.c
@@ -40,16 +40,27 @@
 	{".pyd", "rb", C_EXTENSION},
 	{".dll", "rb", C_EXTENSION},
 #else
+#ifdef __VMS
+        {".exe", "rb", C_EXTENSION},
+        {".EXE", "rb", C_EXTENSION},
+        {"module.exe", "rb", C_EXTENSION},
+        {"MODULE.EXE", "rb", C_EXTENSION},
+#else
 	{".so", "rb", C_EXTENSION},
 	{"module.so", "rb", C_EXTENSION},
 #endif
 #endif
+#endif
 	{0, 0}
 };
 
 static struct {
 	dev_t dev;
+#ifdef __VMS
+	ino_t ino[3];
+#else
 	ino_t ino;
+#endif
 	void *handle;
 } handles[128];
 static int nhandles = 0;
@@ -87,7 +98,13 @@
 		}
 		if (nhandles < 128) {
 			handles[nhandles].dev = statb.st_dev;
+#ifdef __VMS
+			handles[nhandles].ino[0] = statb.st_ino[0];
+			handles[nhandles].ino[1] = statb.st_ino[1];
+			handles[nhandles].ino[2] = statb.st_ino[2];
+#else
 			handles[nhandles].ino = statb.st_ino;
+#endif
 		}
 	}
 
@@ -98,6 +115,17 @@
 	if (Py_VerboseFlag)
 		printf("dlopen(\"%s\", %x);\n", pathname, dlopenflags);
 
+#ifdef __VMS
+	/* VMS currently don't allow a pathname, use a logical name instead */
+	/* Concatenate 'python_module_' and shortname */
+	/* so "import vms.bar" will use the logical python_module_bar */
+	/* As C module use only one name space this is probably not a */
+	/* important limitation */
+	PyOS_snprintf(pathbuf, sizeof(pathbuf), "python_module_%-.200s", 
+		      shortname);
+	pathname = pathbuf;
+#endif
+
 	handle = dlopen(pathname, dlopenflags);
 
 	if (handle == NULL) {
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 50b9912..d06d18a 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -32,6 +32,10 @@
 extern const char *PyWin_DLLVersionString;
 #endif
 
+#ifdef __VMS
+#include <unixlib.h>
+#endif
+
 PyObject *
 PySys_GetObject(char *name)
 {
@@ -1050,7 +1054,22 @@
 	if (av != NULL) {
 		int i;
 		for (i = 0; i < argc; i++) {
+#ifdef __VMS
+			PyObject *v;
+
+			/* argv[0] is the script pathname if known */
+			if (i == 0) {
+				char* fn = decc$translate_vms(argv[0]);
+				if ((fn == (char *)0) || fn == (char *)-1)
+					v = PyString_FromString(argv[0]);
+				else
+					v = PyString_FromString(
+						decc$translate_vms(argv[0]));
+			} else
+				v = PyString_FromString(argv[i]);
+#else
 			PyObject *v = PyString_FromString(argv[i]);
+#endif
 			if (v == NULL) {
 				Py_DECREF(av);
 				av = NULL;