diff --git a/Include/cStringIO.h b/Include/cStringIO.h
index 7389432..cc62c90 100644
--- a/Include/cStringIO.h
+++ b/Include/cStringIO.h
@@ -76,22 +76,22 @@
 static struct PycStringIO_CAPI {
   
   /* Read a string.  If the last argument is -1, the remainder will be read. */
-  int(*cread) Py_FPROTO((PyObject *, char **, int));
+  int(*cread)(PyObject *, char **, int);
 
   /* Read a line */
-  int(*creadline) Py_FPROTO((PyObject *, char **));
+  int(*creadline)(PyObject *, char **);
 
   /* Write a string */
-  int(*cwrite) Py_FPROTO((PyObject *, char *, int));
+  int(*cwrite)(PyObject *, char *, int);
 
   /* Get the cStringIO object as a Python string */
-  PyObject *(*cgetvalue) Py_FPROTO((PyObject *));
+  PyObject *(*cgetvalue)(PyObject *);
 
   /* Create a new output object */
-  PyObject *(*NewOutput) Py_FPROTO((int));
+  PyObject *(*NewOutput)(int);
 
   /* Create an input object from a Python string */
-  PyObject *(*NewInput) Py_FPROTO((PyObject *));
+  PyObject *(*NewInput)(PyObject *);
 
   /* The Python types for cStringIO input and output objects.
      Note that you can do input on an output object.
diff --git a/Include/methodobject.h b/Include/methodobject.h
index ace58d3..bb9d964 100644
--- a/Include/methodobject.h
+++ b/Include/methodobject.h
@@ -20,9 +20,9 @@
 
 #define PyCFunction_Check(op) ((op)->ob_type == &PyCFunction_Type)
 
-typedef PyObject *(*PyCFunction) Py_FPROTO((PyObject *, PyObject *));
-typedef PyObject *(*PyCFunctionWithKeywords)
-	Py_FPROTO((PyObject *, PyObject *, PyObject *));
+typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
+typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *,
+					     PyObject *);
 
 extern DL_IMPORT(PyCFunction) PyCFunction_GetFunction(PyObject *);
 extern DL_IMPORT(PyObject *) PyCFunction_GetSelf(PyObject *);
diff --git a/Include/mymalloc.h b/Include/mymalloc.h
index 3d6ab06..fa2f8f8 100644
--- a/Include/mymalloc.h
+++ b/Include/mymalloc.h
@@ -90,9 +90,9 @@
 #ifndef PyCore_MALLOC_PROTO
 #undef PyCore_REALLOC_PROTO
 #undef PyCore_FREE_PROTO
-#define PyCore_MALLOC_PROTO     Py_PROTO((size_t))
-#define PyCore_REALLOC_PROTO    Py_PROTO((ANY *, size_t))
-#define PyCore_FREE_PROTO       Py_PROTO((ANY *))
+#define PyCore_MALLOC_PROTO    (size_t)
+#define PyCore_REALLOC_PROTO   (ANY *, size_t)
+#define PyCore_FREE_PROTO      (ANY *)
 #endif
 
 #ifdef NEED_TO_DECLARE_MALLOC_AND_FRIEND
@@ -138,9 +138,9 @@
    returns a non-NULL pointer, even if the underlying malloc
    doesn't. Returned pointers must be checked for NULL explicitly.
    No action is performed on failure. */
-extern DL_IMPORT(ANY *) PyMem_Malloc Py_PROTO((size_t));
-extern DL_IMPORT(ANY *) PyMem_Realloc Py_PROTO((ANY *, size_t));
-extern DL_IMPORT(void) PyMem_Free Py_PROTO((ANY *));
+extern DL_IMPORT(ANY *) PyMem_Malloc(size_t);
+extern DL_IMPORT(ANY *) PyMem_Realloc(ANY *, size_t);
+extern DL_IMPORT(void) PyMem_Free(ANY *);
 
 /* Starting from Python 1.6, the wrappers Py_{Malloc,Realloc,Free} are
    no longer supported. They used to call PyErr_NoMemory() on failure. */
@@ -198,7 +198,7 @@
 
    #define PyCore_MALLOC_FUNC      d_malloc
    ...
-   #define PyCore_MALLOC_PROTO	Py_PROTO((size_t, char *, unsigned long))
+   #define PyCore_MALLOC_PROTO	(size_t, char *, unsigned long)
    ...
    #define NEED_TO_DECLARE_MALLOC_AND_FRIEND
 
diff --git a/Include/mymath.h b/Include/mymath.h
index 3a8c62e..7873a3d 100644
--- a/Include/mymath.h
+++ b/Include/mymath.h
@@ -10,7 +10,7 @@
 #endif
 
 #ifndef HAVE_HYPOT
-extern double hypot Py_PROTO((double, double));
+extern double hypot(double, double);
 #ifdef MWERKS_BEFORE_PRO4
 #define hypot we_dont_want_faulty_hypot_decl
 #endif
diff --git a/Include/myproto.h b/Include/myproto.h
index 40abdea..94be8df 100644
--- a/Include/myproto.h
+++ b/Include/myproto.h
@@ -14,6 +14,11 @@
 redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 ******************************************************************/
 
+/***************************************
+THIS FILE IS OBSOLETE
+DON'T USE Py_PROTO or Py_FPROTO anymore.
+***************************************/
+
 #ifdef HAVE_PROTOTYPES
 #define Py_PROTO(x) x
 #else
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 595d930..0498732 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -31,8 +31,8 @@
 struct arraydescr {
 	int typecode;
 	int itemsize;
-	PyObject * (*getitem) Py_FPROTO((struct arrayobject *, int));
-	int (*setitem) Py_FPROTO((struct arrayobject *, int, PyObject *));
+	PyObject * (*getitem)(struct arrayobject *, int);
+	int (*setitem)(struct arrayobject *, int, PyObject *);
 };
 
 typedef struct arrayobject {
@@ -46,15 +46,15 @@
 #define is_arrayobject(op) ((op)->ob_type == &Arraytype)
 
 /* Forward */
-static PyObject *newarrayobject Py_PROTO((int, struct arraydescr *));
+static PyObject *newarrayobject(int, struct arraydescr *);
 #if 0
-static int getarraysize Py_PROTO((PyObject *));
+static int getarraysize(PyObject *);
 #endif
-static PyObject *getarrayitem Py_PROTO((PyObject *, int));
-static int setarrayitem Py_PROTO((PyObject *, int, PyObject *));
+static PyObject *getarrayitem(PyObject *, int);
+static int setarrayitem(PyObject *, int, PyObject *);
 #if 0
-static int insarrayitem Py_PROTO((PyObject *, int, PyObject *));
-static int addarrayitem Py_PROTO((PyObject *, PyObject *));
+static int insarrayitem(PyObject *, int, PyObject *);
+static int addarrayitem(PyObject *, PyObject *);
 #endif
 
 static PyObject *
diff --git a/Modules/cgensupport.h b/Modules/cgensupport.h
index e70720b..2277a47 100644
--- a/Modules/cgensupport.h
+++ b/Modules/cgensupport.h
@@ -38,34 +38,34 @@
 #define getishortarraysize PyArg_GetShortArraySize
 #define getistringarg PyArg_GetString
 
-extern int PyArg_GetObject Py_PROTO((PyObject *args, int nargs,
-				     int i, PyObject **p_a));
-extern int PyArg_GetLong Py_PROTO((PyObject *args, int nargs,
-				   int i, long *p_a));
-extern int PyArg_GetShort Py_PROTO((PyObject *args, int nargs,
-				    int i, short *p_a));
-extern int PyArg_GetFloat Py_PROTO((PyObject *args, int nargs,
-				    int i, float *p_a));
-extern int PyArg_GetString Py_PROTO((PyObject *args, int nargs,
-				     int i, string *p_a));
-extern int PyArg_GetChar Py_PROTO((PyObject *args, int nargs,
-				   int i, char *p_a));
-extern int PyArg_GetLongArray Py_PROTO((PyObject *args, int nargs,
-					int i, int n, long *p_a));
-extern int PyArg_GetShortArray Py_PROTO((PyObject *args, int nargs,
-					 int i, int n, short *p_a));
-extern int PyArg_GetDoubleArray Py_PROTO((PyObject *args, int nargs,
-					  int i, int n, double *p_a));
-extern int PyArg_GetFloatArray Py_PROTO((PyObject *args, int nargs,
-					 int i, int n, float *p_a));
-extern int PyArg_GetLongArraySize Py_PROTO((PyObject *args, int nargs,
-					    int i, long *p_a));
-extern int PyArg_GetShortArraySize Py_PROTO((PyObject *args, int nargs,
-					     int i, short *p_a));
-extern int PyArg_GetDoubleArraySize Py_PROTO((PyObject *args, int nargs,
-					      int i, double *p_a));
-extern int PyArg_GetFloatArraySize Py_PROTO((PyObject *args, int nargs,
-					 int i, float *p_a));
+extern int PyArg_GetObject(PyObject *args, int nargs,
+			   int i, PyObject **p_a);
+extern int PyArg_GetLong(PyObject *args, int nargs,
+			 int i, long *p_a);
+extern int PyArg_GetShort(PyObject *args, int nargs,
+			  int i, short *p_a);
+extern int PyArg_GetFloat(PyObject *args, int nargs,
+			  int i, float *p_a);
+extern int PyArg_GetString(PyObject *args, int nargs,
+			   int i, string *p_a);
+extern int PyArg_GetChar(PyObject *args, int nargs,
+			 int i, char *p_a);
+extern int PyArg_GetLongArray(PyObject *args, int nargs,
+			    int i, int n, long *p_a);
+extern int PyArg_GetShortArray(PyObject *args, int nargs,
+			    int i, int n, short *p_a);
+extern int PyArg_GetDoubleArray(PyObject *args, int nargs,
+				int i, int n, double *p_a);
+extern int PyArg_GetFloatArray(PyObject *args, int nargs,
+			       int i, int n, float *p_a);
+extern int PyArg_GetLongArraySize(PyObject *args, int nargs,
+				  int i, long *p_a);
+extern int PyArg_GetShortArraySize(PyObject *args, int nargs,
+				int i, short *p_a);
+extern int PyArg_GetDoubleArraySize(PyObject *args, int nargs,
+				    int i, double *p_a);
+extern int PyArg_GetFloatArraySize(PyObject *args, int nargs,
+				   int i, float *p_a);
 
 #ifdef __cplusplus
 }
diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c
index 313827b..aa21bc0 100644
--- a/Modules/cmathmodule.c
+++ b/Modules/cmathmodule.c
@@ -347,7 +347,7 @@
 static PyObject *
 math_1(args, func)
 	PyObject *args;
-	Py_complex (*func) Py_FPROTO((Py_complex));
+	Py_complex (*func)(Py_complex);
 {
 	Py_complex x;
 	if (!PyArg_ParseTuple(args, "D", &x))
diff --git a/Modules/glmodule.c b/Modules/glmodule.c
index bb14c65..bed80dc 100644
--- a/Modules/glmodule.c
+++ b/Modules/glmodule.c
@@ -107,7 +107,7 @@
 	PyObject *v, *w=NULL;
 	int i, n, width;
 	double vec[3];
-	PyObject * (*getitem) Py_FPROTO((PyObject *, int));
+	PyObject * (*getitem)(PyObject *, int);
 	
 	if (!PyArg_GetObject(args, 1, 0, &v))
 		return NULL;
@@ -208,7 +208,7 @@
 	PyObject *v, *w, *wnorm, *wvec;
 	int i, n;
 	float norm[3], vec[3];
-	PyObject * (*getitem) Py_FPROTO((PyObject *, int));
+	PyObject * (*getitem)(PyObject *, int);
 	
 	if (!PyArg_GetObject(args, 1, 0, &v))
 		return NULL;
diff --git a/Modules/mpzmodule.c b/Modules/mpzmodule.c
index 62478b8..2d10df5 100644
--- a/Modules/mpzmodule.c
+++ b/Modules/mpzmodule.c
@@ -1012,8 +1012,8 @@
 } /* mpz_mpzcoerce() */
 	
 /* Forward */
-static void mpz_divm Py_PROTO((MP_INT *res, const MP_INT *num,
-			       const MP_INT *den, const MP_INT *mod));
+static void mpz_divm(MP_INT *res, const MP_INT *num,
+	             const MP_INT *den, const MP_INT *mod);
 
 static PyObject *
 MPZ_powm(self, args)
diff --git a/Modules/nismodule.c b/Modules/nismodule.c
index 8943729..877b3a2 100644
--- a/Modules/nismodule.c
+++ b/Modules/nismodule.c
@@ -71,7 +71,7 @@
 	return map;
 }
 
