* Makefile adapted to changes below.
* split pythonmain.c in two: most stuff goes to pythonrun.c, in the library.
* new optional built-in threadmodule.c, build upon Sjoerd's thread.{c,h}.
* new module from Sjoerd: mmmodule.c (dynamically loaded).
* new module from Sjoerd: sv (svgen.py, svmodule.c.proto).
* new files thread.{c,h} (from Sjoerd).
* new xxmodule.c (example only).
* myselect.h: bzero -> memset
* select.c: bzero -> memset; removed global variable
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index b026413..99f4e5e 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -321,6 +321,7 @@
 	fileobject *f;
 	int n;
 {
+	void *save, *save_thread(), restore_thread();
 	register FILE *fp;
 	register int c;
 	register char *buf, *end;
@@ -334,16 +335,19 @@
 		return NULL;
 	buf = BUF(v);
 	end = buf + n2;
-	
+
+	save = save_thread();
 	for (;;) {
 		if ((c = getc(fp)) == EOF) {
 			clearerr(fp);
 			if (intrcheck()) {
+				restore_thread(save);
 				DECREF(v);
 				err_set(KeyboardInterrupt);
 				return NULL;
 			}
 			if (n < 0 && buf == BUF(v)) {
+				restore_thread(save);
 				DECREF(v);
 				err_setstr(EOFError,
 					   "EOF when reading a line");
@@ -361,13 +365,16 @@
 				break;
 			n1 = n2;
 			n2 += 1000;
+			restore_thread(save);
 			if (resizestring(&v, n2) < 0)
 				return NULL;
+			save = save_thread();
 			buf = BUF(v) + n1;
 			end = BUF(v) + n2;
 		}
 	}
-	
+	restore_thread(save);
+
 	n1 = buf - BUF(v);
 	if (n1 != n2)
 		resizestring(&v, n1);