Excise DL_EXPORT/DL_IMPORT from Modules/*.  Required adding a prototype
for Py_Main().

Thanks to Kalle Svensson and Skip Montanaro for the patches.
diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index aed3c42..d663293 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -703,7 +703,7 @@
     {NULL, NULL}		/* sentinel */
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 init_codecs(void)
 {
     Py_InitModule("_codecs", _codecs_functions);
diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c
index e616d90..08c5f09 100644
--- a/Modules/_curses_panel.c
+++ b/Modules/_curses_panel.c
@@ -445,7 +445,7 @@
 
 /* Initialization function for the module */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 init_curses_panel(void)
 {
     PyObject *m, *d, *v;
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index f819a9e..65f60f0 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -2474,7 +2474,7 @@
 
 /* Initialization function for the module */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 init_curses(void)
 {
 	PyObject *m, *d, *v, *c_api_object;
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index 5ed3eaf..ab86fa4 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -649,7 +649,7 @@
   {NULL, NULL}
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 init_locale(void)
 {
     PyObject *m, *d, *x;
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index baaa097..ad0b59b 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -473,7 +473,7 @@
 "Implementation module for SSL socket operations.  See the socket module\n\
 for documentation.");
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 init_ssl(void)
 {
 	PyObject *m, *d;
diff --git a/Modules/_weakref.c b/Modules/_weakref.c
index 31e63d1..86bd036 100644
--- a/Modules/_weakref.c
+++ b/Modules/_weakref.c
@@ -109,7 +109,7 @@
 };
 
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 init_weakref(void)
 {
     PyObject *m;
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index e757d9f..5bb5e2c 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1908,7 +1908,7 @@
 };
 
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initarray(void)
 {
 	PyObject *m;
diff --git a/Modules/audioop.c b/Modules/audioop.c
index 9adbc7b..52824b8 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -1369,7 +1369,7 @@
 	{ 0,          0 }
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initaudioop(void)
 {
 	PyObject *m, *d;
diff --git a/Modules/binascii.c b/Modules/binascii.c
index ec07a71..0fe85fc 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -1313,7 +1313,7 @@
 /* Initialization function for the module (*must* be called initbinascii) */
 PyDoc_STRVAR(doc_binascii, "Conversion between binary data and ASCII");
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initbinascii(void)
 {
 	PyObject *m, *d, *x;
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index a43d7b9..f8d9af8 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -4789,10 +4789,10 @@
 	return 0;
 }
 
-#ifndef DL_EXPORT	/* declarations for DLL import/export */
-#define DL_EXPORT(RTYPE) RTYPE
+#ifndef PyMODINIT_FUNC	/* declarations for DLL import/export */
+#define PyMODINIT_FUNC void
 #endif
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initcPickle(void) 
 {
 	PyObject *m, *d, *di, *v, *k;
diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c
index 2f85f41..dfab89a 100644
--- a/Modules/cStringIO.c
+++ b/Modules/cStringIO.c
@@ -701,10 +701,10 @@
   &Otype,
 };
 
-#ifndef DL_EXPORT	/* declarations for DLL import/export */
-#define DL_EXPORT(RTYPE) RTYPE
+#ifndef PyMODINIT_FUNC	/* declarations for DLL import/export */
+#define PyMODINIT_FUNC void
 #endif
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initcStringIO(void) {
   PyObject *m, *d, *v;
 
diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c
index 5bb08f2..8faa6bf 100644
--- a/Modules/cmathmodule.c
+++ b/Modules/cmathmodule.c
@@ -391,7 +391,7 @@
 	{NULL,		NULL}		/* sentinel */
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initcmath(void)
 {
 	PyObject *m;
diff --git a/Modules/cryptmodule.c b/Modules/cryptmodule.c
index a1eaced..050a356 100644
--- a/Modules/cryptmodule.c
+++ b/Modules/cryptmodule.c
@@ -37,7 +37,7 @@
 	{NULL,		NULL}		/* sentinel */
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initcrypt(void)
 {
 	Py_InitModule("crypt", crypt_methods);
diff --git a/Modules/dbmmodule.c b/Modules/dbmmodule.c
index dde5b49..d05a1bd 100644
--- a/Modules/dbmmodule.c
+++ b/Modules/dbmmodule.c
@@ -339,7 +339,7 @@
 	{ 0, 0 },
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initdbm(void) {
 	PyObject *m, *d, *s;
 
diff --git a/Modules/dlmodule.c b/Modules/dlmodule.c
index ea083e2..927f4c0 100644
--- a/Modules/dlmodule.c
+++ b/Modules/dlmodule.c
@@ -209,7 +209,7 @@
 	Py_XDECREF(v);
 }
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initdl(void)
 {
 	PyObject *m, *d, *x;
diff --git a/Modules/errnomodule.c b/Modules/errnomodule.c
index 74d4f0f..cd3d2fa 100644
--- a/Modules/errnomodule.c
+++ b/Modules/errnomodule.c
@@ -57,7 +57,7 @@
 To map error codes to error messages, use the function os.strerror(),\n\
 e.g. os.strerror(2) could return 'No such file or directory'.");
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initerrno(void)
 {
 	PyObject *m, *d, *de;
diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c
index f1d89cc..360b54e 100644
--- a/Modules/fcntlmodule.c
+++ b/Modules/fcntlmodule.c
@@ -462,7 +462,7 @@
 	return 0;
 }
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initfcntl(void)
 {
 	PyObject *m, *d;
diff --git a/Modules/flmodule.c b/Modules/flmodule.c
index b3e7d1f..2fe118d 100644
--- a/Modules/flmodule.c
+++ b/Modules/flmodule.c
@@ -2126,7 +2126,7 @@
 	{NULL,			NULL}		/* sentinel */
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initfl(void)
 {
 	Py_InitModule("fl", forms_methods);
diff --git a/Modules/fpectlmodule.c b/Modules/fpectlmodule.c
index c4b85d1..c29bcef 100644
--- a/Modules/fpectlmodule.c
+++ b/Modules/fpectlmodule.c
@@ -86,7 +86,7 @@
 static void fpe_reset(Sigfunc *);
 
 static PyObject *fpe_error;
-DL_EXPORT(void) initfpectl(void);
+PyMODINIT_FUNC initfpectl(void);
 static PyObject *turnon_sigfpe            (PyObject *self,PyObject *args);
 static PyObject *turnoff_sigfpe           (PyObject *self,PyObject *args);
 
@@ -249,7 +249,7 @@
     }
 }
 
-DL_EXPORT(void) initfpectl(void)
+PyMODINIT_FUNC initfpectl(void)
 {
     PyObject *m, *d;
     m = Py_InitModule("fpectl", fpectl_methods);
diff --git a/Modules/fpetestmodule.c b/Modules/fpetestmodule.c
index 565d0b7..aa14dd8 100644
--- a/Modules/fpetestmodule.c
+++ b/Modules/fpetestmodule.c
@@ -44,7 +44,7 @@
 #include "Python.h"
 
 static PyObject *fpe_error;
-DL_EXPORT(void) initfpetest(void);
+PyMODINIT_FUNC initfpetest(void);
 static PyObject *test(PyObject *self,PyObject *args);
 static double db0(double);
 static double overflow(double);
@@ -172,7 +172,7 @@
   return a;
 }
 
-DL_EXPORT(void) initfpetest(void)
+PyMODINIT_FUNC initfpetest(void)
 {
     PyObject *m, *d;
 
diff --git a/Modules/gdbmmodule.c b/Modules/gdbmmodule.c
index 6e85ed3..accf438 100644
--- a/Modules/gdbmmodule.c
+++ b/Modules/gdbmmodule.c
@@ -504,7 +504,7 @@
     { 0, 0 },
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initgdbm(void) {
     PyObject *m, *d, *s;
 
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
index c834009..8a88968 100644
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -156,7 +156,7 @@
 complete membership information.)");
 
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initgrp(void)
 {
     PyObject *m, *d;
diff --git a/Modules/imageop.c b/Modules/imageop.c
index 7b925b8..8c83cc3 100644
--- a/Modules/imageop.c
+++ b/Modules/imageop.c
@@ -696,7 +696,7 @@
 };
 
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initimageop(void)
 {
 	PyObject *m, *d;
diff --git a/Modules/main.c b/Modules/main.c
index cc07c29..cebb17b 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -105,7 +105,7 @@
 
 /* Main program */
 
-DL_EXPORT(int)
+int
 Py_Main(int argc, char **argv)
 {
 	int c;
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index 88b439f..cbb0000 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -334,7 +334,7 @@
 "This module is always available.  It provides access to the\n"
 "mathematical functions defined by the C standard.");
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initmath(void)
 {
 	PyObject *m, *d, *v;
diff --git a/Modules/md5module.c b/Modules/md5module.c
index aa2bef8..8ca2386 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -253,7 +253,7 @@
 
 /* Initialize this module. */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initmd5(void)
 {
 	PyObject *m, *d;
diff --git a/Modules/mpzmodule.c b/Modules/mpzmodule.c
index 0cb6495..5974df1 100644
--- a/Modules/mpzmodule.c
+++ b/Modules/mpzmodule.c
@@ -1644,7 +1644,7 @@
 
 /* Initialize this module. */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initmpz(void)
 {
 	PyObject *module;
diff --git a/Modules/operator.c b/Modules/operator.c
index fbe8c14..c1bf468 100644
--- a/Modules/operator.c
+++ b/Modules/operator.c
@@ -219,7 +219,7 @@
 
 /* Initialization function for the module (*must* be called initoperator) */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initoperator(void)
 {
         /* Create the module and add the functions */
diff --git a/Modules/pcremodule.c b/Modules/pcremodule.c
index 383dde8..656539a 100644
--- a/Modules/pcremodule.c
+++ b/Modules/pcremodule.c
@@ -610,7 +610,7 @@
 
 /* Initialization function for the module (*must* be called initpcre) */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initpcre(void)
 {
 	PyObject *m, *d;
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index bf178f8..9b7640f 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -3211,6 +3211,7 @@
 {
 	PROCESS_INFORMATION piProcInfo;
 	STARTUPINFO siStartInfo;
+	DWORD dwProcessFlags = 0;  /* no NEW_CONSOLE by default for Ctrl+C handling */
 	char *s1,*s2, *s3 = " /c ";
 	const char *szConsoleSpawn = "w9xpopen.exe";
 	int i;
@@ -3303,6 +3304,16 @@
 				s1,
 				s3,
 				cmdstring);
+			/* Not passing CREATE_NEW_CONSOLE has been known to
+			   cause random failures on win9x.  Specifically a 
+			   dialog:
+			   "Your program accessed mem currently in use at xxx"
+			   and a hopeful warning about the stability of your
+			   system.
+			   Cost is Ctrl+C wont kill children, but anyone
+			   who cares can have a go!
+			*/
+			dwProcessFlags |= CREATE_NEW_CONSOLE;
 		}
 	}
 
@@ -3328,7 +3339,7 @@
 			  NULL,
 			  NULL,
 			  TRUE,
-			  0, /* no new console so Ctrl+C kills child too */
+			  dwProcessFlags,
 			  NULL,
 			  NULL,
 			  &siStartInfo,
@@ -6746,7 +6757,7 @@
 #define MODNAME "posix"
 #endif
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 INITFUNC(void)
 {
 	PyObject *m, *v;
diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c
index b51b7f9..cb139bb 100644
--- a/Modules/pwdmodule.c
+++ b/Modules/pwdmodule.c
@@ -157,7 +157,7 @@
 	{NULL,		NULL}		/* sentinel */
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initpwd(void)
 {
 	PyObject *m;
diff --git a/Modules/python.c b/Modules/python.c
index 316dd3b..f9262e8 100644
--- a/Modules/python.c
+++ b/Modules/python.c
@@ -2,8 +2,6 @@
 
 #include "Python.h"
 
-extern DL_EXPORT(int) Py_Main(int, char **);
-
 int
 main(int argc, char **argv)
 {
diff --git a/Modules/readline.c b/Modules/readline.c
index afd80db..a2efd47 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -652,7 +652,7 @@
 PyDoc_STRVAR(doc_module,
 "Importing this module enables command line editing using GNU readline.");
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initreadline(void)
 {
 	PyObject *m;
diff --git a/Modules/regexmodule.c b/Modules/regexmodule.c
index 4c7035e..db54161 100644
--- a/Modules/regexmodule.c
+++ b/Modules/regexmodule.c
@@ -642,7 +642,7 @@
 	{NULL,		NULL}		     /* sentinel */
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initregex(void)
 {
 	PyObject *m, *d, *v;
diff --git a/Modules/resource.c b/Modules/resource.c
index 5ed98a1..b1dd5d1 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -210,7 +210,7 @@
 
 /* Module initialization */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initresource(void)
 {
 	PyObject *m, *v;
diff --git a/Modules/rgbimgmodule.c b/Modules/rgbimgmodule.c
index 596ea4f..904c64b 100644
--- a/Modules/rgbimgmodule.c
+++ b/Modules/rgbimgmodule.c
@@ -751,7 +751,7 @@
 };
 
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initrgbimg(void)
 {
 	PyObject *m, *d;
diff --git a/Modules/rotormodule.c b/Modules/rotormodule.c
index 7137b00..dcca0c6 100644
--- a/Modules/rotormodule.c
+++ b/Modules/rotormodule.c
@@ -615,7 +615,7 @@
 };
 
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initrotor(void)
 {
 	Rotor_Type.ob_type = &PyType_Type;
diff --git a/Modules/shamodule.c b/Modules/shamodule.c
index 14e51ea..5b9040d 100644
--- a/Modules/shamodule.c
+++ b/Modules/shamodule.c
@@ -525,7 +525,7 @@
 
 #define insint(n,v) { PyModule_AddIntConstant(m,n,v); }
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initsha(void)
 {
     PyObject *m;
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 25d5d94..0f9574f 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -469,7 +469,7 @@
 A signal handler function is called with two arguments:\n\
 the first is the signal number, the second is the interrupted stack frame.");
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initsignal(void)
 {
 	PyObject *m, *d, *x;
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 8024006..b9358b7 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -3008,7 +3008,7 @@
 "Implementation module for socket operations.  See the socket module\n\
 for documentation.");
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 init_socket(void)
 {
 	PyObject *m;
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c
index 09bcc3d..8eb64a0 100644
--- a/Modules/stropmodule.c
+++ b/Modules/stropmodule.c
@@ -1203,7 +1203,7 @@
 };
 
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initstrop(void)
 {
 	PyObject *m, *s;
diff --git a/Modules/structmodule.c b/Modules/structmodule.c
index 5d4de11..093cd7b 100644
--- a/Modules/structmodule.c
+++ b/Modules/structmodule.c
@@ -1499,7 +1499,7 @@
 
 /* Module initialization */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initstruct(void)
 {
 	PyObject *m;
diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c
index e24e72f..9854a1c 100644
--- a/Modules/symtablemodule.c
+++ b/Modules/symtablemodule.c
@@ -43,7 +43,7 @@
 	{NULL,		NULL}		/* sentinel */
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 init_symtable(void)
 {
 	PyObject *m;
diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c
index 2d886e1..75deb1b 100644
--- a/Modules/syslogmodule.c
+++ b/Modules/syslogmodule.c
@@ -155,7 +155,7 @@
 
 /* Initialization function for the module */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initsyslog(void)
 {
 	PyObject *m;
diff --git a/Modules/termios.c b/Modules/termios.c
index ed78ece..3ace25c 100644
--- a/Modules/termios.c
+++ b/Modules/termios.c
@@ -892,7 +892,7 @@
 };
 
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 PyInit_termios(void)
 {
 	PyObject *m;
diff --git a/Modules/threadmodule.c b/Modules/threadmodule.c
index b872dd0..896d4fa 100644
--- a/Modules/threadmodule.c
+++ b/Modules/threadmodule.c
@@ -360,7 +360,7 @@
 unlock it.  A thread attempting to lock a lock that it has already locked\n\
 will block until another thread unlocks it.  Deadlocks may ensue.");
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initthread(void)
 {
 	PyObject *m, *d;
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index eb48c2b..13da2ff 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -620,7 +620,7 @@
 strptime() -- parse string to time tuple according to format specification");
 
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 inittime(void)
 {
 	PyObject *m;
diff --git a/Modules/timingmodule.c b/Modules/timingmodule.c
index 4e10e31..56e057a 100644
--- a/Modules/timingmodule.c
+++ b/Modules/timingmodule.c
@@ -52,7 +52,7 @@
 };
 
 
-DL_EXPORT(void) inittiming(void)
+PyMODINIT_FUNC inittiming(void)
 {
 	(void)Py_InitModule("timing", timing_methods);
 }
diff --git a/Modules/xreadlinesmodule.c b/Modules/xreadlinesmodule.c
index 8c6b91f..3009768 100644
--- a/Modules/xreadlinesmodule.c
+++ b/Modules/xreadlinesmodule.c
@@ -168,7 +168,7 @@
 	{NULL, NULL}
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initxreadlines(void)
 {
 	XReadlinesObject_Type.ob_type = &PyType_Type;
diff --git a/Modules/xxmodule.c b/Modules/xxmodule.c
index 2264dfb..125d2ec 100644
--- a/Modules/xxmodule.c
+++ b/Modules/xxmodule.c
@@ -218,7 +218,7 @@
 
 /* Initialization function for the module (*must* be called initxx) */
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initxx(void)
 {
 	PyObject *m;
diff --git a/Modules/xxsubtype.c b/Modules/xxsubtype.c
index 9013467..c826b6e 100644
--- a/Modules/xxsubtype.c
+++ b/Modules/xxsubtype.c
@@ -263,7 +263,7 @@
 	{NULL,		NULL}		/* sentinel */
 };
 
-DL_EXPORT(void)
+PyMODINIT_FUNC
 initxxsubtype(void)
 {
 	PyObject *m;