-typedef int (*foreachfunc) Py_PROTO((int, char *, int, char *, int, char *));
+typedef int (*foreachfunc)(int, char *, int, char *, int, char *);
 
 struct ypcallback_data {
 	PyObject	*dict;
diff --git a/Modules/readline.c b/Modules/readline.c
index 9b7bcaf..8215321 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -39,7 +39,7 @@
 
 /* Pointers needed from outside (but not declared in a header file). */
 extern int (*PyOS_InputHook)();
-extern char *(*PyOS_ReadlineFunctionPointer) Py_PROTO((char *));
+extern char *(*PyOS_ReadlineFunctionPointer)(char *);
 
 
 /* Exported function to send one line to readline's init file parser */
diff --git a/Modules/rgbimgmodule.c b/Modules/rgbimgmodule.c
index cc5c6d5..d0956cb 100644
--- a/Modules/rgbimgmodule.c
+++ b/Modules/rgbimgmodule.c
@@ -95,12 +95,12 @@
 
 #define CHANOFFSET(z)	(3-(z))	/* this is byte order dependent */
 
-static void expandrow Py_PROTO((unsigned char *, unsigned char *, int));
-static void setalpha Py_PROTO((unsigned char *, int));
-static void copybw Py_PROTO((Py_Int32 *, int));
-static void interleaverow Py_PROTO((unsigned char*, unsigned char*, int, int));
-static int compressrow Py_PROTO((unsigned char *, unsigned char *, int, int));
-static void lumrow Py_PROTO((unsigned char *, unsigned char *, int));
+static void expandrow(unsigned char *, unsigned char *, int);
+static void setalpha(unsigned char *, int);
+static void copybw(Py_Int32 *, int);
+static void interleaverow(unsigned char*, unsigned char*, int, int);
+static int compressrow(unsigned char *, unsigned char *, int, int);
+static void lumrow(unsigned char *, unsigned char *, int);
 
 #ifdef ADD_TAGS
 #define TAGLEN	(5)
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 1c11fdd..cfbfe20 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -123,7 +123,7 @@
 		is_tripped++;
 		Handlers[sig_num].tripped = 1;
 		Py_AddPendingCall(
-			(int (*) Py_PROTO((ANY *)))PyErr_CheckSignals, NULL);
+			(int (*)(ANY *))PyErr_CheckSignals, NULL);
 #ifdef WITH_THREAD
 	}
 #endif
