Added popen().
Added getmtime() function for use by ".pyc" processing.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index ad46b66..3a1d4ba 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -427,7 +427,7 @@
 
 #ifndef MSDOS
 
-/* Process Primitives */
+/* Process operations */
 
 static object *
 posix__exit(self, args)
@@ -545,6 +545,26 @@
 }
 
 static object *
+posix_popen(self, args)
+	object *self;
+	object *args;
+{
+	extern int pclose PROTO((FILE *));
+	object *name, *mode;
+	FILE *fp;
+	if (args == NULL || !is_tupleobject(args) || gettuplesize(args) != 2 ||
+		!is_stringobject(name = gettupleitem(args, 0)) ||
+		!is_stringobject(mode = gettupleitem(args, 1))) {
+		err_setstr(TypeError, "open() requires 2 string arguments");
+		return NULL;
+	}
+	fp = popen(getstringvalue(name), getstringvalue(mode));
+	if (fp == NULL)
+		return posix_error();
+	return newopenfileobject(fp, name, mode, pclose);
+}
+
+static object *
 posix_wait(self, args) /* Also waitpid() */
 	object *self;
 	object *args;
@@ -644,6 +664,7 @@
 	{"getpid",	posix_getpid},
 	{"getppid",	posix_getppid},
 	{"kill",	posix_kill},
+	{"popen",	posix_popen},
 	{"wait",	posix_wait},
 #endif
 #ifndef NO_LSTAT
@@ -675,6 +696,21 @@
 		fatal("can't define posix.error");
 }
 
+
+/* Function used elsewhere to get a file's modification time */
+
+long
+getmtime(path)
+	char *path;
+{
+	struct stat st;
+	if (stat(path, &st) != 0)
+		return -1;
+	else
+		return st.st_mtime;
+}
+
+
 #ifdef MSDOS
 
 /* A small "compatibility library" for TurboC under MS-DOS */