@@ -638,7 +638,7 @@
 {
 	is_tripped++;
 	Handlers[SIGINT].tripped = 1;
-	Py_AddPendingCall((int (*) Py_PROTO((ANY *)))PyErr_CheckSignals, NULL);
+	Py_AddPendingCall((int (*)(ANY *))PyErr_CheckSignals, NULL);
 }
 
 void
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index f88f6ba..b8fbead 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1112,7 +1112,7 @@
 static PyObject *
 BUILD_FUNC_DEF_2(PySocketSock_makefile,PySocketSockObject *,s, PyObject *,args)
 {
-	extern int fclose Py_PROTO((FILE *));
+	extern int fclose(FILE *);
 	char *mode = "r";
 	int bufsize = -1;
 #ifdef MS_WIN32
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c
index 2950b15..f37f000 100644
--- a/Modules/stropmodule.c
+++ b/Modules/stropmodule.c
@@ -878,7 +878,7 @@
 	PyObject *self; /* Not used */
 	PyObject *args;
 {
-	extern double strtod Py_PROTO((const char *, char **));
+	extern double strtod(const char *, char **);
 	char *s, *end;
 	double x;
 	char buffer[256]; /* For errors */
diff --git a/Modules/structmodule.c b/Modules/structmodule.c
index 5b52a39..fac442f 100644
--- a/Modules/structmodule.c
+++ b/Modules/structmodule.c
@@ -406,11 +406,10 @@
 	char format;
 	int size;
 	int alignment;
-	PyObject* (*unpack) Py_PROTO((const char *,
-				      const struct _formatdef *));
-	int (*pack) Py_PROTO((char *,
-			      PyObject *,
-			      const struct _formatdef *));
+	PyObject* (*unpack)(const char *,
+			    const struct _formatdef *);
+	int (*pack)(char *, PyObject *,
+		    const struct _formatdef *);
 } formatdef;
 
 static PyObject *
diff --git a/Modules/svmodule.c b/Modules/svmodule.c
index 9e311b5..4133ae3 100644
--- a/Modules/svmodule.c
+++ b/Modules/svmodule.c
@@ -37,7 +37,7 @@
 
 static PyObject *SvError;		/* exception sv.error */
 
-static PyObject *newcaptureobject Py_PROTO((svobject *, void *, int));
+static PyObject *newcaptureobject(svobject *, void *, int);
 
 /* Set a SV-specific error from svideo_errno and return NULL */
 static PyObject *
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 984980c..855863b 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -90,8 +90,8 @@
 #endif
 
 /* Forward declarations */
-static int floatsleep Py_PROTO((double));
-static double floattime Py_PROTO(());
+static int floatsleep(double);
+static double floattime();
 
 /* For Y2K check */
 static PyObject *moddict;
@@ -255,7 +255,7 @@
 static PyObject *
 time_convert(when, function)
 	time_t when;
-	struct tm * (*function) Py_PROTO((const time_t *));
+	struct tm * (*function)(const time_t *);
 {
 	struct tm *p;
 	errno = 0;
@@ -786,8 +786,8 @@
 #ifdef MSDOS
 	struct timeb t1, t2;
 	double frac;
-	extern double fmod Py_PROTO((double, double));
-	extern double floor Py_PROTO((double));
+	extern double fmod(double, double);
+	extern double floor(double);
 	if (secs <= 0.0)
 		return;
 	frac = fmod(secs, 1.0);
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 1800912..6350794 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -310,7 +310,7 @@
 	BINOP(v, w, "__or__", "__ror__", PyNumber_Or);
 	if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_or) != NULL)
@@ -332,7 +332,7 @@
 	BINOP(v, w, "__xor__", "__rxor__", PyNumber_Xor);
 	if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_xor) != NULL)
@@ -352,7 +352,7 @@
 	BINOP(v, w, "__and__", "__rand__", PyNumber_And);
 	if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_and) != NULL)
@@ -372,7 +372,7 @@
 	BINOP(v, w, "__lshift__", "__rlshift__", PyNumber_Lshift);
 	if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_lshift) != NULL)
@@ -392,7 +392,7 @@
 	BINOP(v, w, "__rshift__", "__rrshift__", PyNumber_Rshift);
 	if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_rshift) != NULL)
@@ -417,7 +417,7 @@
 		return (*m->sq_concat)(v, w);
 	else if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_add) != NULL)
@@ -437,7 +437,7 @@
 	BINOP(v, w, "__sub__", "__rsub__", PyNumber_Subtract);
 	if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_subtract) != NULL)
@@ -469,7 +469,7 @@
 	}
 	if (tp->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyInstance_Check(v)) {
 			/* Instances of user-defined classes get their
 			   other argument uncoerced, so they may
@@ -515,7 +515,7 @@
 	BINOP(v, w, "__div__", "__rdiv__", PyNumber_Divide);
 	if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_divide) != NULL)
@@ -539,7 +539,7 @@
 	BINOP(v, w, "__mod__", "__rmod__", PyNumber_Remainder);
 	if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_remainder) != NULL)
@@ -559,7 +559,7 @@
 	BINOP(v, w, "__divmod__", "__rdivmod__", PyNumber_Divmod);
 	if (v->ob_type->tp_as_number != NULL) {
 		PyObject *x = NULL;
-		PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
+		PyObject * (*f)(PyObject *, PyObject *);
 		if (PyNumber_Coerce(&v, &w) != 0)
 			return NULL;
 		if ((f = v->ob_type->tp_as_number->nb_divmod) != NULL)
@@ -579,7 +579,7 @@
 	PyObject *v, *w;
 {
 	PyObject *res;
-	PyObject * (*f) Py_FPROTO((PyObject *, PyObject *, PyObject *));
+	PyObject * (*f)(PyObject *, PyObject *, PyObject *);
 	BINOP(v, w, "__pow__", "__rpow__", do_pow);
 	if (v->ob_type->tp_as_number == NULL ||
 	    w->ob_type->tp_as_number == NULL) {
@@ -604,7 +604,7 @@
 {
 	PyObject *res;
 	PyObject *v1, *z1, *w2, *z2;
-	PyObject * (*f) Py_FPROTO((PyObject *, PyObject *, PyObject *));
+	PyObject * (*f)(PyObject *, PyObject *, PyObject *);
 
 	if (z == Py_None)
 		return do_pow(v, w);
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 0e1308b..3192ddd 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -14,10 +14,10 @@
 #include "structmember.h"
 
 /* Forward */
-static PyObject *class_lookup
-	Py_PROTO((PyClassObject *, PyObject *, PyClassObject **));
-static PyObject *instance_getattr1 Py_PROTO((PyInstanceObject *, PyObject *));
-static PyObject *instance_getattr2 Py_PROTO((PyInstanceObject *, PyObject *));
+static PyObject *class_lookup(PyClassObject *, PyObject *,
+			      PyClassObject **);
+static PyObject *instance_getattr1(PyInstanceObject *, PyObject *);
+static PyObject *instance_getattr2(PyInstanceObject *, PyObject *);
 
 static PyObject *getattrstr, *setattrstr, *delattrstr;
 
@@ -1203,8 +1203,8 @@
 
 
 /* Forward */
-static int halfbinop Py_PROTO((PyObject *, PyObject *, char *, PyObject **,
-		PyObject * (*) Py_PROTO((PyObject *, PyObject *)), int ));
+static int halfbinop(PyObject *, PyObject *, char *, PyObject **,
+		     PyObject * (*)(PyObject *, PyObject *), int);
 
 
 /* Implement a binary operator involving at least one class instance. */
@@ -1215,7 +1215,7 @@
 	PyObject *w;
 	char *opname;
 	char *ropname;
-	PyObject * (*thisfunc) Py_PROTO((PyObject *, PyObject *));
+	PyObject * (*thisfunc)(PyObject *, PyObject *);
 {
 	char buf[256];
 	PyObject *result = NULL;
@@ -1249,7 +1249,7 @@
 	PyObject *w;
 	char *opname;
 	PyObject **r_result;
-	PyObject * (*thisfunc) Py_PROTO((PyObject *, PyObject *));
+	PyObject * (*thisfunc)(PyObject *, PyObject *);
 	int swapped;
 {
 	PyObject *func;
diff --git a/Objects/cobject.c b/Objects/cobject.c
index b184acb..06c29f0 100644
--- a/Objects/cobject.c
+++ b/Objects/cobject.c
@@ -15,20 +15,20 @@
 
 /* Declarations for objects of type PyCObject */
 
-typedef void (*destructor1) Py_PROTO((void *));
-typedef void (*destructor2) Py_PROTO((void *, void*));
+typedef void (*destructor1)(void *);
+typedef void (*destructor2)(void *, void*);
 
 typedef struct {
 	PyObject_HEAD
 	void *cobject;
         void *desc;
-	void (*destructor) Py_PROTO((void *));
+	void (*destructor)(void *);
 } PyCObject;
 
 PyObject *
 PyCObject_FromVoidPtr(cobj, destr)
 	void *cobj;
-	void (*destr) Py_PROTO((void *));
+	void (*destr)(void *);
 {
 	PyCObject *self;
 	
@@ -45,7 +45,7 @@
 PyCObject_FromVoidPtrAndDesc(cobj, desc, destr)
 	void *cobj;
 	void *desc;
-	void (*destr) Py_PROTO((void *, void *));
+	void (*destr)(void *, void *);
 {
 	PyCObject *self;
 
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 7247ff8..bf4aed4 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -69,7 +69,7 @@
 	FILE *f_fp;
 	PyObject *f_name;
 	PyObject *f_mode;
-	int (*f_close) Py_PROTO((FILE *));
+	int (*f_close)(FILE *);
 	int f_softspace; /* Flag used by 'print' command */
 	int f_binary; /* Flag which indicates whether the file is open
 			 open in binary (1) or test (0) mode */
@@ -100,7 +100,7 @@
 	FILE *fp;
 	char *name;
 	char *mode;
-	int (*close) Py_FPROTO((FILE *));
+	int (*close)(FILE *);
 {
 	PyFileObject *f = PyObject_NEW(PyFileObject, &PyFile_Type);
 	if (f == NULL)
@@ -126,7 +126,7 @@
 PyFile_FromString(name, mode)
 	char *name, *mode;
 {
-	extern int fclose Py_PROTO((FILE *));
+	extern int fclose(FILE *);
 	PyFileObject *f;
 	f = (PyFileObject *) PyFile_FromFile((FILE *)NULL, name, mode, fclose);
 	if (f == NULL)
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 55fcd06..8b4f2d9 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -64,8 +64,8 @@
 #endif
 
 #if !defined(__STDC__) && !defined(macintosh)
-extern double fmod Py_PROTO((double, double));
-extern double pow Py_PROTO((double, double));
+extern double fmod(double, double);
+extern double pow(double, double);
 #endif
 
 #ifdef sun
@@ -137,7 +137,7 @@
 	PyObject *v;
 	char **pend;
 {
-	extern double strtod Py_PROTO((const char *, char **));
+	extern double strtod(const char *, char **);
 	const char *s, *last, *end;
 	double x;
 	char buffer[256]; /* For errors */
diff --git a/Objects/object.c b/Objects/object.c
index 9c4cd6a..c1bdc71 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1001,7 +1001,7 @@
 
 
 /* Hack to force loading of abstract.o */
-int (*_Py_abstract_hack) Py_FPROTO((PyObject *)) = &PyObject_Length;
+int (*_Py_abstract_hack)(PyObject *) = &PyObject_Length;
 
 
 /* Python's malloc wrappers (see mymalloc.h) */
diff --git a/Parser/acceler.c b/Parser/acceler.c
index b20322d..177bb49 100644
--- a/Parser/acceler.c
+++ b/Parser/acceler.c
@@ -26,8 +26,8 @@
 #include "parser.h"
 
 /* Forward references */
-static void fixdfa Py_PROTO((grammar *, dfa *));
-static void fixstate Py_PROTO((grammar *, state *));
+static void fixdfa(grammar *, dfa *);
+static void fixstate(grammar *, state *);
 
 void
 PyGrammar_AddAccelerators(g)
diff --git a/Parser/firstsets.c b/Parser/firstsets.c
index c7127c1..b27ed2e 100644
--- a/Parser/firstsets.c
+++ b/Parser/firstsets.c
@@ -17,7 +17,7 @@
 extern int Py_DebugFlag;
 
 /* Forward */
-static void calcfirstset Py_PROTO((grammar *, dfa *));
+static void calcfirstset(grammar *, dfa *);
 
 void
 addfirstsets(g)
diff --git a/Parser/grammar.c b/Parser/grammar.c
index 6fbb843..1a50786 100644
--- a/Parser/grammar.c
+++ b/Parser/grammar.c
@@ -142,7 +142,7 @@
 }
 
 /* Forward */
-static void translabel Py_PROTO((grammar *, label *));
+static void translabel(grammar *, label *);
 
 void
 translatelabels(g)
diff --git a/Parser/intrcheck.c b/Parser/intrcheck.c
index 3d4a27f..5278d76 100644
--- a/Parser/intrcheck.c
+++ b/Parser/intrcheck.c
@@ -22,7 +22,7 @@
 #include "intrcheck.h"
 
 /* Copied here from ceval.h -- can't include that file. */
-int Py_AddPendingCall Py_PROTO((int (*func) Py_PROTO((ANY *)), ANY *arg));
+int Py_AddPendingCall(int (*func)(ANY *), ANY *arg);
 
 
 #ifdef QUICKWIN
@@ -152,7 +152,7 @@
 	int sig; /* Not used by required by interface */
 #endif /* _M_IX86 */
 {
-	extern void Py_Exit Py_PROTO((int));
+	extern void Py_Exit(int);
 	static char message[] =
 "python: to interrupt a truly hanging Python program, interrupt once more.\n";
 	switch (interrupted++) {
diff --git a/Parser/listnode.c b/Parser/listnode.c
index 24559f5..c7d5cfa 100644
--- a/Parser/listnode.c
+++ b/Parser/listnode.c
@@ -15,8 +15,8 @@
 #include "node.h"
 
 /* Forward */
-static void list1node Py_PROTO((FILE *, node *));
-static void listnode Py_PROTO((FILE *, node *));
+static void list1node(FILE *, node *);
+static void listnode(FILE *, node *);
 
 void
 PyNode_ListTree(n)
diff --git a/Parser/myreadline.c b/Parser/myreadline.c
index 96749b2..bb35000 100644
--- a/Parser/myreadline.c
+++ b/Parser/myreadline.c
@@ -118,7 +118,7 @@
 
    Note: Python expects in return a buffer allocated with PyMem_Malloc. */
 
-char *(*PyOS_ReadlineFunctionPointer) Py_PROTO((char *));
+char *(*PyOS_ReadlineFunctionPointer)(char *);
 
 
 /* Interface used by tokenizer.c and bltinmodule.c */
diff --git a/Parser/node.c b/Parser/node.c
index 5cef376..3a710ef 100644
--- a/Parser/node.c
+++ b/Parser/node.c
@@ -64,7 +64,7 @@
 }
 
 /* Forward */
-static void freechildren Py_PROTO((node *));
+static void freechildren(node *);
 
 
 void
diff --git a/Parser/parser.c b/Parser/parser.c
index fb1a051..ee40f21 100644
--- a/Parser/parser.c
+++ b/Parser/parser.c
@@ -33,7 +33,7 @@
 
 /* STACK DATA TYPE */
 
-static void s_reset Py_PROTO((stack *));
+static void s_reset(stack *);
 
 static void
 s_reset(s)
@@ -44,7 +44,7 @@
 
 #define s_empty(s) ((s)->s_top == &(s)->s_base[MAXSTACK])
 
-static int s_push Py_PROTO((stack *, dfa *, node *));
+static int s_push(stack *, dfa *, node *);
 
 static int
 s_push(s, d, parent)
@@ -66,7 +66,7 @@
 
 #ifdef Py_DEBUG
 
-static void s_pop Py_PROTO((stack *));
+static void s_pop(stack *);
 
 static void
 s_pop(s)
@@ -122,7 +122,7 @@
 
 /* PARSER STACK OPERATIONS */
 
-static int shift Py_PROTO((stack *, int, char *, int, int));
+static int shift(stack *, int, char *, int, int);
 
 static int
 shift(s, type, str, newstate, lineno)
@@ -141,7 +141,7 @@
 	return 0;
 }
 
-static int push Py_PROTO((stack *, int, dfa *, int, int));
+static int push(stack *, int, dfa *, int, int);
 
 static int
 push(s, type, d, newstate, lineno)
@@ -165,7 +165,7 @@
 
 /* PARSER PROPER */
 
-static int classify Py_PROTO((grammar *, int, char *));
+static int classify(grammar *, int, char *);
 
 static int
 classify(g, type, str)
diff --git a/Parser/parser.h b/Parser/parser.h
index 0fd0081..6087373 100644
--- a/Parser/parser.h
+++ b/Parser/parser.h
@@ -36,11 +36,10 @@
 	node		*p_tree;	/* Top of parse tree */
 } parser_state;
 
-parser_state *PyParser_New Py_PROTO((grammar *g, int start));
-void PyParser_Delete Py_PROTO((parser_state *ps));
-int PyParser_AddToken
-	Py_PROTO((parser_state *ps, int type, char *str, int lineno));
-void PyGrammar_AddAccelerators Py_PROTO((grammar *g));
+parser_state *PyParser_New(grammar *g, int start);
+void PyParser_Delete(parser_state *ps);
+int PyParser_AddToken(parser_state *ps, int type, char *str, int lineno);
+void PyGrammar_AddAccelerators(grammar *g);
 
 #ifdef __cplusplus
 }
diff --git a/Parser/parsetok.c b/Parser/parsetok.c
index 1d6e024..9ac1606 100644
--- a/Parser/parsetok.c
+++ b/Parser/parsetok.c
@@ -22,8 +22,7 @@
 
 
 /* Forward */
-static node *parsetok Py_PROTO((struct tok_state *, grammar *, int,
-			     perrdetail *));
+static node *parsetok(struct tok_state *, grammar *, int, perrdetail *);
 
 /* Parse input coming from a string.  Return error code, print some errors. */
 
diff --git a/Parser/pgen.c b/Parser/pgen.c
index 36279b0..e5d5d37 100644
--- a/Parser/pgen.c
+++ b/Parser/pgen.c
@@ -45,14 +45,14 @@
 } nfa;
 
 /* Forward */
-static void compile_rhs Py_PROTO((labellist *ll,
-			       nfa *nf, node *n, int *pa, int *pb));
-static void compile_alt Py_PROTO((labellist *ll,
-			       nfa *nf, node *n, int *pa, int *pb));
-static void compile_item Py_PROTO((labellist *ll,
-				nfa *nf, node *n, int *pa, int *pb));
-static void compile_atom Py_PROTO((labellist *ll,
-				nfa *nf, node *n, int *pa, int *pb));
+static void compile_rhs(labellist *ll,
+			nfa *nf, node *n, int *pa, int *pb);
+static void compile_alt(labellist *ll,
+			nfa *nf, node *n, int *pa, int *pb);
+static void compile_item(labellist *ll,
+			 nfa *nf, node *n, int *pa, int *pb);
+static void compile_atom(labellist *ll,
+			 nfa *nf, node *n, int *pa, int *pb);
 
 static int
 addnfastate(nf)
@@ -111,7 +111,7 @@
 } nfagrammar;
 
 /* Forward */
-static void compile_rule Py_PROTO((nfagrammar *gr, node *n));
+static void compile_rule(nfagrammar *gr, node *n);
 
 static nfagrammar *
 newnfagrammar()
@@ -420,10 +420,10 @@
 } ss_dfa;
 
 /* Forward */
-static void printssdfa Py_PROTO((int xx_nstates, ss_state *xx_state, int nbits,
-			      labellist *ll, char *msg));
-static void simplify Py_PROTO((int xx_nstates, ss_state *xx_state));
-static void convert Py_PROTO((dfa *d, int xx_nstates, ss_state *xx_state));
+static void printssdfa(int xx_nstates, ss_state *xx_state, int nbits,
+		       labellist *ll, char *msg);
+static void simplify(int xx_nstates, ss_state *xx_state);
+static void convert(dfa *d, int xx_nstates, ss_state *xx_state);
 
 static void
 makedfa(gr, nf, d)
diff --git a/Parser/pgen.h b/Parser/pgen.h
index a20a0c2..ddf52e6 100644
--- a/Parser/pgen.h
+++ b/Parser/pgen.h
@@ -16,10 +16,10 @@
 
 /* Parser generator interface */
 
-extern grammar *meta_grammar Py_PROTO((void));
+extern grammar *meta_grammar(void);
 
 struct _node;
-extern grammar *pgen Py_PROTO((struct _node *));
+extern grammar *pgen(struct _node *);
 
 #ifdef __cplusplus
 }
diff --git a/Parser/pgenmain.c b/Parser/pgenmain.c
index ef24d75..0562e39 100644
--- a/Parser/pgenmain.c
+++ b/Parser/pgenmain.c
@@ -32,10 +32,10 @@
 int Py_VerboseFlag;
 
 /* Forward */
-grammar *getgrammar Py_PROTO((char *filename));
+grammar *getgrammar(char *filename);
 #ifdef THINK_C
-int main Py_PROTO((int, char **));
-char *askfile Py_PROTO((void));
+int main(int, char **);
+char *askfile(void);
 #endif
 
 void
diff --git a/Parser/printgrammar.c b/Parser/printgrammar.c
index e3a87aa..5d1d9e0 100644
--- a/Parser/printgrammar.c
+++ b/Parser/printgrammar.c
@@ -14,10 +14,10 @@
 #include "grammar.h"
 
 /* Forward */
-static void printarcs Py_PROTO((int, dfa *, FILE *));
-static void printstates Py_PROTO((grammar *, FILE *));
-static void printdfas Py_PROTO((grammar *, FILE *));
-static void printlabels Py_PROTO((grammar *, FILE *));
+static void printarcs(int, dfa *, FILE *);
+static void printstates(grammar *, FILE *);
+static void printdfas(grammar *, FILE *);
+static void printlabels(grammar *, FILE *);
 
 void
 printgrammar(g, fp)
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index ef0d711..0ef3fc0 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -17,7 +17,7 @@
 #include "tokenizer.h"
 #include "errcode.h"
 
-extern char *PyOS_Readline Py_PROTO((char *));
+extern char *PyOS_Readline(char *);
 /* Return malloc'ed string including trailing \n;
    empty malloc'ed string for EOF;
    NULL if interrupted */
@@ -34,9 +34,9 @@
 #endif
 
 /* Forward */
-static struct tok_state *tok_new Py_PROTO((void));
-static int tok_nextc Py_PROTO((struct tok_state *tok));
-static void tok_backup Py_PROTO((struct tok_state *tok, int c));
+static struct tok_state *tok_new(void);
+static int tok_nextc(struct tok_state *tok);
+static void tok_backup(struct tok_state *tok, int c);
 
 /* Token names */
 
diff --git a/Parser/tokenizer.h b/Parser/tokenizer.h
index 0a717fe..93a04ab 100644
--- a/Parser/tokenizer.h
+++ b/Parser/tokenizer.h
@@ -49,11 +49,10 @@
 	int altindstack[MAXINDENT];	/* Stack of alternate indents */
 };
 
-extern struct tok_state *PyTokenizer_FromString Py_PROTO((char *));
-extern struct tok_state *PyTokenizer_FromFile
-	Py_PROTO((FILE *, char *, char *));
-extern void PyTokenizer_Free Py_PROTO((struct tok_state *));
-extern int PyTokenizer_Get Py_PROTO((struct tok_state *, char **, char **));
+extern struct tok_state *PyTokenizer_FromString(char *);
+extern struct tok_state *PyTokenizer_FromFile(FILE *, char *, char *);
+extern void PyTokenizer_Free(struct tok_state *);
+extern int PyTokenizer_Get(struct tok_state *, char **, char **);
 
 #ifdef __cplusplus
 }
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 2bae3eb..a00cd5d 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -28,8 +28,8 @@
 #endif
 
 /* Forward */
-static PyObject *filterstring Py_PROTO((PyObject *, PyObject *));
-static PyObject *filtertuple  Py_PROTO((PyObject *, PyObject *));
+static PyObject *filterstring(PyObject *, PyObject *);
+static PyObject *filtertuple (PyObject *, PyObject *);
 
 static PyObject *
 builtin___import__(self, args)
@@ -428,7 +428,7 @@
 complex_from_string(v)
 	PyObject *v;
 {
-	extern double strtod Py_PROTO((const char *, char **));
+	extern double strtod(const char *, char **);
 	const char *s, *start;
 	char *end;
 	double x=0.0, y=0.0, z;
@@ -1225,7 +1225,7 @@
 Return the hexadecimal representation of an integer or long integer.";
 
 
-static PyObject *builtin_raw_input Py_PROTO((PyObject *, PyObject *));
+static PyObject *builtin_raw_input(PyObject *, PyObject *);
 
 static PyObject *
 builtin_input(self, args)
diff --git a/Python/ceval.c b/Python/ceval.c
index dfd4776..0bf5d00 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -43,34 +43,32 @@
 
 /* Forward declarations */
 
-static PyObject *eval_code2 Py_PROTO((PyCodeObject *,
-				 PyObject *, PyObject *,
-				 PyObject **, int,
-				 PyObject **, int,
-				 PyObject **, int,
-				 PyObject *));
+static PyObject *eval_code2(PyCodeObject *,
+			    PyObject *, PyObject *,
+			    PyObject **, int,
+			    PyObject **, int,
+			    PyObject **, int,
+			    PyObject *);
 #ifdef LLTRACE
-static int prtrace Py_PROTO((PyObject *, char *));
+static int prtrace(PyObject *, char *);
 #endif
-static void call_exc_trace Py_PROTO((PyObject **, PyObject**,
-				     PyFrameObject *));
-static int call_trace Py_PROTO((PyObject **, PyObject **,
-				PyFrameObject *, char *, PyObject *));
-static PyObject *call_builtin Py_PROTO((PyObject *, PyObject *, PyObject *));
-static PyObject *call_function Py_PROTO((PyObject *, PyObject *, PyObject *));
-static PyObject *loop_subscript Py_PROTO((PyObject *, PyObject *));
-static PyObject *apply_slice Py_PROTO((PyObject *, PyObject *, PyObject *));
-static int assign_slice Py_PROTO((PyObject *, PyObject *,
-				  PyObject *, PyObject *));
-static PyObject *cmp_outcome Py_PROTO((int, PyObject *, PyObject *));
-static int import_from Py_PROTO((PyObject *, PyObject *, PyObject *));
-static PyObject *build_class Py_PROTO((PyObject *, PyObject *, PyObject *));
-static int exec_statement Py_PROTO((PyFrameObject *,
-				    PyObject *, PyObject *, PyObject *));
-static PyObject *find_from_args Py_PROTO((PyFrameObject *, int));
-static void set_exc_info Py_PROTO((PyThreadState *,
-				PyObject *, PyObject *, PyObject *));
-static void reset_exc_info Py_PROTO((PyThreadState *));
+static void call_exc_trace(PyObject **, PyObject**, PyFrameObject *);
+static int call_trace(PyObject **, PyObject **,
+		      PyFrameObject *, char *, PyObject *);
+static PyObject *call_builtin(PyObject *, PyObject *, PyObject *);
+static PyObject *call_function(PyObject *, PyObject *, PyObject *);
+static PyObject *loop_subscript(PyObject *, PyObject *);
+static PyObject *apply_slice(PyObject *, PyObject *, PyObject *);
+static int assign_slice(PyObject *, PyObject *,
+			PyObject *, PyObject *);
+static PyObject *cmp_outcome(int, PyObject *, PyObject *);
+static int import_from(PyObject *, PyObject *, PyObject *);
+static PyObject *build_class(PyObject *, PyObject *, PyObject *);
+static int exec_statement(PyFrameObject *,
+			  PyObject *, PyObject *, PyObject *);
+static PyObject *find_from_args(PyFrameObject *, int);
+static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *);
+static void reset_exc_info(PyThreadState *);
 
 
 /* Dynamic execution profile */
@@ -211,7 +209,7 @@
 
 #define NPENDINGCALLS 32
 static struct {
-	int (*func) Py_PROTO((ANY *));
+	int (*func)(ANY *);
 	ANY *arg;
 } pendingcalls[NPENDINGCALLS];
 static volatile int pendingfirst = 0;
@@ -220,7 +218,7 @@
 
 int
 Py_AddPendingCall(func, arg)
-	int (*func) Py_PROTO((ANY *));
+	int (*func)(ANY *);
 	ANY *arg;
 {
 	static int busy = 0;
@@ -258,7 +256,7 @@
 	things_to_do = 0;
 	for (;;) {
 		int i;
-		int (*func) Py_PROTO((ANY *));
+		int (*func)(ANY *);
 		ANY *arg;
 		i = pendingfirst;
 		if (i == pendinglast)
@@ -287,8 +285,8 @@
 		WHY_BREAK	/* 'break' statement */
 };
 
-static enum why_code do_raise Py_PROTO((PyObject *, PyObject *, PyObject *));
-static int unpack_sequence Py_PROTO((PyObject *, int, PyObject **));
+static enum why_code do_raise(PyObject *, PyObject *, PyObject *);
+static int unpack_sequence(PyObject *, int, PyObject **);
 
 
 PyObject *
diff --git a/Python/compile.c b/Python/compile.c
index ce7c0e4..8cf85a7 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -375,30 +375,30 @@
 
 /* Prototype forward declarations */
 
-static int com_init Py_PROTO((struct compiling *, char *));
-static void com_free Py_PROTO((struct compiling *));
-static void com_push Py_PROTO((struct compiling *, int));
-static void com_pop Py_PROTO((struct compiling *, int));
-static void com_done Py_PROTO((struct compiling *));
-static void com_node Py_PROTO((struct compiling *, struct _node *));
-static void com_factor Py_PROTO((struct compiling *, struct _node *));
-static void com_addbyte Py_PROTO((struct compiling *, int));
-static void com_addint Py_PROTO((struct compiling *, int));
-static void com_addoparg Py_PROTO((struct compiling *, int, int));
-static void com_addfwref Py_PROTO((struct compiling *, int, int *));
-static void com_backpatch Py_PROTO((struct compiling *, int));
-static int com_add Py_PROTO((struct compiling *, PyObject *, PyObject *, PyObject *));
-static int com_addconst Py_PROTO((struct compiling *, PyObject *));
-static int com_addname Py_PROTO((struct compiling *, PyObject *));
-static void com_addopname Py_PROTO((struct compiling *, int, node *));
-static void com_list Py_PROTO((struct compiling *, node *, int));
-static int com_argdefs Py_PROTO((struct compiling *, node *));
-static int com_newlocal Py_PROTO((struct compiling *, char *));
-static PyCodeObject *icompile Py_PROTO((struct _node *, struct compiling *));
-static PyCodeObject *jcompile Py_PROTO((struct _node *, char *,
-					struct compiling *));
-static PyObject *parsestrplus Py_PROTO((node *));
-static PyObject *parsestr Py_PROTO((char *));
+static int com_init(struct compiling *, char *);
+static void com_free(struct compiling *);
+static void com_push(struct compiling *, int);
+static void com_pop(struct compiling *, int);
+static void com_done(struct compiling *);
+static void com_node(struct compiling *, struct _node *);
+static void com_factor(struct compiling *, struct _node *);
+static void com_addbyte(struct compiling *, int);
+static void com_addint(struct compiling *, int);
+static void com_addoparg(struct compiling *, int, int);
+static void com_addfwref(struct compiling *, int, int *);
+static void com_backpatch(struct compiling *, int);
+static int com_add(struct compiling *, PyObject *, PyObject *, PyObject *);
+static int com_addconst(struct compiling *, PyObject *);
+static int com_addname(struct compiling *, PyObject *);
+static void com_addopname(struct compiling *, int, node *);
+static void com_list(struct compiling *, node *, int);
+static int com_argdefs(struct compiling *, node *);
+static int com_newlocal(struct compiling *, char *);
+static PyCodeObject *icompile(struct _node *, struct compiling *);
+static PyCodeObject *jcompile(struct _node *, char *,
+			      struct compiling *);
+static PyObject *parsestrplus(node *);
+static PyObject *parsestr(char *);
 
 static int
 com_init(c, filename)
@@ -813,7 +813,7 @@
 	struct compiling *co;
 	char *s;
 {
-	extern double atof Py_PROTO((const char *));
+	extern double atof(const char *);
 	char *end;
 	long x;
 	double dx;
@@ -1823,8 +1823,8 @@
 
 /* Begin of assignment compilation */
 
-static void com_assign_name Py_PROTO((struct compiling *, node *, int));
-static void com_assign Py_PROTO((struct compiling *, node *, int));
+static void com_assign_name(struct compiling *, node *, int);
+static void com_assign(struct compiling *, node *, int);
 
 static void
 com_assign_attr(c, n, assigning)
@@ -2013,7 +2013,7 @@
 	}
 }
 
-/* Forward */ static node *get_rawdocstring Py_PROTO((node *));
+/* Forward */ static node *get_rawdocstring(node *);
 
 static void
 com_expr_stmt(c, n)
@@ -3041,7 +3041,7 @@
 	}
 }
 
-static void com_fplist Py_PROTO((struct compiling *, node *));
+static void com_fplist(struct compiling *, node *);
 
 static void
 com_fpdef(c, n)
diff --git a/Python/errors.c b/Python/errors.c
index d2aa3dd..4a3573e 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -17,14 +17,14 @@
 #endif
 
 #ifdef macintosh
-extern char *PyMac_StrError Py_PROTO((int));
+extern char *PyMac_StrError(int);
 #undef strerror
 #define strerror PyMac_StrError
 #endif /* macintosh */
 
 #ifndef __STDC__
 #ifndef MS_WINDOWS
-extern char *strerror Py_PROTO((int));
+extern char *strerror(int);
 #endif
 #endif
 
diff --git a/Python/getargs.c b/Python/getargs.c
index a28354d..ba855af 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -23,26 +23,25 @@
 #endif
 
 
-int PyArg_Parse Py_PROTO((PyObject *, char *, ...));
-int PyArg_ParseTuple Py_PROTO((PyObject *, char *, ...));
-int PyArg_VaParse Py_PROTO((PyObject *, char *, va_list));
+int PyArg_Parse(PyObject *, char *, ...);
+int PyArg_ParseTuple(PyObject *, char *, ...);
+int PyArg_VaParse(PyObject *, char *, va_list);
 
-int PyArg_ParseTupleAndKeywords Py_PROTO((PyObject *, PyObject *,
-				       char *, char **, ...));
+int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
+				char *, char **, ...);
 
 /* Forward */
-static int vgetargs1 Py_PROTO((PyObject *, char *, va_list *, int));
-static void seterror Py_PROTO((int, char *, int *, char *, char *));
-static char *convertitem Py_PROTO((PyObject *, char **, va_list *,
-				   int *, char *));
-static char *converttuple Py_PROTO((PyObject *, char **, va_list *,
-				 int *, char *, int));
-static char *convertsimple Py_PROTO((PyObject *, char **, va_list *, char *));
-static char *convertsimple1 Py_PROTO((PyObject *, char **, va_list *));
+static int vgetargs1(PyObject *, char *, va_list *, int);
+static void seterror(int, char *, int *, char *, char *);
+static char *convertitem(PyObject *, char **, va_list *, int *, char *);
+static char *converttuple(PyObject *, char **, va_list *,
+			  int *, char *, int);
+static char *convertsimple(PyObject *, char **, va_list *, char *);
+static char *convertsimple1(PyObject *, char **, va_list *);
 
-static int vgetargskeywords Py_PROTO((PyObject *, PyObject *,
-				   char *, char **, va_list *));
-static char *skipitem Py_PROTO((char **, va_list *));
+static int vgetargskeywords(PyObject *, PyObject *,
+			    char *, char **, va_list *);
+static char *skipitem(char **, va_list *);
 
 #ifdef HAVE_STDARG_PROTOTYPES
 /* VARARGS2 */
@@ -886,8 +885,7 @@
 				
 			}
 			else if (*format == '&') {
-				typedef int (*converter)
-					Py_PROTO((PyObject *, void *));
+				typedef int (*converter)(PyObject *, void *);
 				converter convert = va_arg(*p_va, converter);
 				void *addr = va_arg(*p_va, void *);
 				format++;
@@ -1323,8 +1321,7 @@
 			}
 #endif
 			else if (*format == '&') {
-				typedef int (*converter)
-					Py_PROTO((PyObject *, void *));
+				typedef int (*converter)(PyObject *, void *);
 				(void) va_arg(*p_va, converter);
 				(void) va_arg(*p_va, void *);
 				format++;
diff --git a/Python/import.c b/Python/import.c
index 7e74f2b..f1efccb 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -763,10 +763,10 @@
 
 
 /* Forward */
-static PyObject *load_module Py_PROTO((char *, FILE *, char *, int));
-static struct filedescr *find_module Py_PROTO((char *, PyObject *,
-					       char *, size_t, FILE **));
-static struct _frozen *find_frozen Py_PROTO((char *name));
+static PyObject *load_module(char *, FILE *, char *, int);
+static struct filedescr *find_module(char *, PyObject *,
+				     char *, size_t, FILE **);
+static struct _frozen *find_frozen(char *name);
 
 /* Load a package and return its module object WITH INCREMENTED
    REFERENCE COUNT */
@@ -855,7 +855,7 @@
 static int check_case(char *, int, int, char *);
 #endif
 
-static int find_init_module Py_PROTO((char *)); /* Forward */
+static int find_init_module(char *); /* Forward */
 
 static struct filedescr *
 find_module(realname, path, buf, buflen, p_fp)
@@ -1206,7 +1206,7 @@
 #endif /* HAVE_STAT */
 
 
-static int init_builtin Py_PROTO((char *)); /* Forward */
+static int init_builtin(char *); /* Forward */
 
 /* Load an external module using the default search path and return
    its module object WITH INCREMENTED REFERENCE COUNT */
@@ -1455,15 +1455,13 @@
 }
 
 /* Forward declarations for helper routines */
-static PyObject *get_parent Py_PROTO((PyObject *globals,
-				      char *buf, int *p_buflen));
-static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod,
-				     char **p_name, char *buf, int *p_buflen));
-static int mark_miss Py_PROTO((char *name));
-static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist,
-				     char *buf, int buflen, int recursive));
-static PyObject * import_submodule Py_PROTO((PyObject *mod,
-					     char *name, char *fullname));
+static PyObject *get_parent(PyObject *globals, char *buf, int *p_buflen);
+static PyObject *load_next(PyObject *mod, PyObject *altmod,
+			   char **p_name, char *buf, int *p_buflen);
+static int mark_miss(char *name);
+static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
+			   char *buf, int buflen, int recursive);
+static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
 
 /* The Magnum Opus of dotted-name import :-) */
 
@@ -2006,7 +2004,7 @@
 	char *name;
 	PyObject *path; /* list or None or NULL */
 {
-	extern int fclose Py_PROTO((FILE *));
+	extern int fclose(FILE *);
 	PyObject *fob, *ret;
 	struct filedescr *fdp;
 	char pathname[MAXPATHLEN+1];
diff --git a/Python/importdl.h b/Python/importdl.h
index 8b2f21e..d67688a 100644
--- a/Python/importdl.h
+++ b/Python/importdl.h
@@ -36,8 +36,8 @@
 extern struct filedescr * _PyImport_Filetab;
 extern const struct filedescr _PyImport_DynLoadFiletab[];
 
-extern PyObject *_PyImport_LoadDynamicModule
-	Py_PROTO((char *name, char *pathname, FILE *));
+extern PyObject *_PyImport_LoadDynamicModule(char *name, char *pathname,
+					     FILE *);
 
 /* Max length of module suffix searched for -- accommodates "module.slb" */
 #define MAXSUFFIXSIZE 12
diff --git a/Python/marshal.c b/Python/marshal.c
index 8fcbe3a..78fe624 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -171,8 +171,7 @@
 			w_short(ob->ob_digit[i], p);
 	}
 	else if (PyFloat_Check(v)) {
-		extern void PyFloat_AsString
-			Py_PROTO((char *, PyFloatObject *));
+		extern void PyFloat_AsString(char *, PyFloatObject *);
 		char buf[256]; /* Plenty to format any double */
 		PyFloat_AsString(buf, (PyFloatObject *)v);
 		n = strlen(buf);
@@ -182,8 +181,7 @@
 	}
 #ifndef WITHOUT_COMPLEX
 	else if (PyComplex_Check(v)) {
-		extern void PyFloat_AsString
-			Py_PROTO((char *, PyFloatObject *));
+		extern void PyFloat_AsString(char *, PyFloatObject *);
 		char buf[256]; /* Plenty to format any double */
 		PyFloatObject *temp;
 		w_byte(TYPE_COMPLEX, p);
@@ -438,7 +436,7 @@
 	
 	case TYPE_FLOAT:
 		{
-			extern double atof Py_PROTO((const char *));
+			extern double atof(const char *);
 			char buf[256];
 			double dx;
 			n = r_byte(p);
@@ -457,7 +455,7 @@
 #ifndef WITHOUT_COMPLEX
 	case TYPE_COMPLEX:
 		{
-			extern double atof Py_PROTO((const char *));
+			extern double atof(const char *);
 			char buf[256];
 			Py_complex c;
 			n = r_byte(p);
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 5cd2870..4a4dc1b 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -84,7 +84,7 @@
 
 /* Helper for mkvalue() to scan the length of a format */
 
-static int countformat Py_PROTO((char *format, int endchar));
+static int countformat(char *format, int endchar);
 static int countformat(format, endchar)
 	char *format;
 	int endchar;
@@ -130,10 +130,10 @@
 /* Generic function to create a value -- the inverse of getargs() */
 /* After an original idea and first implementation by Steven Miale */
 
-static PyObject *do_mktuple Py_PROTO((char**, va_list *, int, int));
-static PyObject *do_mklist Py_PROTO((char**, va_list *, int, int));
-static PyObject *do_mkdict Py_PROTO((char**, va_list *, int, int));
-static PyObject *do_mkvalue Py_PROTO((char**, va_list *));
+static PyObject *do_mktuple(char**, va_list *, int, int);
+static PyObject *do_mklist(char**, va_list *, int, int);
+static PyObject *do_mkdict(char**, va_list *, int, int);
+static PyObject *do_mkvalue(char**, va_list *);
 
 
 static PyObject *
@@ -358,7 +358,7 @@
 		case 'S':
 		case 'O':
 		if (**p_format == '&') {
-			typedef PyObject *(*converter) Py_PROTO((void *));
+			typedef PyObject *(*converter)(void *);
 			converter func = va_arg(*p_va, converter);
 			void *arg = va_arg(*p_va, void *);
 			++*p_format;
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 1d16db5..74dffae 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -38,18 +38,18 @@
 extern grammar _PyParser_Grammar; /* From graminit.c */
 
 /* Forward */
-static void initmain Py_PROTO((void));
-static void initsite Py_PROTO((void));
-static PyObject *run_err_node Py_PROTO((node *n, char *filename,
-				   PyObject *globals, PyObject *locals));
-static PyObject *run_node Py_PROTO((node *n, char *filename,
-			       PyObject *globals, PyObject *locals));
-static PyObject *run_pyc_file Py_PROTO((FILE *fp, char *filename,
-				   PyObject *globals, PyObject *locals));
-static void err_input Py_PROTO((perrdetail *));
-static void initsigs Py_PROTO((void));
-static void call_sys_exitfunc Py_PROTO((void));
-static void call_ll_exitfuncs Py_PROTO((void));
+static void initmain(void);
+static void initsite(void);
+static PyObject *run_err_node(node *n, char *filename,
+			      PyObject *globals, PyObject *locals);
+static PyObject *run_node(node *n, char *filename,
+			  PyObject *globals, PyObject *locals);
+static PyObject *run_pyc_file(FILE *fp, char *filename,
+			      PyObject *globals, PyObject *locals);
+static void err_input(perrdetail *);
+static void initsigs(void);
+static void call_sys_exitfunc(void);
+static void call_ll_exitfuncs(void);
 
 #ifdef Py_TRACE_REFS
 int _Py_AskYesNo(char *prompt);
@@ -163,7 +163,7 @@
 }
 
 #ifdef COUNT_ALLOCS
-extern void dump_counts Py_PROTO((void));
+extern void dump_counts(void);
 #endif
 
 /* Undo the effect of Py_Initialize().
@@ -1059,7 +1059,7 @@
 static int nexitfuncs = 0;
 
 int Py_AtExit(func)
-	void (*func) Py_PROTO((void));
+	void (*func)(void);
 {
 	if (nexitfuncs >= NEXITFUNCS)
 		return -1;
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index e0fca95..6ba43bd 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -270,7 +270,7 @@
 sys_getcounts(self, args)
 	PyObject *self, *args;
 {
-	extern PyObject *get_counts Py_PROTO((void));
+	extern PyObject *get_counts(void);
 
 	if (!PyArg_ParseTuple(args, ":getcounts"))
 		return NULL;
@@ -280,12 +280,12 @@
 
 #ifdef Py_TRACE_REFS
 /* Defined in objects.c because it uses static globals if that file */
-extern PyObject *_Py_GetObjects Py_PROTO((PyObject *, PyObject *));
+extern PyObject *_Py_GetObjects(PyObject *, PyObject *);
 #endif
 
 #ifdef DYNAMIC_EXECUTION_PROFILE
 /* Defined in ceval.c because it uses static globals if that file */
-extern PyObject *_Py_GetDXProfile Py_PROTO((PyObject *,  PyObject *));
+extern PyObject *_Py_GetDXProfile(PyObject *,  PyObject *);
 #endif
 
 static PyMethodDef sys_methods[] = {
@@ -409,7 +409,7 @@
 PyObject *
 _PySys_Init()
 {
-	extern int fclose Py_PROTO((FILE *));
+	extern int fclose(FILE *);
 	PyObject *m, *v, *sysdict;
 	PyObject *sysin, *sysout, *syserr;
 	char *s;
diff --git a/Tools/freeze/makefreeze.py b/Tools/freeze/makefreeze.py
index 1958f2e..b7bf9fd 100644
--- a/Tools/freeze/makefreeze.py
+++ b/Tools/freeze/makefreeze.py
@@ -22,7 +22,7 @@
     int argc;
     char **argv;
 {
-	extern int Py_FrozenMain Py_PROTO((int, char **));
+	extern int Py_FrozenMain(int, char **);
 """ + ((not __debug__ and """
         Py_OptimizeFlag++;
 """) or "")  + """
