diff --git a/Modules/almodule.c b/Modules/almodule.c
index 453a416..d9dfc81 100644
--- a/Modules/almodule.c
+++ b/Modules/almodule.c
@@ -253,10 +253,7 @@
 
 
 static PyObject *
-SetConfig(self, args, func)
-	alcobject *self;
-	PyObject *args;
-	int (*func)(ALconfig, int);
+SetConfig(alcobject *self, PyObject *args, int (*func)(ALconfig, int))
 {
 	int par;
 
@@ -271,10 +268,7 @@
 }
 
 static PyObject *
-GetConfig(self, args, func)
-	alcobject *self;
-	PyObject *args;
-	int (*func)(ALconfig);
+GetConfig(alcobject *self, PyObject *args, int (*func)(ALconfig))
 {	
 	int par;
 
@@ -292,9 +286,7 @@
 ;
 
 static PyObject *
-alc_SetWidth(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_SetWidth(alcobject *self, PyObject *args)
 {
 	return SetConfig(self, args, alSetWidth);
 }
@@ -305,9 +297,7 @@
 ;
 
 static PyObject *
-alc_GetWidth(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_GetWidth(alcobject *self, PyObject *args)
 {
 	return GetConfig(self, args, alGetWidth);
 }
@@ -318,9 +308,7 @@
 ;
 
 static PyObject *
-alc_SetSampFmt(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_SetSampFmt(alcobject *self, PyObject *args)
 {
 	return SetConfig(self, args, alSetSampFmt);
 }
@@ -331,9 +319,7 @@
 ;
 
 static PyObject *
-alc_GetSampFmt(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_GetSampFmt(alcobject *self, PyObject *args)
 {
 	return GetConfig(self, args, alGetSampFmt);
 }
@@ -344,9 +330,7 @@
 ;
 
 static PyObject *
-alc_SetChannels(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_SetChannels(alcobject *self, PyObject *args)
 {
 	return SetConfig(self, args, alSetChannels);
 }
@@ -357,9 +341,7 @@
 ;
 
 static PyObject *
-alc_GetChannels(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_GetChannels(alcobject *self, PyObject *args)
 {
 	return GetConfig(self, args, alGetChannels);
 }
@@ -370,9 +352,7 @@
 ;
 
 static PyObject *
-alc_SetFloatMax(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_SetFloatMax(alcobject *self, PyObject *args)
 {
 	double maximum_value;
 
@@ -390,9 +370,7 @@
 ;
 
 static PyObject *
-alc_GetFloatMax(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_GetFloatMax(alcobject *self, PyObject *args)
 {
 	double maximum_value;
 
@@ -409,9 +387,7 @@
 ;
 
 static PyObject *
-alc_SetDevice(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_SetDevice(alcobject *self, PyObject *args)
 {
 	return SetConfig(self, args, alSetDevice);
 }
@@ -422,9 +398,7 @@
 ;
 
 static PyObject *
-alc_GetDevice(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_GetDevice(alcobject *self, PyObject *args)
 {
 	return GetConfig(self, args, alGetDevice);
 }
@@ -435,9 +409,7 @@
 ;
 
 static PyObject *
-alc_SetQueueSize(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_SetQueueSize(alcobject *self, PyObject *args)
 {
 	return SetConfig(self, args, alSetQueueSize);
 }
@@ -448,9 +420,7 @@
 ;
 
 static PyObject *
-alc_GetQueueSize(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_GetQueueSize(alcobject *self, PyObject *args)
 {
 	return GetConfig(self, args, alGetQueueSize);
 }
@@ -458,10 +428,7 @@
 #endif /* AL_NO_ELEM */
 
 static PyObject *
-setconfig(self, args, func)
-	alcobject *self;
-	PyObject *args;
-	int (*func)(ALconfig, long);
+setconfig(alcobject *self, PyObject *args, int (*func)(ALconfig, long))
 {
 	long par;
 
@@ -476,10 +443,7 @@
 }
 
 static PyObject *
-getconfig(self, args, func)
-	alcobject *self;
-	PyObject *args;
-	long (*func)(ALconfig);
+getconfig(alcobject *self, PyObject *args, long (*func)(ALconfig))
 {	
 	long par;
 
@@ -493,49 +457,37 @@
 }
 
 static PyObject *
-alc_setqueuesize (self, args)
-	alcobject *self;
-	PyObject *args;
+alc_setqueuesize (alcobject *self, PyObject *args)
 {
 	return setconfig(self, args, ALsetqueuesize);
 }
 
 static PyObject *
-alc_getqueuesize (self, args)
-	alcobject *self;
-	PyObject *args;
+alc_getqueuesize (alcobject *self, PyObject *args)
 {
 	return getconfig(self, args, ALgetqueuesize);
 }
 
 static PyObject *
-alc_setwidth (self, args)
-	alcobject *self;
-	PyObject *args;
+alc_setwidth (alcobject *self, PyObject *args)
 {
 	return setconfig(self, args, ALsetwidth);
 }
 
 static PyObject *
-alc_getwidth (self, args)
-	alcobject *self;
-	PyObject *args;
+alc_getwidth (alcobject *self, PyObject *args)
 {
 	return getconfig(self, args, ALgetwidth);	
 }
 
 static PyObject *
-alc_getchannels (self, args)
-	alcobject *self;
-	PyObject *args;
+alc_getchannels (alcobject *self, PyObject *args)
 {
 	return getconfig(self, args, ALgetchannels);	
 }
 
 static PyObject *
-alc_setchannels (self, args)
-	alcobject *self;
-	PyObject *args;
+alc_setchannels (alcobject *self, PyObject *args)
 {
 	return setconfig(self, args, ALsetchannels);
 }
@@ -543,25 +495,19 @@
 #ifdef AL_405
 
 static PyObject *
-alc_getsampfmt (self, args)
-	alcobject *self;
-	PyObject *args;
+alc_getsampfmt (alcobject *self, PyObject *args)
 {
 	return getconfig(self, args, ALgetsampfmt);	
 }
 
 static PyObject *
-alc_setsampfmt (self, args)
-	alcobject *self;
-	PyObject *args;
+alc_setsampfmt (alcobject *self, PyObject *args)
 {
 	return setconfig(self, args, ALsetsampfmt);
 }
 
 static PyObject *
-alc_getfloatmax(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_getfloatmax(alcobject *self, PyObject *args)
 {
 	double arg;
 
@@ -573,9 +519,7 @@
 }
 
 static PyObject *
-alc_setfloatmax(self, args)
-	alcobject *self;
-	PyObject *args;
+alc_setfloatmax(alcobject *self, PyObject *args)
 {
 	double arg;
 
@@ -637,8 +581,7 @@
 
 
 static void
-alc_dealloc(self)
-	alcobject *self;
+alc_dealloc(alcobject *self)
 {
 	/* XXXX Add your own cleanup code here */
 #ifdef AL_NO_ELEM		/* IRIX 6 */
@@ -650,9 +593,7 @@
 }
 
 static PyObject *
-alc_getattr(self, name)
-	alcobject *self;
-	char *name;
+alc_getattr(alcobject *self, char *name)
 {
 	/* XXXX Add your own getattr code here */
 	return Py_FindMethod(alc_methods, (PyObject *)self, name);
@@ -697,9 +638,7 @@
 ;
 
 static PyObject *
-alp_SetConfig(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_SetConfig(alpobject *self, PyObject *args)
 {
 	alcobject *config;
 	if (!PyArg_ParseTuple(args, "O!:SetConfig", &Alctype, &config))
@@ -716,9 +655,7 @@
 ;
 
 static PyObject *
-alp_GetConfig(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_GetConfig(alpobject *self, PyObject *args)
 {
 	ALconfig config;
 	if (!PyArg_ParseTuple(args, ":GetConfig"))
@@ -734,9 +671,7 @@
 ;
 
 static PyObject *
-alp_GetResource(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_GetResource(alpobject *self, PyObject *args)
 {
 	int resource;
 
@@ -753,9 +688,7 @@
 ;
 
 static PyObject *
-alp_GetFD(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_GetFD(alpobject *self, PyObject *args)
 {
 	int fd;
 
@@ -774,9 +707,7 @@
 ;
 
 static PyObject *
-alp_GetFilled(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_GetFilled(alpobject *self, PyObject *args)
 {
 	int filled;
 
@@ -793,9 +724,7 @@
 ;
 
 static PyObject *
-alp_GetFillable(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_GetFillable(alpobject *self, PyObject *args)
 {
 	int fillable;
 
@@ -812,9 +741,7 @@
 ;
 
 static PyObject *
-alp_ReadFrames(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_ReadFrames(alpobject *self, PyObject *args)
 {
 	void *samples;
 	int framecount;
@@ -883,9 +810,7 @@
 ;
 
 static PyObject *
-alp_DiscardFrames(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_DiscardFrames(alpobject *self, PyObject *args)
 {
 	int framecount;
 
@@ -908,9 +833,7 @@
 ;
 
 static PyObject *
-alp_ZeroFrames(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_ZeroFrames(alpobject *self, PyObject *args)
 {
 	int framecount;
 
@@ -936,9 +859,7 @@
 ;
 
 static PyObject *
-alp_SetFillPoint(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_SetFillPoint(alpobject *self, PyObject *args)
 {
 	int fillpoint;
 
@@ -958,9 +879,7 @@
 ;
 
 static PyObject *
-alp_GetFillPoint(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_GetFillPoint(alpobject *self, PyObject *args)
 {
 	int fillpoint;
 
@@ -979,9 +898,7 @@
 ;
 
 static PyObject *
-alp_GetFrameNumber(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_GetFrameNumber(alpobject *self, PyObject *args)
 {
 	stamp_t fnum;
 
@@ -1000,9 +917,7 @@
 ;
 
 static PyObject *
-alp_GetFrameTime(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_GetFrameTime(alpobject *self, PyObject *args)
 {
 	stamp_t fnum, time;
 	PyObject *ret, *v0, *v1;
@@ -1030,9 +945,7 @@
 ;
 
 static PyObject *
-alp_WriteFrames(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_WriteFrames(alpobject *self, PyObject *args)
 {
 	char *samples;
 	int length;
@@ -1098,9 +1011,7 @@
 ;
 
 static PyObject *
-alp_ClosePort(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_ClosePort(alpobject *self, PyObject *args)
 {
 	if (!PyArg_ParseTuple(args, ":ClosePort"))
 		return NULL;
@@ -1115,9 +1026,7 @@
 
 #ifdef OLD_INTERFACE
 static PyObject *
-alp_closeport(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_closeport(alpobject *self, PyObject *args)
 {
 	if (!PyArg_ParseTuple(args, ":ClosePort"))
 		return NULL;
@@ -1129,9 +1038,7 @@
 }
 
 static PyObject *
-alp_getfd(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_getfd(alpobject *self, PyObject *args)
 {
 	int fd;
 
@@ -1143,9 +1050,7 @@
 }
 
 static PyObject *
-alp_getfilled(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_getfilled(alpobject *self, PyObject *args)
 {
 	long count;
 
@@ -1157,9 +1062,7 @@
 }
 
 static PyObject *
-alp_getfillable(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_getfillable(alpobject *self, PyObject *args)
 {
 	long count;
 
@@ -1171,9 +1074,7 @@
 }
 
 static PyObject *
-alp_readsamps(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_readsamps(alpobject *self, PyObject *args)
 {
 	long count;
 	PyObject *v;
@@ -1218,9 +1119,7 @@
 }
 
 static PyObject *
-alp_writesamps(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_writesamps(alpobject *self, PyObject *args)
 {
 	char *buf;
 	int size, width;
@@ -1254,9 +1153,7 @@
 }
 
 static PyObject *
-alp_getfillpoint(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_getfillpoint(alpobject *self, PyObject *args)
 {
 	long count;
 
@@ -1268,9 +1165,7 @@
 }
 
 static PyObject *
-alp_setfillpoint(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_setfillpoint(alpobject *self, PyObject *args)
 {
 	long count;
 
@@ -1283,9 +1178,7 @@
 }
 
 static PyObject *
-alp_setconfig(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_setconfig(alpobject *self, PyObject *args)
 {
 	alcobject *config;
 
@@ -1298,9 +1191,7 @@
 }
 
 static PyObject *
-alp_getconfig(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_getconfig(alpobject *self, PyObject *args)
 {
 	ALconfig config;
 
@@ -1314,9 +1205,7 @@
 
 #ifdef AL_405
 static PyObject *
-alp_getstatus(self, args)
-	alpobject *self;
-	PyObject *args;
+alp_getstatus(alpobject *self, PyObject *args)
 {
 	PyObject *list, *v;
 	long *PVbuffer;
@@ -1410,8 +1299,7 @@
 
 
 static void
-alp_dealloc(self)
-	alpobject *self;
+alp_dealloc(alpobject *self)
 {
 	/* XXXX Add your own cleanup code here */
 	if (self->port) {
@@ -1425,9 +1313,7 @@
 }
 
 static PyObject *
-alp_getattr(self, name)
-	alpobject *self;
-	char *name;
+alp_getattr(alpobject *self, char *name)
 {
 	/* XXXX Add your own getattr code here */
 	if (self->port == NULL) {
@@ -1477,9 +1363,7 @@
 ;
 
 static PyObject *
-al_NewConfig(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_NewConfig(PyObject *self, PyObject *args)
 {
 	ALconfig config;
 
@@ -1495,9 +1379,7 @@
 ;
 
 static PyObject *
-al_OpenPort(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_OpenPort(PyObject *self, PyObject *args)
 {
 	ALport port;
 	char *name, *dir;
@@ -1515,9 +1397,7 @@
 ;
 
 static PyObject *
-al_Connect(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_Connect(PyObject *self, PyObject *args)
 {
 	int source, dest, nprops = 0, id, i;
 	ALpv *props = NULL;
@@ -1557,9 +1437,7 @@
 ;
 
 static PyObject *
-al_Disconnect(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_Disconnect(PyObject *self, PyObject *args)
 {
 	int res;
 
@@ -1576,9 +1454,7 @@
 ;
 
 static PyObject *
-al_GetParams(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_GetParams(PyObject *self, PyObject *args)
 {
 	int resource;
 	PyObject *pvslist, *item = NULL, *v = NULL;
@@ -1722,9 +1598,7 @@
 ;
 
 static PyObject *
-al_SetParams(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_SetParams(PyObject *self, PyObject *args)
 {
 	int resource;
 	PyObject *pvslist, *item;
@@ -1770,9 +1644,7 @@
 ;
 
 static PyObject *
-al_QueryValues(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_QueryValues(PyObject *self, PyObject *args)
 {
 	int resource, param;
 	ALvalue *return_set = NULL;
@@ -1852,9 +1724,7 @@
 ;
 
 static PyObject *
-al_GetParamInfo(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_GetParamInfo(PyObject *self, PyObject *args)
 {
 	int res, param;
 	ALparamInfo pinfo;
@@ -1937,9 +1807,7 @@
 ;
 
 static PyObject *
-al_GetResourceByName(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_GetResourceByName(PyObject *self, PyObject *args)
 {
 	int res, start_res, type;
 	char *name;
@@ -1956,9 +1824,7 @@
 ;
 
 static PyObject *
-al_IsSubtype(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_IsSubtype(PyObject *self, PyObject *args)
 {
 	int type, subtype;
 
@@ -1972,9 +1838,7 @@
 ;
 
 static PyObject *
-al_SetErrorHandler(self, args)
-	PyObject *self;	/* Not used */
-	PyObject *args;
+al_SetErrorHandler(PyObject *self, PyObject *args)
 {
 
 	if (!PyArg_ParseTuple(args, ":SetErrorHandler"))
@@ -1988,8 +1852,7 @@
 #ifdef OLD_INTERFACE
 
 static PyObject *
-al_openport(self, args)
-	PyObject *self, *args;
+al_openport(PyObject *self, PyObject *args)
 {
 	char *name, *dir;
 	ALport port;
@@ -2003,8 +1866,7 @@
 }
 
 static PyObject *
-al_newconfig(self, args)
-	PyObject *self, *args;
+al_newconfig(PyObject *self, PyObject *args)
 {
 	ALconfig config;
 
@@ -2016,8 +1878,7 @@
 }
 
 static PyObject *
-al_queryparams(self, args)
-	PyObject *self, *args;
+al_queryparams(PyObject *self, PyObject *args)
 {
 	long device;
 	long length;
@@ -2042,10 +1903,7 @@
 }
 
 static PyObject *
-doParams(args, func, modified)
-	PyObject *args;
-	int (*func)(long, long *, long);
-	int modified;
+doParams(PyObject *args, int (*func)(long, long *, long), int modified)
 {
 	long device;
 	PyObject *list, *v;
@@ -2086,22 +1944,19 @@
 }
 
 static PyObject *
-al_getparams(self, args)
-	PyObject *self, *args;
+al_getparams(PyObject *self, PyObject *args)
 {
 	return doParams(args, ALgetparams, 1);
 }
 
 static PyObject *
-al_setparams(self, args)
-	PyObject *self, *args;
+al_setparams(PyObject *self, PyObject *args)
 {
 	return doParams(args, ALsetparams, 0);
 }
 
 static PyObject *
-al_getname(self, args)
-	PyObject *self, *args;
+al_getname(PyObject *self, PyObject *args)
 {
 	long device, descriptor;
 	char *name;
@@ -2114,8 +1969,7 @@
 }
 
 static PyObject *
-al_getdefault(self, args)
-	PyObject *self, *args;
+al_getdefault(PyObject *self, PyObject *args)
 {
 	long device, descriptor, value;
 
@@ -2127,8 +1981,7 @@
 }
 
 static PyObject *
-al_getminmax(self, args)
-	PyObject *self, *args;
+al_getminmax(PyObject *self, PyObject *args)
 {
 	long device, descriptor, min, max;
 
diff --git a/Modules/cdmodule.c b/Modules/cdmodule.c
index 614eca1..a7cfb54 100644
--- a/Modules/cdmodule.c
+++ b/Modules/cdmodule.c
@@ -25,9 +25,7 @@
 static PyObject *CdError;		/* exception cd.error */
 
 static PyObject *
-CD_allowremoval(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_allowremoval(cdplayerobject *self, PyObject *args)
 {
 	if (!PyArg_ParseTuple(args, ":allowremoval"))
 		return NULL;
@@ -39,9 +37,7 @@
 }
 
 static PyObject *
-CD_preventremoval(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_preventremoval(cdplayerobject *self, PyObject *args)
 {
 	if (!PyArg_ParseTuple(args, ":preventremoval"))
 		return NULL;
@@ -53,9 +49,7 @@
 }
 
 static PyObject *
-CD_bestreadsize(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_bestreadsize(cdplayerobject *self, PyObject *args)
 {
 	if (!PyArg_ParseTuple(args, ":bestreadsize"))
 		return NULL;
@@ -64,9 +58,7 @@
 }
 
 static PyObject *
-CD_close(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_close(cdplayerobject *self, PyObject *args)
 {
 	if (!PyArg_ParseTuple(args, ":close"))
 		return NULL;
@@ -82,9 +74,7 @@
 }
 
 static PyObject *
-CD_eject(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_eject(cdplayerobject *self, PyObject *args)
 {
 	CDSTATUS status;
 
@@ -105,9 +95,7 @@
 }
 	
 static PyObject *
-CD_getstatus(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_getstatus(cdplayerobject *self, PyObject *args)
 {
 	CDSTATUS status;
 
@@ -128,9 +116,7 @@
 }
 	
 static PyObject *
-CD_gettrackinfo(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_gettrackinfo(cdplayerobject *self, PyObject *args)
 {
 	int track;
 	CDTRACKINFO info;
@@ -154,9 +140,7 @@
 }
 	
 static PyObject *
-CD_msftoblock(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_msftoblock(cdplayerobject *self, PyObject *args)
 {
 	int min, sec, frame;
 
@@ -168,9 +152,7 @@
 }
 	
 static PyObject *
-CD_play(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_play(cdplayerobject *self, PyObject *args)
 {
 	int start, play;
 	CDSTATUS status;
@@ -192,9 +174,7 @@
 }
 	
 static PyObject *
-CD_playabs(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_playabs(cdplayerobject *self, PyObject *args)
 {
 	int min, sec, frame, play;
 	CDSTATUS status;
@@ -216,9 +196,7 @@
 }
 	
 static PyObject *
-CD_playtrack(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_playtrack(cdplayerobject *self, PyObject *args)
 {
 	int start, play;
 	CDSTATUS status;
@@ -240,9 +218,7 @@
 }
 	
 static PyObject *
-CD_playtrackabs(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_playtrackabs(cdplayerobject *self, PyObject *args)
 {
 	int track, min, sec, frame, play;
 	CDSTATUS status;
@@ -265,9 +241,7 @@
 }
 	
 static PyObject *
-CD_readda(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_readda(cdplayerobject *self, PyObject *args)
 {
 	int numframes, n;
 	PyObject *result;
@@ -294,9 +268,7 @@
 }
 
 static PyObject *
-CD_seek(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_seek(cdplayerobject *self, PyObject *args)
 {
 	int min, sec, frame;
 	long PyTryBlock;
@@ -314,9 +286,7 @@
 }
 	
 static PyObject *
-CD_seektrack(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_seektrack(cdplayerobject *self, PyObject *args)
 {
 	int track;
 	long PyTryBlock;
@@ -334,9 +304,7 @@
 }
 	
 static PyObject *
-CD_seekblock(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_seekblock(cdplayerobject *self, PyObject *args)
 {
 	unsigned long PyTryBlock;
 
@@ -353,9 +321,7 @@
 }
 	
 static PyObject *
-CD_stop(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_stop(cdplayerobject *self, PyObject *args)
 {
 	CDSTATUS status;
 
@@ -376,9 +342,7 @@
 }
 	
 static PyObject *
-CD_togglepause(self, args)
-	cdplayerobject *self;
-	PyObject *args;
+CD_togglepause(cdplayerobject *self, PyObject *args)
 {
 	CDSTATUS status;
 
@@ -421,8 +385,7 @@
 };
 
 static void
-cdplayer_dealloc(self)
-	cdplayerobject *self;
+cdplayer_dealloc(cdplayerobject *self)
 {
 	if (self->ob_cdplayer != NULL)
 		CDclose(self->ob_cdplayer);
@@ -430,9 +393,7 @@
 }
 
 static PyObject *
-cdplayer_getattr(self, name)
-	cdplayerobject *self;
-	char *name;
+cdplayer_getattr(cdplayerobject *self, char *name)
 {
 	if (self->ob_cdplayer == NULL) {
 		PyErr_SetString(PyExc_RuntimeError, "no player active");
@@ -457,8 +418,7 @@
 };
 
 static PyObject *
-newcdplayerobject(cdp)
-	CDPLAYER *cdp;
+newcdplayerobject(CDPLAYER *cdp)
 {
 	cdplayerobject *p;
 
@@ -470,8 +430,7 @@
 }
 
 static PyObject *
-CD_open(self, args)
-	PyObject *self, *args;
+CD_open(PyObject *self, PyObject *args)
 {
 	char *dev, *direction;
 	CDPLAYER *cdp;
@@ -504,10 +463,7 @@
 } cdparserobject;
 
 static void
-CD_callback(arg, type, data)
-	void *arg;
-	CDDATATYPES type;
-	void *data;
+CD_callback(void *arg, CDDATATYPES type, void *data)
 {
 	PyObject *result, *args, *v = NULL;
 	char *p;
@@ -578,9 +534,7 @@
 }
 
 static PyObject *
-CD_deleteparser(self, args)
-	cdparserobject *self;
-	PyObject *args;
+CD_deleteparser(cdparserobject *self, PyObject *args)
 {
 	int i;
 
@@ -603,9 +557,7 @@
 }
 
 static PyObject *
-CD_parseframe(self, args)
-	cdparserobject *self;
-	PyObject *args;
+CD_parseframe(cdparserobject *self, PyObject *args)
 {
 	char *cdfp;
 	int length;
@@ -633,9 +585,7 @@
 }
 
 static PyObject *
-CD_removecallback(self, args)
-	cdparserobject *self;
-	PyObject *args;
+CD_removecallback(cdparserobject *self, PyObject *args)
 {
 	int type;
 
@@ -660,9 +610,7 @@
 }
 
 static PyObject *
-CD_resetparser(self, args)
-	cdparserobject *self;
-	PyObject *args;
+CD_resetparser(cdparserobject *self, PyObject *args)
 {
 	if (!PyArg_ParseTuple(args, ":resetparser"))
 		return NULL;
@@ -674,9 +622,7 @@
 }
 
 static PyObject *
-CD_addcallback(self, args)
-	cdparserobject *self;
-	PyObject *args;
+CD_addcallback(cdparserobject *self, PyObject *args)
 {
 	int type;
 	PyObject *func, *funcarg;
@@ -728,8 +674,7 @@
 };
 
 static void
-cdparser_dealloc(self)
-	cdparserobject *self;
+cdparser_dealloc(cdparserobject *self)
 {
 	int i;
 
@@ -744,9 +689,7 @@
 }
 
 static PyObject *
-cdparser_getattr(self, name)
-	cdparserobject *self;
-	char *name;
+cdparser_getattr(cdparserobject *self, char *name)
 {
 	if (self->ob_cdparser == NULL) {
 		PyErr_SetString(PyExc_RuntimeError, "no parser active");
@@ -772,8 +715,7 @@
 };
 
 static PyObject *
-newcdparserobject(cdp)
-	CDPARSER *cdp;
+newcdparserobject(CDPARSER *cdp)
 {
 	cdparserobject *p;
 	int i;
@@ -790,8 +732,7 @@
 }
 
 static PyObject *
-CD_createparser(self, args)
-	PyObject *self, *args;
+CD_createparser(PyObject *self, PyObject *args)
 {
 	CDPARSER *cdp;
 
@@ -807,8 +748,7 @@
 }
 
 static PyObject *
-CD_msftoframe(self, args)
-	PyObject *self, *args;
+CD_msftoframe(PyObject *self, PyObject *args)
 {
 	int min, sec, frame;
 
diff --git a/Modules/cgensupport.c b/Modules/cgensupport.c
index 23fb2a9..71b5586 100644
--- a/Modules/cgensupport.c
+++ b/Modules/cgensupport.c
@@ -20,10 +20,7 @@
    one argument. */
 
 int
-PyArg_GetObject(args, nargs, i, p_arg)
-	register PyObject *args;
-	int nargs, i;
-	PyObject **p_arg;
+PyArg_GetObject(register PyObject *args, int nargs, int i, PyObject **p_arg)
 {
 	if (nargs != 1) {
 		if (args == NULL || !PyTuple_Check(args) ||
@@ -43,10 +40,7 @@
 }
 
 int
-PyArg_GetLong(args, nargs, i, p_arg)
-	register PyObject *args;
-	int nargs, i;
-	long *p_arg;
+PyArg_GetLong(register PyObject *args, int nargs, int i, long *p_arg)
 {
 	if (nargs != 1) {
 		if (args == NULL || !PyTuple_Check(args) ||
@@ -64,10 +58,7 @@
 }
 
 int
-PyArg_GetShort(args, nargs, i, p_arg)
-	register PyObject *args;
-	int nargs, i;
-	short *p_arg;
+PyArg_GetShort(register PyObject *args, int nargs, int i, short *p_arg)
 {
 	long x;
 	if (!PyArg_GetLong(args, nargs, i, &x))
@@ -77,9 +68,7 @@
 }
 
 static int
-extractdouble(v, p_arg)
-	register PyObject *v;
-	double *p_arg;
+extractdouble(register PyObject *v, double *p_arg)
 {
 	if (v == NULL) {
 		/* Fall through to error return at end of function */
@@ -100,9 +89,7 @@
 }
 
 static int
-extractfloat(v, p_arg)
-	register PyObject *v;
-	float *p_arg;
+extractfloat(register PyObject *v, float *p_arg)
 {
 	if (v == NULL) {
 		/* Fall through to error return at end of function */
@@ -123,10 +110,7 @@
 }
 
 int
-PyArg_GetFloat(args, nargs, i, p_arg)
-	register PyObject *args;
-	int nargs, i;
-	float *p_arg;
+PyArg_GetFloat(register PyObject *args, int nargs, int i, float *p_arg)
 {
 	PyObject *v;
 	float x;
@@ -139,10 +123,7 @@
 }
 
 int
-PyArg_GetString(args, nargs, i, p_arg)
-	PyObject *args;
-	int nargs, i;
-	string *p_arg;
+PyArg_GetString(PyObject *args, int nargs, int i, string *p_arg)
 {
 	PyObject *v;
 	if (!PyArg_GetObject(args, nargs, i, &v))
@@ -155,10 +136,7 @@
 }
 
 int
-PyArg_GetChar(args, nargs, i, p_arg)
-	PyObject *args;
-	int nargs, i;
-	char *p_arg;
+PyArg_GetChar(PyObject *args, int nargs, int i, char *p_arg)
 {
 	string x;
 	if (!PyArg_GetString(args, nargs, i, &x))
@@ -172,10 +150,7 @@
 }
 
 int
-PyArg_GetLongArraySize(args, nargs, i, p_arg)
-	PyObject *args;
-	int nargs, i;
-	long *p_arg;
+PyArg_GetLongArraySize(PyObject *args, int nargs, int i, long *p_arg)
 {
 	PyObject *v;
 	if (!PyArg_GetObject(args, nargs, i, &v))
@@ -192,10 +167,7 @@
 }
 
 int
-PyArg_GetShortArraySize(args, nargs, i, p_arg)
-	PyObject *args;
-	int nargs, i;
-	short *p_arg;
+PyArg_GetShortArraySize(PyObject *args, int nargs, int i, short *p_arg)
 {
 	long x;
 	if (!PyArg_GetLongArraySize(args, nargs, i, &x))
@@ -207,11 +179,7 @@
 /* XXX The following four are too similar.  Should share more code. */
 
 int
-PyArg_GetLongArray(args, nargs, i, n, p_arg)
-	PyObject *args;
-	int nargs, i;
-	int n;
-	long *p_arg; /* [n] */
+PyArg_GetLongArray(PyObject *args, int nargs, int i, int n, long *p_arg)
 {
 	PyObject *v, *w;
 	if (!PyArg_GetObject(args, nargs, i, &v))
@@ -248,11 +216,7 @@
 }
 
 int
-PyArg_GetShortArray(args, nargs, i, n, p_arg)
-	PyObject *args;
-	int nargs, i;
-	int n;
-	short *p_arg; /* [n] */
+PyArg_GetShortArray(PyObject *args, int nargs, int i, int n, short *p_arg)
 {
 	PyObject *v, *w;
 	if (!PyArg_GetObject(args, nargs, i, &v))
@@ -289,11 +253,7 @@
 }
 
 int
-PyArg_GetDoubleArray(args, nargs, i, n, p_arg)
-	PyObject *args;
-	int nargs, i;
-	int n;
-	double *p_arg; /* [n] */
+PyArg_GetDoubleArray(PyObject *args, int nargs, int i, int n, double *p_arg)
 {
 	PyObject *v, *w;
 	if (!PyArg_GetObject(args, nargs, i, &v))
@@ -326,11 +286,7 @@
 }
 
 int
-PyArg_GetFloatArray(args, nargs, i, n, p_arg)
-	PyObject *args;
-	int nargs, i;
-	int n;
-	float *p_arg; /* [n] */
+PyArg_GetFloatArray(PyObject *args, int nargs, int i, int n, float *p_arg)
 {
 	PyObject *v, *w;
 	if (!PyArg_GetObject(args, nargs, i, &v))
diff --git a/Modules/flmodule.c b/Modules/flmodule.c
index 6f22f6e..56a0fe6 100644
--- a/Modules/flmodule.c
+++ b/Modules/flmodule.c
@@ -51,8 +51,7 @@
 /* Add an object to the list of known objects */
 
 static void
-knowgeneric(g)
-	genericobject *g;
+knowgeneric(genericobject *g)
 {
 	int i, n;
 	/* Create the list if it doesn't already exist */
@@ -85,8 +84,7 @@
 /* Find an object in the list of known objects */
 
 static genericobject *
-findgeneric(generic)
-	FL_OBJECT *generic;
+findgeneric(FL_OBJECT *generic)
 {
 	int i, n;
 	genericobject *g;
@@ -105,8 +103,7 @@
 /* Remove an object from the list of known objects */
 
 static void
-forgetgeneric(g)
-	genericobject *g;
+forgetgeneric(genericobject *g)
 {
 	int i, n;
 	
@@ -130,8 +127,7 @@
    remove all the objects that we know about from it. */
 
 static void
-releaseobjects(form)
-	FL_FORM *form;
+releaseobjects(FL_FORM *form)
 {
 	int i, n;
 	genericobject *g;
@@ -160,9 +156,7 @@
 /* Methods of generic objects */
 
 static PyObject *
-generic_set_call_back(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_set_call_back(genericobject *g, PyObject *args)
 {
 	if (args == NULL) {
 		Py_XDECREF(g->ob_callback);
@@ -187,10 +181,7 @@
 }
 
 static PyObject *
-generic_call(g, args, func)
-	genericobject *g;
-	PyObject *args;
-	void (*func)(FL_OBJECT *);
+generic_call(genericobject *g, PyObject *args, void (*func)(FL_OBJECT *))
 {
 	if (!PyArg_NoArgs(args))
 		return NULL;
@@ -200,9 +191,7 @@
 }
 
 static PyObject *
-generic_delete_object(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_delete_object(genericobject *g, PyObject *args)
 {
 	PyObject *res;
 	res = generic_call(g, args, fl_delete_object);
@@ -212,25 +201,19 @@
 }
 
 static PyObject *
-generic_show_object(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_show_object(genericobject *g, PyObject *args)
 {
 	return generic_call(g, args, fl_show_object);
 }
 
 static PyObject *
-generic_hide_object(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_hide_object(genericobject *g, PyObject *args)
 {
 	return generic_call(g, args, fl_hide_object);
 }
 
 static PyObject *
-generic_redraw_object(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_redraw_object(genericobject *g, PyObject *args)
 {
 	return generic_call(g, args, fl_redraw_object);
 }
@@ -242,17 +225,13 @@
     using, we omit them unconditionally. */
  
 static PyObject *
-generic_freeze_object(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_freeze_object(genericobject *g, PyObject *args)
 {
 	return generic_call(g, args, fl_freeze_object);
 }
 
 static PyObject *
-generic_unfreeze_object(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_unfreeze_object(genericobject *g, PyObject *args)
 {
 	return generic_call(g, args, fl_unfreeze_object);
 }
@@ -260,25 +239,19 @@
 #endif /* OBSOLETE_FORMS_CALLS */
 
 static PyObject *
-generic_activate_object(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_activate_object(genericobject *g, PyObject *args)
 {
 	return generic_call(g, args, fl_activate_object);
 }
 
 static PyObject *
-generic_deactivate_object(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_deactivate_object(genericobject *g, PyObject *args)
 {
 	return generic_call(g, args, fl_deactivate_object);
 }
 
 static PyObject *
-generic_set_object_shortcut(g, args)
-	genericobject *g;
-	PyObject *args;
+generic_set_object_shortcut(genericobject *g, PyObject *args)
 {
 	char *str;
 	if (!PyArg_Parse(args, "s", &str))
@@ -305,8 +278,7 @@
 };
 
 static void
-generic_dealloc(g)
-	genericobject *g;
+generic_dealloc(genericobject *g)
 {
 	fl_free_object(g->ob_generic);
 	Py_XDECREF(g->ob_callback);
@@ -346,9 +318,7 @@
 #undef OFF
 
 static PyObject *
-generic_getattr(g, name)
-	genericobject *g;
-	char *name;
+generic_getattr(genericobject *g, char *name)
 {
 	PyObject *meth;
 
@@ -373,10 +343,7 @@
 }
 
 static int
-generic_setattr(g, name, v)
-	genericobject *g;
-	char *name;
-	PyObject *v;
+generic_setattr(genericobject *g, char *name PyObject *v)
 {
 	int ret;
 
@@ -410,8 +377,7 @@
 }
 
 static PyObject *
-generic_repr(g)
-	genericobject *g;
+generic_repr(genericobject *g)
 {
 	char buf[100];
 	sprintf(buf, "<FORMS_object at %p, objclass=%d>",
@@ -435,9 +401,7 @@
 };
 
 static PyObject *
-newgenericobject(generic, methods)
-	FL_OBJECT *generic;
-	PyMethodDef *methods;
+newgenericobject(FL_OBJECT *generic, PyMethodDef *methods)
 {
 	genericobject *g;
 	g = PyObject_New(genericobject, &GenericObjecttype);
@@ -456,10 +420,7 @@
 
 /* void func (object, float) */
 static PyObject *
-call_forms_INf (func, obj, args)
-	void (*func)(FL_OBJECT *, float);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_INf (void (*func)(FL_OBJECT *, float), FL_OBJECT *obj, PyObject *args)
 {
 	float parameter;
 
@@ -473,10 +434,7 @@
 
 /* void func (object, float) */
 static PyObject *
-call_forms_INfINf (func, obj, args)
-	void (*func)(FL_OBJECT *, float, float);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_INfINf (void (*func)(FL_OBJECT *, float, float), FL_OBJECT *obj, PyObject *args)
 {
 	float par1, par2;
 
@@ -490,10 +448,7 @@
 
 /* void func (object, int) */
 static PyObject *
-call_forms_INi (func, obj, args)
-	void (*func)(FL_OBJECT *, int);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_INi (void (*func)(FL_OBJECT *, int), FL_OBJECT *obj, PyObject *args)
 {
 	int parameter;
 
@@ -507,10 +462,7 @@
 
 /* void func (object, char) */
 static PyObject *
-call_forms_INc (func, obj, args)
-	void (*func)(FL_OBJECT *, int);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_INc (void (*func)(FL_OBJECT *, int), FL_OBJECT *obj, PyObject *args)
 {
 	char *a;
 
@@ -524,10 +476,7 @@
 
 /* void func (object, string) */
 static PyObject *
-call_forms_INstr (func, obj, args)
-	void (*func)(FL_OBJECT *, char *);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_INstr (void (*func)(FL_OBJECT *, char *), FL_OBJECT *obj, PyObject *args)
 {
 	char *a;
 
@@ -542,10 +491,7 @@
 
 /* void func (object, int, string) */
 static PyObject *
-call_forms_INiINstr (func, obj, args)
-	void (*func)(FL_OBJECT *, int, char *);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_INiINstr (void (*func)(FL_OBJECT *, int, char *), FL_OBJECT *obj, PyObject *args)
 {
 	char *b;
 	int a;
@@ -561,10 +507,7 @@
 #ifdef UNUSED
 /* void func (object, int, int) */
 static PyObject *
-call_forms_INiINi (func, obj, args)
-	void (*func)(FL_OBJECT *, int, int);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_INiINi (void (*func)(FL_OBJECT *, int, int), FL_OBJECT *obj, PyObject *args)
 {
 	int par1, par2;
 	
@@ -579,10 +522,7 @@
 
 /* int func (object) */
 static PyObject *
-call_forms_Ri (func, obj, args)
-	int (*func)(FL_OBJECT *);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_Ri (int (*func)(FL_OBJECT *), FL_OBJECT *obj, PyObject *args)
 {
 	int retval;
 	
@@ -595,10 +535,7 @@
 
 /* char * func (object) */
 static PyObject *
-call_forms_Rstr (func, obj, args)
-	char * (*func)(FL_OBJECT *);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_Rstr (char * (*func)(FL_OBJECT *), FL_OBJECT *obj, PyObject *args)
 {
 	char *str;
 	
@@ -615,10 +552,7 @@
 
 /* int func (object) */
 static PyObject *
-call_forms_Rf (func, obj, args)
-	float (*func)(FL_OBJECT *);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_Rf (float (*func)(FL_OBJECT *), FL_OBJECT *obj, PyObject *args)
 {
 	float retval;
 	
@@ -630,10 +564,7 @@
 }
 
 static PyObject *
-call_forms_OUTfOUTf (func, obj, args)
-	void (*func)(FL_OBJECT *, float *, float *);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_OUTfOUTf (void (*func)(FL_OBJECT *, float *, float *), FL_OBJECT *obj, PyObject *args)
 {
 	float f1, f2;
 	
@@ -646,10 +577,7 @@
 
 #ifdef UNUSED
 static PyObject *
-call_forms_OUTf (func, obj, args)
-	void (*func)(FL_OBJECT *, float *);
-	FL_OBJECT *obj;
-	PyObject *args;
+call_forms_OUTf (void (*func)(FL_OBJECT *, float *), FL_OBJECT *obj, PyObject *args)
 {
 	float f;
 
@@ -665,67 +593,51 @@
 /* Class : browser */
 
 static PyObject *
-set_browser_topline(g, args)
-	genericobject *g;
-	PyObject *args;
+set_browser_topline(genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_set_browser_topline, g-> ob_generic, args);
 }
 
 static PyObject *
-clear_browser(g, args)
-	genericobject *g;
-	PyObject *args;
+clear_browser(genericobject *g, PyObject *args)
 {
 	return generic_call (g, args, fl_clear_browser);
 }
 
 static PyObject *
-add_browser_line (g, args)
-	genericobject *g;
-	PyObject *args;
+add_browser_line (genericobject *g, PyObject *args)
 {
 	return call_forms_INstr (fl_add_browser_line, g-> ob_generic, args);
 }
 
 static PyObject *
-addto_browser (g, args)
-	genericobject *g;
-	PyObject *args;
+addto_browser (genericobject *g, PyObject *args)
 {
 	return call_forms_INstr (fl_addto_browser, g-> ob_generic, args);
 }
 
 static PyObject *
-insert_browser_line (g, args)
-	genericobject *g;
-	PyObject *args;
+insert_browser_line (genericobject *g, PyObject *args)
 {
 	return call_forms_INiINstr (fl_insert_browser_line,
 				    g-> ob_generic, args);
 }
 
 static PyObject *
-delete_browser_line (g, args)
-	genericobject *g;
-	PyObject *args;
+delete_browser_line (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_delete_browser_line, g-> ob_generic, args);
 }
 
 static PyObject *
-replace_browser_line (g, args)
-	genericobject *g;
-	PyObject *args;
+replace_browser_line (genericobject *g, PyObject *args)
 {
 	return call_forms_INiINstr (fl_replace_browser_line,
 				    g-> ob_generic, args);
 }
 
 static PyObject *
-get_browser_line(g, args)
-	genericobject *g;
-	PyObject *args;
+get_browser_line(genericobject *g, PyObject *args)
 {
 	int i;
 	char *str;
@@ -743,9 +655,7 @@
 }
 
 static PyObject *
-load_browser (g, args)
-	genericobject *g;
-	PyObject *args;
+load_browser (genericobject *g, PyObject *args)
 {
 	/* XXX strictly speaking this is wrong since fl_load_browser
 	   XXX returns int, not void */
@@ -753,41 +663,31 @@
 }
 
 static PyObject *
-get_browser_maxline(g, args)
-	genericobject *g;
-	PyObject *args;
+get_browser_maxline(genericobject *g, PyObject *args)
 {
 	return call_forms_Ri (fl_get_browser_maxline, g-> ob_generic, args);
 }
 
 static PyObject *
-select_browser_line (g, args)
-	genericobject *g;
-	PyObject *args;
+select_browser_line (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_select_browser_line, g-> ob_generic, args);
 }
 
 static PyObject *
-deselect_browser_line (g, args)
-	genericobject *g;
-	PyObject *args;
+deselect_browser_line (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_deselect_browser_line, g-> ob_generic, args);
 }
 
 static PyObject *
-deselect_browser (g, args)
-	genericobject *g;
-	PyObject *args;
+deselect_browser (genericobject *g, PyObject *args)
 {
 	return generic_call (g, args, fl_deselect_browser);
 }
 
 static PyObject *
-isselected_browser_line (g, args)
-	genericobject *g;
-	PyObject *args;
+isselected_browser_line (genericobject *g, PyObject *args)
 {
 	int i, j;
 	
@@ -800,33 +700,25 @@
 }
 
 static PyObject *
-get_browser (g, args)
-	genericobject *g;
-	PyObject *args;
+get_browser (genericobject *g, PyObject *args)
 {
 	return call_forms_Ri (fl_get_browser, g-> ob_generic, args);
 }
 
 static PyObject *
-set_browser_fontsize (g, args)
-	genericobject *g;
-	PyObject *args;
+set_browser_fontsize (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_browser_fontsize, g-> ob_generic, args);
 }
 
 static PyObject *
-set_browser_fontstyle (g, args)
-	genericobject *g;
-	PyObject *args;
+set_browser_fontstyle (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_set_browser_fontstyle, g-> ob_generic, args);
 }
 
 static PyObject *
-set_browser_specialkey (g, args)
-	genericobject *g;
-	PyObject *args;
+set_browser_specialkey (genericobject *g, PyObject *args)
 {
 	return call_forms_INc(fl_set_browser_specialkey, g-> ob_generic, args);
 }
@@ -856,33 +748,25 @@
 /* Class: button */
 
 static PyObject *
-set_button(g, args)
-	genericobject *g;
-	PyObject *args;
+set_button(genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_set_button, g-> ob_generic, args);
 }
 
 static PyObject *
-get_button(g, args)
-	genericobject *g;
-	PyObject *args;
+get_button(genericobject *g, PyObject *args)
 {
 	return call_forms_Ri (fl_get_button, g-> ob_generic, args);
 }
 
 static PyObject *
-get_button_numb(g, args)
-	genericobject *g;
-	PyObject *args;
+get_button_numb(genericobject *g, PyObject *args)
 {
 	return call_forms_Ri (fl_get_button_numb, g-> ob_generic, args);
 }
 
 static PyObject *
-set_button_shortcut(g, args)
-	genericobject *g;
-	PyObject *args;
+set_button_shortcut(genericobject *g, PyObject *args)
 {
 	return call_forms_INstr (fl_set_button_shortcut, g-> ob_generic, args);
 }
@@ -898,73 +782,55 @@
 /* Class: choice */
 
 static PyObject *
-set_choice(g, args)
-	genericobject *g;
-	PyObject *args;
+set_choice(genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_set_choice, g-> ob_generic, args);
 }
 
 static PyObject *
-get_choice(g, args)
-	genericobject *g;
-	PyObject *args;
+get_choice(genericobject *g, PyObject *args)
 {
 	return call_forms_Ri (fl_get_choice, g-> ob_generic, args);
 }
 
 static PyObject *
-clear_choice (g, args)
-	genericobject *g;
-	PyObject *args;
+clear_choice (genericobject *g, PyObject *args)
 {
 	return generic_call (g, args, fl_clear_choice);
 }
 
 static PyObject *
-addto_choice (g, args)
-	genericobject *g;
-	PyObject *args;
+addto_choice (genericobject *g, PyObject *args)
 {
 	return call_forms_INstr (fl_addto_choice, g-> ob_generic, args);
 }
 
 static PyObject *
-replace_choice (g, args)
-	genericobject *g;
-	PyObject *args;
+replace_choice (genericobject *g, PyObject *args)
 {
 	return call_forms_INiINstr (fl_replace_choice, g-> ob_generic, args);
 }
 
 static PyObject *
-delete_choice (g, args)
-	genericobject *g;
-	PyObject *args;
+delete_choice (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_delete_choice, g-> ob_generic, args);
 }
 
 static PyObject *
-get_choice_text (g, args)
-	genericobject *g;
-	PyObject *args;
+get_choice_text (genericobject *g, PyObject *args)
 {
 	return call_forms_Rstr (fl_get_choice_text, g-> ob_generic, args);
 }
 
 static PyObject *
-set_choice_fontsize (g, args)
-	genericobject *g;
-	PyObject *args;
+set_choice_fontsize (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_choice_fontsize, g-> ob_generic, args);
 }
 
 static PyObject *
-set_choice_fontstyle (g, args)
-	genericobject *g;
-	PyObject *args;
+set_choice_fontstyle (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_set_choice_fontstyle, g-> ob_generic, args);
 }
@@ -985,9 +851,7 @@
 /* Class : Clock */
 
 static PyObject *
-get_clock(g, args)
-	genericobject *g;
-	PyObject *args;
+get_clock(genericobject *g, PyObject *args)
 {
 	int i0, i1, i2;
 
@@ -1007,49 +871,37 @@
 /* CLass : Counters */
 
 static PyObject *
-get_counter_value(g, args)
-	genericobject *g;
-	PyObject *args;
+get_counter_value(genericobject *g, PyObject *args)
 {
 	return call_forms_Rf (fl_get_counter_value, g-> ob_generic, args);
 }
 
 static PyObject *
-set_counter_value (g, args)
-	genericobject *g;
-	PyObject *args;
+set_counter_value (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_counter_value, g-> ob_generic, args);
 }
 
 static PyObject *
-set_counter_precision (g, args)
-	genericobject *g;
-	PyObject *args;
+set_counter_precision (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_set_counter_precision, g-> ob_generic, args);
 }
 
 static PyObject *
-set_counter_bounds (g, args)
-	genericobject *g;
-	PyObject *args;
+set_counter_bounds (genericobject *g, PyObject *args)
 {
 	return call_forms_INfINf (fl_set_counter_bounds, g-> ob_generic, args);
 }
 
 static PyObject *
-set_counter_step (g, args)
-	genericobject *g;
-	PyObject *args;
+set_counter_step (genericobject *g, PyObject *args)
 {
 	return call_forms_INfINf (fl_set_counter_step, g-> ob_generic, args);
 }
 
 static PyObject *
-set_counter_return (g, args)
-	genericobject *g;
-	PyObject *args;
+set_counter_return (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_set_counter_return, g-> ob_generic, args);
 }
@@ -1068,41 +920,31 @@
 /* Class: Dials */
 
 static PyObject *
-get_dial_value(g, args)
-	genericobject *g;
-	PyObject *args;
+get_dial_value(genericobject *g, PyObject *args)
 {
 	return call_forms_Rf (fl_get_dial_value, g-> ob_generic, args);
 }
 
 static PyObject *
-set_dial_value (g, args)
-	genericobject *g;
-	PyObject *args;
+set_dial_value (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_dial_value, g-> ob_generic, args);
 }
 
 static PyObject *
-set_dial_bounds (g, args)
-	genericobject *g;
-	PyObject *args;
+set_dial_bounds (genericobject *g, PyObject *args)
 {
 	return call_forms_INfINf (fl_set_dial_bounds, g-> ob_generic, args);
 }
 
 static PyObject *
-get_dial_bounds (g, args)
-	genericobject *g;
-	PyObject *args;
+get_dial_bounds (genericobject *g, PyObject *args)
 {
 	return call_forms_OUTfOUTf (fl_get_dial_bounds, g-> ob_generic, args);
 }
 
 static PyObject *
-set_dial_step (g, args)
-	genericobject *g;
-	PyObject *args;
+set_dial_step (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_dial_step, g-> ob_generic, args);
 }
@@ -1119,33 +961,25 @@
 /* Class : Input */
 
 static PyObject *
-set_input (g, args)
-	genericobject *g;
-	PyObject *args;
+set_input (genericobject *g, PyObject *args)
 {
 	return call_forms_INstr (fl_set_input, g-> ob_generic, args);
 }
 
 static PyObject *
-get_input (g, args)
-	genericobject *g;
-	PyObject *args;
+get_input (genericobject *g, PyObject *args)
 {
 	return call_forms_Rstr (fl_get_input, g-> ob_generic, args);
 }
 
 static PyObject *
-set_input_color (g, args)
-	genericobject *g;
-	PyObject *args;
+set_input_color (genericobject *g, PyObject *args)
 {
 	return call_forms_INfINf (fl_set_input_color, g-> ob_generic, args);
 }
 
 static PyObject *
-set_input_return (g, args)
-	genericobject *g;
-	PyObject *args;
+set_input_return (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_set_input_return, g-> ob_generic, args);
 }
@@ -1162,17 +996,13 @@
 /* Class : Menu */
 
 static PyObject *
-set_menu (g, args)
-	genericobject *g;
-	PyObject *args;
+set_menu (genericobject *g, PyObject *args)
 {
 	return call_forms_INstr (fl_set_menu, g-> ob_generic, args);
 }
 
 static PyObject *
-get_menu (g, args)
-	genericobject *g;
-	PyObject *args;
+get_menu (genericobject *g, PyObject *args)
 {
 	/* XXX strictly speaking this is wrong since fl_get_menu
 	   XXX returns long, not int */
@@ -1180,17 +1010,13 @@
 }
 
 static PyObject *
-get_menu_text (g, args)
-	genericobject *g;
-	PyObject *args;
+get_menu_text (genericobject *g, PyObject *args)
 {
 	return call_forms_Rstr (fl_get_menu_text, g-> ob_generic, args);
 }
 
 static PyObject *
-addto_menu (g, args)
-	genericobject *g;
-	PyObject *args;
+addto_menu (genericobject *g, PyObject *args)
 {
 	return call_forms_INstr (fl_addto_menu, g-> ob_generic, args);
 }
@@ -1207,65 +1033,49 @@
 /* Class: Sliders */
 
 static PyObject *
-get_slider_value(g, args)
-	genericobject *g;
-	PyObject *args;
+get_slider_value(genericobject *g, PyObject *args)
 {
 	return call_forms_Rf (fl_get_slider_value, g-> ob_generic, args);
 }
 
 static PyObject *
-set_slider_value (g, args)
-	genericobject *g;
-	PyObject *args;
+set_slider_value (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_slider_value, g-> ob_generic, args);
 }
 
 static PyObject *
-set_slider_bounds (g, args)
-	genericobject *g;
-	PyObject *args;
+set_slider_bounds (genericobject *g, PyObject *args)
 {
 	return call_forms_INfINf (fl_set_slider_bounds, g-> ob_generic, args);
 }
 
 static PyObject *
-get_slider_bounds (g, args)
-	genericobject *g;
-	PyObject *args;
+get_slider_bounds (genericobject *g, PyObject *args)
 {
 	return call_forms_OUTfOUTf(fl_get_slider_bounds, g-> ob_generic, args);
 }
 
 static PyObject *
-set_slider_return (g, args)
-	genericobject *g;
-	PyObject *args;
+set_slider_return (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_slider_return, g-> ob_generic, args);
 }
 
 static PyObject *
-set_slider_size (g, args)
-	genericobject *g;
-	PyObject *args;
+set_slider_size (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_slider_size, g-> ob_generic, args);
 }
 
 static PyObject *
-set_slider_precision (g, args)
-	genericobject *g;
-	PyObject *args;
+set_slider_precision (genericobject *g, PyObject *args)
 {
 	return call_forms_INi (fl_set_slider_precision, g-> ob_generic, args);
 }
 
 static PyObject *
-set_slider_step (g, args)
-	genericobject *g;
-	PyObject *args;
+set_slider_step (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_slider_step, g-> ob_generic, args);
 }
@@ -1284,68 +1094,52 @@
 };
 
 static PyObject *
-set_positioner_xvalue (g, args)
-	genericobject *g;
-	PyObject *args;
+set_positioner_xvalue (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_positioner_xvalue, g-> ob_generic, args);
 }
 
 static PyObject *
-set_positioner_xbounds (g, args)
-	genericobject *g;
-	PyObject *args;
+set_positioner_xbounds (genericobject *g, PyObject *args)
 {
 	return call_forms_INfINf (fl_set_positioner_xbounds,
 				  g-> ob_generic, args);
 }
 
 static PyObject *
-set_positioner_yvalue (g, args)
-	genericobject *g;
-	PyObject *args;
+set_positioner_yvalue (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_positioner_yvalue, g-> ob_generic, args);
 }
 
 static PyObject *
-set_positioner_ybounds (g, args)
-	genericobject *g;
-	PyObject *args;
+set_positioner_ybounds (genericobject *g, PyObject *args)
 {
 	return call_forms_INfINf (fl_set_positioner_ybounds,
 				  g-> ob_generic, args);
 }
 
 static PyObject *
-get_positioner_xvalue (g, args)
-	genericobject *g;
-	PyObject *args;
+get_positioner_xvalue (genericobject *g, PyObject *args)
 {
 	return call_forms_Rf (fl_get_positioner_xvalue, g-> ob_generic, args);
 }
 
 static PyObject *
-get_positioner_xbounds (g, args)
-	genericobject *g;
-	PyObject *args;
+get_positioner_xbounds (genericobject *g, PyObject *args)
 {
 	return call_forms_OUTfOUTf (fl_get_positioner_xbounds,
 				    g-> ob_generic, args);
 }
 
 static PyObject *
-get_positioner_yvalue (g, args)
-	genericobject *g;
-	PyObject *args;
+get_positioner_yvalue (genericobject *g, PyObject *args)
 {
 	return call_forms_Rf (fl_get_positioner_yvalue, g-> ob_generic, args);
 }
 
 static PyObject *
-get_positioner_ybounds (g, args)
-	genericobject *g;
-	PyObject *args;
+get_positioner_ybounds (genericobject *g, PyObject *args)
 {
 	return call_forms_OUTfOUTf (fl_get_positioner_ybounds,
 				    g-> ob_generic, args);
@@ -1366,17 +1160,13 @@
 /* Class timer */
 
 static PyObject *
-set_timer (g, args)
-	genericobject *g;
-	PyObject *args;
+set_timer (genericobject *g, PyObject *args)
 {
 	return call_forms_INf (fl_set_timer, g-> ob_generic, args);
 }
 
 static PyObject *
-get_timer (g, args)
-	genericobject *g;
-	PyObject *args;
+get_timer (genericobject *g, PyObject *args)
 {
 	return call_forms_Rf (fl_get_timer, g-> ob_generic, args);
 }
@@ -1399,9 +1189,7 @@
 #define is_formobject(v) ((v)->ob_type == &Formtype)
 
 static PyObject *
-form_show_form(f, args)
-	formobject *f;
-	PyObject *args;
+form_show_form(formobject *f, PyObject *args)
 {
 	int place, border;
 	char *name;
@@ -1413,10 +1201,7 @@
 }
 
 static PyObject *
-form_call(func, f, args)
-	FL_FORM *f;
-	PyObject *args;
-	void (*func)(FL_FORM *);
+form_call(void (*func)(FL_FORM *), FL_FORM *f, PyObject *args)
 {
 	if (!PyArg_NoArgs(args)) return NULL;
 
@@ -1427,10 +1212,7 @@
 }
 
 static PyObject *
-form_call_INiINi(func, f, args)
-	FL_FORM *f;
-	PyObject *args;
-	void (*func)(FL_FORM *, int, int);
+form_call_INiINi(void (*func)(FL_FORM *, int, int), FL_FORM *f, PyObject *args)
 {
 	int a, b;
 
@@ -1443,10 +1225,7 @@
 }
 
 static PyObject *
-form_call_INfINf(func, f, args)
-	FL_FORM *f;
-	PyObject *args;
-	void (*func)(FL_FORM *, float, float);
+form_call_INfINf(void (*func)(FL_FORM *, float, float), FL_FORM *f, PyObject *args)
 {
 	float a, b;
 
@@ -1459,51 +1238,37 @@
 }
 
 static PyObject *
-form_hide_form(f, args)
-	formobject *f;
-	PyObject *args;
+form_hide_form(formobject *f, PyObject *args)
 {
 	return form_call(fl_hide_form, f-> ob_form, args);
 }
 
 static PyObject *
-form_redraw_form(f, args)
-	formobject *f;
-	PyObject *args;
+form_redraw_form(formobject *f, PyObject *args)
 {
 	return form_call(fl_redraw_form, f-> ob_form, args);
 }
 
 static PyObject *
-form_set_form_position(f, args)
-	formobject *f;
-	PyObject *args;
+form_set_form_position(formobject *f, PyObject *args)
 {
 	return form_call_INiINi(fl_set_form_position, f-> ob_form, args);
 }
 
 static PyObject *
-form_set_form_size(f, args)
-	formobject *f;
-	PyObject *args;
+form_set_form_size(formobject *f, PyObject *args)
 {
 	return form_call_INiINi(fl_set_form_size, f-> ob_form, args);
 }
 
 static PyObject *
-form_scale_form(f, args)
-	formobject *f;
-	PyObject *args;
+form_scale_form(formobject *f, PyObject *args)
 {
 	return form_call_INfINf(fl_scale_form, f-> ob_form, args);
 }
 
 static PyObject *
-generic_add_object(f, args, func, internal_methods)
-	formobject *f;
-	PyObject *args;
-	FL_OBJECT *(*func)(int, float, float, float, float, char*);
-	PyMethodDef *internal_methods;
+generic_add_object(formobject *f, PyObject *args, FL_OBJECT *(*func)(int, float, float, float, float, char*), PyMethodDef *internal_methods)
 {
 	int type;
 	float x, y, w, h;
@@ -1528,172 +1293,130 @@
 }
 
 static PyObject *
-form_add_button(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_button(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_button, button_methods);
 }
 
 static PyObject *
-form_add_lightbutton(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_lightbutton(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_lightbutton, button_methods);
 }
 
 static PyObject *
-form_add_roundbutton(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_roundbutton(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_roundbutton, button_methods);
 }
 
 static PyObject *
-form_add_menu (f, args)
-	formobject *f;
-	PyObject *args;
+form_add_menu (formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_menu, menu_methods);
 }
 
 static PyObject *
-form_add_slider(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_slider(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_slider, slider_methods);
 }
 
 static PyObject *
-form_add_valslider(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_valslider(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_valslider, slider_methods);
 }
 
 static PyObject *
-form_add_dial(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_dial(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_dial, dial_methods);
 }
 
 static PyObject *
-form_add_counter(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_counter(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_counter, counter_methods);
 }
 
 static PyObject *
-form_add_clock(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_clock(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_clock, clock_methods);
 }
 
 static PyObject *
-form_add_box(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_box(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_box,
 				  (PyMethodDef *)NULL);
 }
 
 static PyObject *
-form_add_choice(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_choice(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_choice, choice_methods);
 }
 
 static PyObject *
-form_add_browser(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_browser(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_browser, browser_methods);
 }
 
 static PyObject *
-form_add_positioner(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_positioner(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_positioner,
 				  positioner_methods);
 }
 
 static PyObject *
-form_add_input(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_input(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_input, input_methods);
 }
 
 static PyObject *
-form_add_text(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_text(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_text,
 				  (PyMethodDef *)NULL);
 }
 
 static PyObject *
-form_add_timer(f, args)
-	formobject *f;
-	PyObject *args;
+form_add_timer(formobject *f, PyObject *args)
 {
 	return generic_add_object(f, args, fl_add_timer, timer_methods);
 }
 
 static PyObject *
-form_freeze_form(f, args)
-	formobject *f;
-	PyObject *args;
+form_freeze_form(formobject *f, PyObject *args)
 {
 	return form_call(fl_freeze_form, f-> ob_form, args);
 }
 
 static PyObject *
-form_unfreeze_form(f, args)
-	formobject *f;
-	PyObject *args;
+form_unfreeze_form(formobject *f, PyObject *args)
 {
 	return form_call(fl_unfreeze_form, f-> ob_form, args);
 }
 
 static PyObject *
-form_activate_form(f, args)
-	formobject *f;
-	PyObject *args;
+form_activate_form(formobject *f, PyObject *args)
 {
 	return form_call(fl_activate_form, f-> ob_form, args);
 }
 
 static PyObject *
-form_deactivate_form(f, args)
-	formobject *f;
-	PyObject *args;
+form_deactivate_form(formobject *f, PyObject *args)
 {
 	return form_call(fl_deactivate_form, f-> ob_form, args);
 }
 
 static PyObject *
-form_bgn_group(f, args)
-	formobject *f;
-	PyObject *args;
+form_bgn_group(formobject *f, PyObject *args)
 {
 	FL_OBJECT *obj;
 
@@ -1710,9 +1433,7 @@
 }
 
 static PyObject *
-form_end_group(f, args)
-	formobject *f;
-	PyObject *args;
+form_end_group(formobject *f, PyObject *args)
 {
 	fl_addto_form(f-> ob_form);
 	fl_end_group();
@@ -1722,10 +1443,7 @@
 }
 
 static PyObject *
-forms_find_first_or_last(func, f, args)
-	FL_OBJECT *(*func)(FL_FORM *, int, float, float);
-	formobject *f;
-	PyObject *args;
+forms_find_first_or_last(FL_OBJECT *(*func)(FL_FORM *, int, float, float), formobject *f, PyObject *args)
 {
 	int type;
 	float mx, my;
@@ -1753,25 +1471,19 @@
 }
 
 static PyObject *
-form_find_first(f, args)
-	formobject *f;
-	PyObject *args;
+form_find_first(formobject *f, PyObject *args)
 {
 	return forms_find_first_or_last(fl_find_first, f, args);
 }
 
 static PyObject *
-form_find_last(f, args)
-	formobject *f;
-	PyObject *args;
+form_find_last(formobject *f, PyObject *args)
 {
 	return forms_find_first_or_last(fl_find_last, f, args);
 }
 
 static PyObject *
-form_set_object_focus(f, args)
-	formobject *f;
-	PyObject *args;
+form_set_object_focus(formobject *f, PyObject *args)
 {
 	genericobject *g;
 	if (args == NULL || !is_genericobject(args)) {
@@ -1824,8 +1536,7 @@
 };
 
 static void
-form_dealloc(f)
-	formobject *f;
+form_dealloc(formobject *f)
 {
 	releaseobjects(f->ob_form);
 	if (f->ob_form->visible)
@@ -1852,9 +1563,7 @@
 #undef OFF
 
 static PyObject *
-form_getattr(f, name)
-	formobject *f;
-	char *name;
+form_getattr(formobject *f, char *name)
 {
 	PyObject *meth;
 
@@ -1866,10 +1575,7 @@
 }
 
 static int
-form_setattr(f, name, v)
-	formobject *f;
-	char *name;
-	PyObject *v;
+form_setattr(formobject *f, char *name, PyObject *v)
 {
 	if (v == NULL) {
 		PyErr_SetString(PyExc_TypeError,
@@ -1881,8 +1587,7 @@
 }
 
 static PyObject *
-form_repr(f)
-	formobject *f;
+form_repr(formobject *f)
 {
 	char buf[100];
 	sprintf(buf, "<FORMS_form at %p, window=%ld>",
@@ -1906,8 +1611,7 @@
 };
 
 static PyObject *
-newformobject(form)
-	FL_FORM *form;
+newformobject(FL_FORM *form)
 {
 	formobject *f;
 	f = PyObject_New(formobject, &Formtype);
@@ -1921,9 +1625,7 @@
 /* The "fl" module */
 
 static PyObject *
-forms_make_form(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_make_form(PyObject *dummy, PyObject *args)
 {
 	int type;
 	float w, h;
@@ -1941,9 +1643,7 @@
 }
 
 static PyObject *
-forms_activate_all_forms(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_activate_all_forms(PyObject *f, PyObject *args)
 {
 	fl_activate_all_forms();
 	Py_INCREF(Py_None);
@@ -1951,9 +1651,7 @@
 }
 
 static PyObject *
-forms_deactivate_all_forms(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_deactivate_all_forms(PyObject *f, PyObject *args)
 {
 	fl_deactivate_all_forms();
 	Py_INCREF(Py_None);
@@ -1963,9 +1661,7 @@
 static PyObject *my_event_callback = NULL;
 
 static PyObject *
-forms_set_event_call_back(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_set_event_call_back(PyObject *dummy, PyObject *args)
 {
 	if (args == Py_None)
 		args = NULL;
@@ -1976,10 +1672,7 @@
 }
 
 static PyObject *
-forms_do_or_check_forms(dummy, args, func)
-	PyObject *dummy;
-	PyObject *args;
-	FL_OBJECT *(*func)();
+forms_do_or_check_forms(PyObject *dummy, PyObject *args, FL_OBJECT *(*func)())
 {
 	FL_OBJECT *generic;
 	genericobject *g;
@@ -2033,42 +1726,32 @@
 }
 
 static PyObject *
-forms_do_forms(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_do_forms(PyObject *dummy, PyObject *args)
 {
 	return forms_do_or_check_forms(dummy, args, fl_do_forms);
 }
 
 static PyObject *
-forms_check_forms(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_check_forms(PyObject *dummy, PyObject *args)
 {
 	return forms_do_or_check_forms(dummy, args, fl_check_forms);
 }
 
 static PyObject *
-forms_do_only_forms(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_do_only_forms(PyObject *dummy, PyObject *args)
 {
 	return forms_do_or_check_forms(dummy, args, fl_do_only_forms);
 }
 
 static PyObject *
-forms_check_only_forms(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_check_only_forms(PyObject *dummy, PyObject *args)
 {
 	return forms_do_or_check_forms(dummy, args, fl_check_only_forms);
 }
 
 #ifdef UNUSED
 static PyObject *
-fl_call(func, args)
-	PyObject *args;
-	void (*func)();
+fl_call(void (*func)(), PyObject *args)
 {
 	if (!PyArg_NoArgs(args))
 		return NULL;
@@ -2079,9 +1762,7 @@
 #endif
 
 static PyObject *
-forms_set_graphics_mode(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_set_graphics_mode(PyObject *dummy, PyObject *args)
 {
 	int rgbmode, doublebuf;
 
@@ -2093,9 +1774,7 @@
 }
 
 static PyObject *
-forms_get_rgbmode(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_get_rgbmode(PyObject *dummy, PyObject *args)
 {
 	extern int fl_rgbmode;
 
@@ -2107,9 +1786,7 @@
 }
 
 static PyObject *
-forms_show_errors(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_show_errors(PyObject *dummy, PyObject *args)
 {
 	int show;
 	if (!PyArg_Parse(args, "i", &show))
@@ -2120,9 +1797,7 @@
 }
 
 static PyObject *
-forms_set_font_name(dummy, args)
-	PyObject *dummy;
-	PyObject *args;
+forms_set_font_name(PyObject *dummy, PyObject *args)
 {
 	int numb;
 	char *name;
@@ -2135,9 +1810,7 @@
 
 
 static PyObject *
-forms_qdevice(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_qdevice(PyObject *self, PyObject *args)
 {
 	short arg1;
 	if (!PyArg_Parse(args, "h", &arg1))
@@ -2148,9 +1821,7 @@
 }
 
 static PyObject *
-forms_unqdevice(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_unqdevice(PyObject *self, PyObject *args)
 {
 	short arg1;
 	if (!PyArg_Parse(args, "h", &arg1))
@@ -2161,9 +1832,7 @@
 }
 
 static PyObject *
-forms_isqueued(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_isqueued(PyObject *self, PyObject *args)
 {
 	long retval;
 	short arg1;
@@ -2175,9 +1844,7 @@
 }
 
 static PyObject *
-forms_qtest(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_qtest(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = fl_qtest();
@@ -2186,9 +1853,7 @@
 
 
 static PyObject *
-forms_qread(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_qread(PyObject *self, PyObject *args)
 {
 	int dev;
 	short val;
@@ -2199,9 +1864,7 @@
 }
 
 static PyObject *
-forms_qreset(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_qreset(PyObject *self, PyObject *args)
 {
 	if (!PyArg_NoArgs(args)) return NULL;
 
@@ -2211,9 +1874,7 @@
 }
 
 static PyObject *
-forms_qenter(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_qenter(PyObject *self, PyObject *args)
 {
 	short arg1, arg2;
 	if (!PyArg_Parse(args, "(hh)", &arg1, &arg2))
@@ -2224,9 +1885,7 @@
 }
 
 static PyObject *
-forms_color(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_color(PyObject *self, PyObject *args)
 {
 	int arg;
 
@@ -2239,9 +1898,7 @@
 }
 
 static PyObject *
-forms_mapcolor(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_mapcolor(PyObject *self, PyObject *args)
 {
 	int arg0, arg1, arg2, arg3;
 
@@ -2255,9 +1912,7 @@
 }
 
 static PyObject *
-forms_getmcolor(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_getmcolor(PyObject *self, PyObject *args)
 {
 	int arg;
 	short r, g, b;
@@ -2270,9 +1925,7 @@
 }
 
 static PyObject *
-forms_get_mouse(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_get_mouse(PyObject *self, PyObject *args)
 {
 	float x, y;
 
@@ -2284,9 +1937,7 @@
 }
 
 static PyObject *
-forms_tie(self, args)
-	PyObject *self;
-	PyObject *args;
+forms_tie(PyObject *self, PyObject *args)
 {
 	short arg1, arg2, arg3;
 	if (!PyArg_Parse(args, "(hhh)", &arg1, &arg2, &arg3))
@@ -2297,9 +1948,7 @@
 }
 
 static PyObject *
-forms_show_message(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_show_message(PyObject *f, PyObject *args)
 {
 	char *a, *b, *c;
 
@@ -2314,9 +1963,7 @@
 }
 
 static PyObject *
-forms_show_choice(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_show_choice(PyObject *f, PyObject *args)
 {
 	char *m1, *m2, *m3, *b1, *b2, *b3;
 	int nb;
@@ -2357,9 +2004,7 @@
 }
 
 static PyObject *
-forms_show_question(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_show_question(PyObject *f, PyObject *args)
 {
 	int ret;
 	char *a, *b, *c;
@@ -2374,9 +2019,7 @@
 }
 
 static PyObject *
-forms_show_input(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_show_input(PyObject *f, PyObject *args)
 {
 	char *str;
 	char *a, *b;
@@ -2395,9 +2038,7 @@
 }
 
 static PyObject *
-forms_file_selector(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_file_selector(PyObject *f, PyObject *args)
 {
 	char *str;
 	char *a, *b, *c, *d;
@@ -2417,9 +2058,7 @@
 
 
 static PyObject *
-forms_file_selector_func(args, func)
-	PyObject *args;
-	char *(*func)();
+forms_file_selector_func(PyObject *args, char *(*func)())
 {
 	char *str;
 
@@ -2433,25 +2072,19 @@
 }
 
 static PyObject *
-forms_get_directory(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_get_directory(PyObject *f, PyObject *args)
 {
 	return forms_file_selector_func(args, fl_get_directory);
 }
 
 static PyObject *
-forms_get_pattern(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_get_pattern(PyObject *f, PyObject *args)
 {
 	return forms_file_selector_func(args, fl_get_pattern);
 }
 
 static PyObject *
-forms_get_filename(f, args)
-	PyObject *f;
-	PyObject *args;
+forms_get_filename(PyObject *f, PyObject *args)
 {
 	return forms_file_selector_func(args, fl_get_filename);
 }
diff --git a/Modules/fmmodule.c b/Modules/fmmodule.c
index 65dffec..db3fd03 100644
--- a/Modules/fmmodule.c
+++ b/Modules/fmmodule.c
@@ -29,8 +29,7 @@
 #define is_fhobject(v)		((v)->ob_type == &Fhtype)
 
 static PyObject *
-newfhobject(fh)
-	fmfonthandle fh;
+newfhobject(fmfonthandle fh)
 {
 	fhobject *fhp;
 	if (fh == NULL) {
@@ -48,9 +47,7 @@
 /* Font Handle methods */
 
 static PyObject *
-fh_scalefont(self, args)
-	fhobject *self;
-PyObject *args;
+fh_scalefont(fhobject *self, PyObject *args)
 {
 	double size;
 	if (!PyArg_Parse(args, "d", &size))
@@ -61,9 +58,7 @@
 /* XXX fmmakefont */
 
 static PyObject *
-fh_setfont(self, args)
-	fhobject *self;
-PyObject *args;
+fh_setfont(fhobject *self, PyObject *args)
 {
 	if (!PyArg_NoArgs(args))
 		return NULL;
@@ -73,9 +68,7 @@
 }
 
 static PyObject *
-fh_getfontname(self, args)
-	fhobject *self;
-PyObject *args;
+fh_getfontname(fhobject *self, PyObject *args)
 {
 	char fontname[256];
 	int len;
@@ -90,9 +83,7 @@
 }
 
 static PyObject *
-fh_getcomment(self, args)
-	fhobject *self;
-PyObject *args;
+fh_getcomment(fhobject *self, PyObject *args)
 {
 	char comment[256];
 	int len;
@@ -107,9 +98,7 @@
 }
 
 static PyObject *
-fh_getfontinfo(self, args)
-	fhobject *self;
-PyObject *args;
+fh_getfontinfo(fhobject *self, PyObject *args)
 {
 	fmfontinfo info;
 	if (!PyArg_NoArgs(args))
@@ -131,17 +120,13 @@
 
 #if 0
 static PyObject *
-fh_getwholemetrics(self, args)
-	fhobject *self;
-PyObject *args;
+fh_getwholemetrics(fhobject *self, PyObject *args)
 {
 }
 #endif
 
 static PyObject *
-fh_getstrwidth(self, args)
-	fhobject *self;
-PyObject *args;
+fh_getstrwidth(fhobject *self, PyObject *args)
 {
 	char *str;
 	if (!PyArg_Parse(args, "s", &str))
@@ -163,16 +148,13 @@
 };
 
 static PyObject *
-fh_getattr(fhp, name)
-	fhobject *fhp;
-char *name;
+fh_getattr(fhobject *fhp, char *name)
 {
 	return Py_FindMethod(fh_methods, (PyObject *)fhp, name);
 }
 
 static void
-fh_dealloc(fhp)
-	fhobject *fhp;
+fh_dealloc(fhobject *fhp)
 {
 	fmfreefont(fhp->fh_fh);
 	PyObject_Del(fhp);
@@ -197,8 +179,7 @@
 /* Font Manager functions */
 
 static PyObject *
-fm_init(self, args)
-	PyObject *self, *args;
+fm_init(PyObject *self, *args)
 {
 	if (!PyArg_NoArgs(args))
 		return NULL;
@@ -208,8 +189,7 @@
 }
 
 static PyObject *
-fm_findfont(self, args)
-	PyObject *self, *args;
+fm_findfont(PyObject *self, *args)
 {
 	char *str;
 	if (!PyArg_Parse(args, "s", &str))
@@ -218,8 +198,7 @@
 }
 
 static PyObject *
-fm_prstr(self, args)
-	PyObject *self, *args;
+fm_prstr(PyObject *self, *args)
 {
 	char *str;
 	if (!PyArg_Parse(args, "s", &str))
@@ -234,8 +213,7 @@
 static PyObject *fontlist;
 
 static void
-clientproc(fontname)
-	char *fontname;
+clientproc(char *fontname)
 {
 	int err;
 	PyObject *v;
@@ -255,8 +233,7 @@
 }
 
 static PyObject *
-fm_enumerate(self, args)
-	PyObject *self, *args;
+fm_enumerate(PyObject *self, PyObject *args)
 {
 	PyObject *res;
 	if (!PyArg_NoArgs(args))
@@ -271,8 +248,7 @@
 }
 
 static PyObject *
-fm_setpath(self, args)
-	PyObject *self, *args;
+fm_setpath(PyObject *self, PyObject *args)
 {
 	char *str;
 	if (!PyArg_Parse(args, "s", &str))
@@ -283,8 +259,7 @@
 }
 
 static PyObject *
-fm_fontpath(self, args)
-	PyObject *self, *args;
+fm_fontpath(PyObject *self, *args)
 {
 	if (!PyArg_NoArgs(args))
 		return NULL;
diff --git a/Modules/glmodule.c b/Modules/glmodule.c
index bed80dc..baeb294 100644
--- a/Modules/glmodule.c
+++ b/Modules/glmodule.c
@@ -69,9 +69,7 @@
 
 
 static PyObject *
-gl_qread(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_qread(PyObject *self, PyObject *args)
 {
 	long retval;
 	short arg1 ;
@@ -100,9 +98,7 @@
 
 
 static PyObject *
-gl_varray(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_varray(PyObject *self, PyObject *args)
 {
 	PyObject *v, *w=NULL;
 	int i, n, width;
@@ -181,18 +177,14 @@
 
 
 static PyObject *
-gl_nvarray(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_nvarray(PyObject *self, PyObject *args)
 {
 	return gen_nvarray(args, 0);
 }
 
 
 static PyObject *
-gl_vnarray(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_vnarray(PyObject *self, PyObject *args)
 {
 	return gen_nvarray(args, 1);
 }
@@ -201,9 +193,7 @@
    argument order, 0: normal first, 1: vector first. */
 
 static PyObject *
-gen_nvarray(args, inorm)
-	PyObject *args;
-	int inorm;
+gen_nvarray(PyObject *args, int inorm)
 {
 	PyObject *v, *w, *wnorm, *wvec;
 	int i, n;
@@ -252,9 +242,7 @@
 
 
 static PyObject *
-gl_nurbssurface(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_nurbssurface(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	double * arg2 ;
@@ -340,9 +328,7 @@
 
 
 static PyObject *
-gl_nurbscurve(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_nurbscurve(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	double * arg2 ;
@@ -402,9 +388,7 @@
 
 
 static PyObject *
-gl_pwlcurve(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pwlcurve(PyObject *self, PyObject *args)
 {
 	PyObject *v;
 	long type;
@@ -448,9 +432,7 @@
 static long pickbuffersize;
 
 static PyObject *
-pick_select(args, func)
-	PyObject *args;
-	void (*func)();
+pick_select(PyObject *args, void (*func)())
 {
 	if (!PyArg_GetLong(args, 1, 0, &pickbuffersize))
 		return NULL;
@@ -468,9 +450,7 @@
 }
 
 static PyObject *
-endpick_select(args, func)
-	PyObject *args;
-	long (*func)();
+endpick_select(PyObject *args, long (*func)())
 {
 	PyObject *v, *w;
 	int i, nhits, n;
@@ -511,19 +491,23 @@
 extern void pick(), gselect();
 extern long endpick(), endselect();
 
-static PyObject *gl_pick(self, args) PyObject *self, *args; {
+static PyObject *gl_pick(PyObject *self, PyObject *args)
+{
 	return pick_select(args, pick);
 }
 
-static PyObject *gl_endpick(self, args) PyObject *self, *args; {
+static PyObject *gl_endpick(PyObject *self, PyObject *args)
+{
 	return endpick_select(args, endpick);
 }
 
-static PyObject *gl_gselect(self, args) PyObject *self, *args; {
+static PyObject *gl_gselect(PyObject *self, PyObject *args)
+{
 	return pick_select(args, gselect);
 }
 
-static PyObject *gl_endselect(self, args) PyObject *self, *args; {
+static PyObject *gl_endselect(PyObject *self, PyObject *args)
+{
 	return endpick_select(args, endselect);
 }
 
@@ -534,9 +518,7 @@
 
 
 static PyObject *
-gl_getmatrix(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getmatrix(PyObject *self, PyObject *args)
 {
 	Matrix arg1;
 	PyObject *v, *w;
@@ -563,9 +545,7 @@
 
 
 static PyObject *
-gl_altgetmatrix(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_altgetmatrix(PyObject *self, PyObject *args)
 {
 	Matrix arg1;
 	PyObject *v, *w;
@@ -598,9 +578,7 @@
 
 
 static PyObject *
-gl_lrectwrite(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lrectwrite(PyObject *self, PyObject *args)
 {
 	short x1 ;
 	short y1 ;
@@ -639,9 +617,7 @@
 
 
 static PyObject *
-gl_lrectread(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lrectread(PyObject *self, PyObject *args)
 {
 	short x1 ;
 	short y1 ;
@@ -667,9 +643,7 @@
 
 
 static PyObject *
-gl_readdisplay(self, args)
-	PyObject *self;
-        PyObject *args;
+gl_readdisplay(PyObject *self, PyObject *args)
 {
         short x1, y1, x2, y2;
 	unsigned long *parray, hints;
@@ -711,9 +685,7 @@
 
 
 static PyObject *
-gl_packrect(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_packrect(PyObject *self, PyObject *args)
 {
 	long width, height, packfactor;
 	char *s;
@@ -766,9 +738,7 @@
 static int unpacktab_inited = 0;
 
 static PyObject *
-gl_unpackrect(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_unpackrect(PyObject *self, PyObject *args)
 {
 	long width, height, packfactor;
 	char *s;
@@ -836,9 +806,7 @@
 }
 
 static PyObject *
-gl_gversion(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gversion(PyObject *self, PyObject *args)
 {
 	char buf[20];
 	gversion(buf);
@@ -848,9 +816,7 @@
 
 /* void clear - Manual because of clash with termcap */
 static PyObject *
-gl_clear(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_clear(PyObject *self, PyObject *args)
 {
 	__GLclear( );
 	Py_INCREF(Py_None);
@@ -863,9 +829,7 @@
 /* long getshade */
 
 static PyObject *
-gl_getshade(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getshade(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getshade( );
@@ -875,9 +839,7 @@
 /* void devport short s long s */
 
 static PyObject *
-gl_devport(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_devport(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	long arg2 ;
@@ -893,9 +855,7 @@
 /* void rdr2i long s long s */
 
 static PyObject *
-gl_rdr2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rdr2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -911,9 +871,7 @@
 /* void rectfs short s short s short s short s */
 
 static PyObject *
-gl_rectfs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rectfs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -935,9 +893,7 @@
 /* void rects short s short s short s short s */
 
 static PyObject *
-gl_rects(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rects(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -959,9 +915,7 @@
 /* void rmv2i long s long s */
 
 static PyObject *
-gl_rmv2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rmv2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -977,9 +931,7 @@
 /* void noport */
 
 static PyObject *
-gl_noport(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_noport(PyObject *self, PyObject *args)
 {
 	noport( );
 	Py_INCREF(Py_None);
@@ -989,9 +941,7 @@
 /* void popviewport */
 
 static PyObject *
-gl_popviewport(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_popviewport(PyObject *self, PyObject *args)
 {
 	popviewport( );
 	Py_INCREF(Py_None);
@@ -1001,9 +951,7 @@
 /* void clearhitcode */
 
 static PyObject *
-gl_clearhitcode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_clearhitcode(PyObject *self, PyObject *args)
 {
 	clearhitcode( );
 	Py_INCREF(Py_None);
@@ -1013,9 +961,7 @@
 /* void closeobj */
 
 static PyObject *
-gl_closeobj(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_closeobj(PyObject *self, PyObject *args)
 {
 	closeobj( );
 	Py_INCREF(Py_None);
@@ -1025,9 +971,7 @@
 /* void cursoff */
 
 static PyObject *
-gl_cursoff(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cursoff(PyObject *self, PyObject *args)
 {
 	cursoff( );
 	Py_INCREF(Py_None);
@@ -1037,9 +981,7 @@
 /* void curson */
 
 static PyObject *
-gl_curson(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_curson(PyObject *self, PyObject *args)
 {
 	curson( );
 	Py_INCREF(Py_None);
@@ -1049,9 +991,7 @@
 /* void doublebuffer */
 
 static PyObject *
-gl_doublebuffer(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_doublebuffer(PyObject *self, PyObject *args)
 {
 	doublebuffer( );
 	Py_INCREF(Py_None);
@@ -1061,9 +1001,7 @@
 /* void finish */
 
 static PyObject *
-gl_finish(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_finish(PyObject *self, PyObject *args)
 {
 	finish( );
 	Py_INCREF(Py_None);
@@ -1073,9 +1011,7 @@
 /* void gconfig */
 
 static PyObject *
-gl_gconfig(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gconfig(PyObject *self, PyObject *args)
 {
 	gconfig( );
 	Py_INCREF(Py_None);
@@ -1085,9 +1021,7 @@
 /* void ginit */
 
 static PyObject *
-gl_ginit(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_ginit(PyObject *self, PyObject *args)
 {
 	ginit( );
 	Py_INCREF(Py_None);
@@ -1097,9 +1031,7 @@
 /* void greset */
 
 static PyObject *
-gl_greset(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_greset(PyObject *self, PyObject *args)
 {
 	greset( );
 	Py_INCREF(Py_None);
@@ -1109,9 +1041,7 @@
 /* void multimap */
 
 static PyObject *
-gl_multimap(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_multimap(PyObject *self, PyObject *args)
 {
 	multimap( );
 	Py_INCREF(Py_None);
@@ -1121,9 +1051,7 @@
 /* void onemap */
 
 static PyObject *
-gl_onemap(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_onemap(PyObject *self, PyObject *args)
 {
 	onemap( );
 	Py_INCREF(Py_None);
@@ -1133,9 +1061,7 @@
 /* void popattributes */
 
 static PyObject *
-gl_popattributes(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_popattributes(PyObject *self, PyObject *args)
 {
 	popattributes( );
 	Py_INCREF(Py_None);
@@ -1145,9 +1071,7 @@
 /* void popmatrix */
 
 static PyObject *
-gl_popmatrix(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_popmatrix(PyObject *self, PyObject *args)
 {
 	popmatrix( );
 	Py_INCREF(Py_None);
@@ -1157,9 +1081,7 @@
 /* void pushattributes */
 
 static PyObject *
-gl_pushattributes(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pushattributes(PyObject *self, PyObject *args)
 {
 	pushattributes( );
 	Py_INCREF(Py_None);
@@ -1169,9 +1091,7 @@
 /* void pushmatrix */
 
 static PyObject *
-gl_pushmatrix(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pushmatrix(PyObject *self, PyObject *args)
 {
 	pushmatrix( );
 	Py_INCREF(Py_None);
@@ -1181,9 +1101,7 @@
 /* void pushviewport */
 
 static PyObject *
-gl_pushviewport(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pushviewport(PyObject *self, PyObject *args)
 {
 	pushviewport( );
 	Py_INCREF(Py_None);
@@ -1193,9 +1111,7 @@
 /* void qreset */
 
 static PyObject *
-gl_qreset(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_qreset(PyObject *self, PyObject *args)
 {
 	qreset( );
 	Py_INCREF(Py_None);
@@ -1205,9 +1121,7 @@
 /* void RGBmode */
 
 static PyObject *
-gl_RGBmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_RGBmode(PyObject *self, PyObject *args)
 {
 	RGBmode( );
 	Py_INCREF(Py_None);
@@ -1217,9 +1131,7 @@
 /* void singlebuffer */
 
 static PyObject *
-gl_singlebuffer(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_singlebuffer(PyObject *self, PyObject *args)
 {
 	singlebuffer( );
 	Py_INCREF(Py_None);
@@ -1229,9 +1141,7 @@
 /* void swapbuffers */
 
 static PyObject *
-gl_swapbuffers(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_swapbuffers(PyObject *self, PyObject *args)
 {
 	swapbuffers( );
 	Py_INCREF(Py_None);
@@ -1241,9 +1151,7 @@
 /* void gsync */
 
 static PyObject *
-gl_gsync(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gsync(PyObject *self, PyObject *args)
 {
 	gsync( );
 	Py_INCREF(Py_None);
@@ -1253,9 +1161,7 @@
 /* void gflush */
 
 static PyObject *
-gl_gflush(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gflush(PyObject *self, PyObject *args)
 {
 	gflush( );
 	Py_INCREF(Py_None);
@@ -1265,9 +1171,7 @@
 /* void tpon */
 
 static PyObject *
-gl_tpon(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_tpon(PyObject *self, PyObject *args)
 {
 	tpon( );
 	Py_INCREF(Py_None);
@@ -1277,9 +1181,7 @@
 /* void tpoff */
 
 static PyObject *
-gl_tpoff(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_tpoff(PyObject *self, PyObject *args)
 {
 	tpoff( );
 	Py_INCREF(Py_None);
@@ -1289,9 +1191,7 @@
 /* void clkon */
 
 static PyObject *
-gl_clkon(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_clkon(PyObject *self, PyObject *args)
 {
 	clkon( );
 	Py_INCREF(Py_None);
@@ -1301,9 +1201,7 @@
 /* void clkoff */
 
 static PyObject *
-gl_clkoff(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_clkoff(PyObject *self, PyObject *args)
 {
 	clkoff( );
 	Py_INCREF(Py_None);
@@ -1313,9 +1211,7 @@
 /* void ringbell */
 
 static PyObject *
-gl_ringbell(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_ringbell(PyObject *self, PyObject *args)
 {
 	ringbell( );
 	Py_INCREF(Py_None);
@@ -1325,9 +1221,7 @@
 /* void gbegin */
 
 static PyObject *
-gl_gbegin(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gbegin(PyObject *self, PyObject *args)
 {
 	gbegin( );
 	Py_INCREF(Py_None);
@@ -1337,9 +1231,7 @@
 /* void textinit */
 
 static PyObject *
-gl_textinit(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_textinit(PyObject *self, PyObject *args)
 {
 	textinit( );
 	Py_INCREF(Py_None);
@@ -1349,9 +1241,7 @@
 /* void initnames */
 
 static PyObject *
-gl_initnames(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_initnames(PyObject *self, PyObject *args)
 {
 	initnames( );
 	Py_INCREF(Py_None);
@@ -1361,9 +1251,7 @@
 /* void pclos */
 
 static PyObject *
-gl_pclos(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pclos(PyObject *self, PyObject *args)
 {
 	pclos( );
 	Py_INCREF(Py_None);
@@ -1373,9 +1261,7 @@
 /* void popname */
 
 static PyObject *
-gl_popname(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_popname(PyObject *self, PyObject *args)
 {
 	popname( );
 	Py_INCREF(Py_None);
@@ -1385,9 +1271,7 @@
 /* void spclos */
 
 static PyObject *
-gl_spclos(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_spclos(PyObject *self, PyObject *args)
 {
 	spclos( );
 	Py_INCREF(Py_None);
@@ -1397,9 +1281,7 @@
 /* void zclear */
 
 static PyObject *
-gl_zclear(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_zclear(PyObject *self, PyObject *args)
 {
 	zclear( );
 	Py_INCREF(Py_None);
@@ -1409,9 +1291,7 @@
 /* void screenspace */
 
 static PyObject *
-gl_screenspace(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_screenspace(PyObject *self, PyObject *args)
 {
 	screenspace( );
 	Py_INCREF(Py_None);
@@ -1421,9 +1301,7 @@
 /* void reshapeviewport */
 
 static PyObject *
-gl_reshapeviewport(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_reshapeviewport(PyObject *self, PyObject *args)
 {
 	reshapeviewport( );
 	Py_INCREF(Py_None);
@@ -1433,9 +1311,7 @@
 /* void winpush */
 
 static PyObject *
-gl_winpush(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winpush(PyObject *self, PyObject *args)
 {
 	winpush( );
 	Py_INCREF(Py_None);
@@ -1445,9 +1321,7 @@
 /* void winpop */
 
 static PyObject *
-gl_winpop(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winpop(PyObject *self, PyObject *args)
 {
 	winpop( );
 	Py_INCREF(Py_None);
@@ -1457,9 +1331,7 @@
 /* void foreground */
 
 static PyObject *
-gl_foreground(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_foreground(PyObject *self, PyObject *args)
 {
 	foreground( );
 	Py_INCREF(Py_None);
@@ -1469,9 +1341,7 @@
 /* void endfullscrn */
 
 static PyObject *
-gl_endfullscrn(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_endfullscrn(PyObject *self, PyObject *args)
 {
 	endfullscrn( );
 	Py_INCREF(Py_None);
@@ -1481,9 +1351,7 @@
 /* void endpupmode */
 
 static PyObject *
-gl_endpupmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_endpupmode(PyObject *self, PyObject *args)
 {
 	endpupmode( );
 	Py_INCREF(Py_None);
@@ -1493,9 +1361,7 @@
 /* void fullscrn */
 
 static PyObject *
-gl_fullscrn(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_fullscrn(PyObject *self, PyObject *args)
 {
 	fullscrn( );
 	Py_INCREF(Py_None);
@@ -1505,9 +1371,7 @@
 /* void pupmode */
 
 static PyObject *
-gl_pupmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pupmode(PyObject *self, PyObject *args)
 {
 	pupmode( );
 	Py_INCREF(Py_None);
@@ -1517,9 +1381,7 @@
 /* void winconstraints */
 
 static PyObject *
-gl_winconstraints(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winconstraints(PyObject *self, PyObject *args)
 {
 	winconstraints( );
 	Py_INCREF(Py_None);
@@ -1529,9 +1391,7 @@
 /* void pagecolor short s */
 
 static PyObject *
-gl_pagecolor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pagecolor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1544,9 +1404,7 @@
 /* void textcolor short s */
 
 static PyObject *
-gl_textcolor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_textcolor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1559,9 +1417,7 @@
 /* void color short s */
 
 static PyObject *
-gl_color(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_color(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1574,9 +1430,7 @@
 /* void curveit short s */
 
 static PyObject *
-gl_curveit(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_curveit(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1589,9 +1443,7 @@
 /* void font short s */
 
 static PyObject *
-gl_font(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_font(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1604,9 +1456,7 @@
 /* void linewidth short s */
 
 static PyObject *
-gl_linewidth(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_linewidth(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1619,9 +1469,7 @@
 /* void setlinestyle short s */
 
 static PyObject *
-gl_setlinestyle(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setlinestyle(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1634,9 +1482,7 @@
 /* void setmap short s */
 
 static PyObject *
-gl_setmap(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setmap(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1649,9 +1495,7 @@
 /* void swapinterval short s */
 
 static PyObject *
-gl_swapinterval(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_swapinterval(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1664,9 +1508,7 @@
 /* void writemask short s */
 
 static PyObject *
-gl_writemask(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_writemask(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1679,9 +1521,7 @@
 /* void textwritemask short s */
 
 static PyObject *
-gl_textwritemask(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_textwritemask(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1694,9 +1534,7 @@
 /* void qdevice short s */
 
 static PyObject *
-gl_qdevice(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_qdevice(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1709,9 +1547,7 @@
 /* void unqdevice short s */
 
 static PyObject *
-gl_unqdevice(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_unqdevice(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1724,9 +1560,7 @@
 /* void curvebasis short s */
 
 static PyObject *
-gl_curvebasis(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_curvebasis(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1739,9 +1573,7 @@
 /* void curveprecision short s */
 
 static PyObject *
-gl_curveprecision(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_curveprecision(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1754,9 +1586,7 @@
 /* void loadname short s */
 
 static PyObject *
-gl_loadname(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_loadname(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1769,9 +1599,7 @@
 /* void passthrough short s */
 
 static PyObject *
-gl_passthrough(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_passthrough(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1784,9 +1612,7 @@
 /* void pushname short s */
 
 static PyObject *
-gl_pushname(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pushname(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1799,9 +1625,7 @@
 /* void setmonitor short s */
 
 static PyObject *
-gl_setmonitor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setmonitor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1814,9 +1638,7 @@
 /* void setshade short s */
 
 static PyObject *
-gl_setshade(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setshade(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1829,9 +1651,7 @@
 /* void setpattern short s */
 
 static PyObject *
-gl_setpattern(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setpattern(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1844,9 +1664,7 @@
 /* void pagewritemask short s */
 
 static PyObject *
-gl_pagewritemask(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pagewritemask(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	if (!getishortarg(args, 1, 0, &arg1))
@@ -1859,9 +1677,7 @@
 /* void callobj long s */
 
 static PyObject *
-gl_callobj(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_callobj(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -1874,9 +1690,7 @@
 /* void delobj long s */
 
 static PyObject *
-gl_delobj(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_delobj(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -1889,9 +1703,7 @@
 /* void editobj long s */
 
 static PyObject *
-gl_editobj(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_editobj(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -1904,9 +1716,7 @@
 /* void makeobj long s */
 
 static PyObject *
-gl_makeobj(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_makeobj(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -1919,9 +1729,7 @@
 /* void maketag long s */
 
 static PyObject *
-gl_maketag(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_maketag(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -1934,9 +1742,7 @@
 /* void chunksize long s */
 
 static PyObject *
-gl_chunksize(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_chunksize(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -1949,9 +1755,7 @@
 /* void compactify long s */
 
 static PyObject *
-gl_compactify(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_compactify(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -1964,9 +1768,7 @@
 /* void deltag long s */
 
 static PyObject *
-gl_deltag(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_deltag(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -1979,9 +1781,7 @@
 /* void lsrepeat long s */
 
 static PyObject *
-gl_lsrepeat(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lsrepeat(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -1994,9 +1794,7 @@
 /* void objinsert long s */
 
 static PyObject *
-gl_objinsert(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_objinsert(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2009,9 +1807,7 @@
 /* void objreplace long s */
 
 static PyObject *
-gl_objreplace(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_objreplace(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2024,9 +1820,7 @@
 /* void winclose long s */
 
 static PyObject *
-gl_winclose(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winclose(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2039,9 +1833,7 @@
 /* void blanktime long s */
 
 static PyObject *
-gl_blanktime(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_blanktime(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2054,9 +1846,7 @@
 /* void freepup long s */
 
 static PyObject *
-gl_freepup(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_freepup(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2069,9 +1859,7 @@
 /* void backbuffer long s */
 
 static PyObject *
-gl_backbuffer(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_backbuffer(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2084,9 +1872,7 @@
 /* void frontbuffer long s */
 
 static PyObject *
-gl_frontbuffer(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_frontbuffer(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2099,9 +1885,7 @@
 /* void lsbackup long s */
 
 static PyObject *
-gl_lsbackup(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lsbackup(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2114,9 +1898,7 @@
 /* void resetls long s */
 
 static PyObject *
-gl_resetls(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_resetls(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2129,9 +1911,7 @@
 /* void lampon long s */
 
 static PyObject *
-gl_lampon(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lampon(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2144,9 +1924,7 @@
 /* void lampoff long s */
 
 static PyObject *
-gl_lampoff(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lampoff(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2159,9 +1937,7 @@
 /* void setbell long s */
 
 static PyObject *
-gl_setbell(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setbell(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2174,9 +1950,7 @@
 /* void blankscreen long s */
 
 static PyObject *
-gl_blankscreen(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_blankscreen(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2189,9 +1963,7 @@
 /* void depthcue long s */
 
 static PyObject *
-gl_depthcue(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_depthcue(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2204,9 +1976,7 @@
 /* void zbuffer long s */
 
 static PyObject *
-gl_zbuffer(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_zbuffer(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2219,9 +1989,7 @@
 /* void backface long s */
 
 static PyObject *
-gl_backface(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_backface(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -2234,9 +2002,7 @@
 /* void cmov2i long s long s */
 
 static PyObject *
-gl_cmov2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cmov2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2252,9 +2018,7 @@
 /* void draw2i long s long s */
 
 static PyObject *
-gl_draw2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_draw2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2270,9 +2034,7 @@
 /* void move2i long s long s */
 
 static PyObject *
-gl_move2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_move2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2288,9 +2050,7 @@
 /* void pnt2i long s long s */
 
 static PyObject *
-gl_pnt2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pnt2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2306,9 +2066,7 @@
 /* void patchbasis long s long s */
 
 static PyObject *
-gl_patchbasis(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_patchbasis(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2324,9 +2082,7 @@
 /* void patchprecision long s long s */
 
 static PyObject *
-gl_patchprecision(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_patchprecision(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2342,9 +2098,7 @@
 /* void pdr2i long s long s */
 
 static PyObject *
-gl_pdr2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pdr2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2360,9 +2114,7 @@
 /* void pmv2i long s long s */
 
 static PyObject *
-gl_pmv2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pmv2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2378,9 +2130,7 @@
 /* void rpdr2i long s long s */
 
 static PyObject *
-gl_rpdr2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpdr2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2396,9 +2146,7 @@
 /* void rpmv2i long s long s */
 
 static PyObject *
-gl_rpmv2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpmv2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2414,9 +2162,7 @@
 /* void xfpt2i long s long s */
 
 static PyObject *
-gl_xfpt2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_xfpt2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2432,9 +2178,7 @@
 /* void objdelete long s long s */
 
 static PyObject *
-gl_objdelete(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_objdelete(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2450,9 +2194,7 @@
 /* void patchcurves long s long s */
 
 static PyObject *
-gl_patchcurves(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_patchcurves(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2468,9 +2210,7 @@
 /* void minsize long s long s */
 
 static PyObject *
-gl_minsize(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_minsize(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2486,9 +2226,7 @@
 /* void maxsize long s long s */
 
 static PyObject *
-gl_maxsize(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_maxsize(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2504,9 +2242,7 @@
 /* void keepaspect long s long s */
 
 static PyObject *
-gl_keepaspect(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_keepaspect(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2522,9 +2258,7 @@
 /* void prefsize long s long s */
 
 static PyObject *
-gl_prefsize(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_prefsize(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2540,9 +2274,7 @@
 /* void stepunit long s long s */
 
 static PyObject *
-gl_stepunit(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_stepunit(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2558,9 +2290,7 @@
 /* void fudge long s long s */
 
 static PyObject *
-gl_fudge(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_fudge(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2576,9 +2306,7 @@
 /* void winmove long s long s */
 
 static PyObject *
-gl_winmove(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winmove(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -2594,9 +2322,7 @@
 /* void attachcursor short s short s */
 
 static PyObject *
-gl_attachcursor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_attachcursor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2612,9 +2338,7 @@
 /* void deflinestyle short s short s */
 
 static PyObject *
-gl_deflinestyle(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_deflinestyle(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2630,9 +2354,7 @@
 /* void noise short s short s */
 
 static PyObject *
-gl_noise(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_noise(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2648,9 +2370,7 @@
 /* void picksize short s short s */
 
 static PyObject *
-gl_picksize(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_picksize(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2666,9 +2386,7 @@
 /* void qenter short s short s */
 
 static PyObject *
-gl_qenter(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_qenter(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2684,9 +2402,7 @@
 /* void setdepth short s short s */
 
 static PyObject *
-gl_setdepth(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setdepth(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2702,9 +2418,7 @@
 /* void cmov2s short s short s */
 
 static PyObject *
-gl_cmov2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cmov2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2720,9 +2434,7 @@
 /* void draw2s short s short s */
 
 static PyObject *
-gl_draw2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_draw2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2738,9 +2450,7 @@
 /* void move2s short s short s */
 
 static PyObject *
-gl_move2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_move2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2756,9 +2466,7 @@
 /* void pdr2s short s short s */
 
 static PyObject *
-gl_pdr2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pdr2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2774,9 +2482,7 @@
 /* void pmv2s short s short s */
 
 static PyObject *
-gl_pmv2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pmv2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2792,9 +2498,7 @@
 /* void pnt2s short s short s */
 
 static PyObject *
-gl_pnt2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pnt2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2810,9 +2514,7 @@
 /* void rdr2s short s short s */
 
 static PyObject *
-gl_rdr2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rdr2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2828,9 +2530,7 @@
 /* void rmv2s short s short s */
 
 static PyObject *
-gl_rmv2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rmv2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2846,9 +2546,7 @@
 /* void rpdr2s short s short s */
 
 static PyObject *
-gl_rpdr2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpdr2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2864,9 +2562,7 @@
 /* void rpmv2s short s short s */
 
 static PyObject *
-gl_rpmv2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpmv2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2882,9 +2578,7 @@
 /* void xfpt2s short s short s */
 
 static PyObject *
-gl_xfpt2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_xfpt2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -2900,9 +2594,7 @@
 /* void cmov2 float s float s */
 
 static PyObject *
-gl_cmov2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cmov2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -2918,9 +2610,7 @@
 /* void draw2 float s float s */
 
 static PyObject *
-gl_draw2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_draw2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -2936,9 +2626,7 @@
 /* void move2 float s float s */
 
 static PyObject *
-gl_move2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_move2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -2954,9 +2642,7 @@
 /* void pnt2 float s float s */
 
 static PyObject *
-gl_pnt2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pnt2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -2972,9 +2658,7 @@
 /* void pdr2 float s float s */
 
 static PyObject *
-gl_pdr2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pdr2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -2990,9 +2674,7 @@
 /* void pmv2 float s float s */
 
 static PyObject *
-gl_pmv2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pmv2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -3008,9 +2690,7 @@
 /* void rdr2 float s float s */
 
 static PyObject *
-gl_rdr2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rdr2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -3026,9 +2706,7 @@
 /* void rmv2 float s float s */
 
 static PyObject *
-gl_rmv2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rmv2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -3044,9 +2722,7 @@
 /* void rpdr2 float s float s */
 
 static PyObject *
-gl_rpdr2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpdr2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -3062,9 +2738,7 @@
 /* void rpmv2 float s float s */
 
 static PyObject *
-gl_rpmv2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpmv2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -3080,9 +2754,7 @@
 /* void xfpt2 float s float s */
 
 static PyObject *
-gl_xfpt2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_xfpt2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -3098,9 +2770,7 @@
 /* void loadmatrix float s[4*4] */
 
 static PyObject *
-gl_loadmatrix(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_loadmatrix(PyObject *self, PyObject *args)
 {
 	float arg1 [ 4 ] [ 4 ] ;
 	if (!getifloatarray(args, 1, 0, 4 * 4 , (float *) arg1))
@@ -3113,9 +2783,7 @@
 /* void multmatrix float s[4*4] */
 
 static PyObject *
-gl_multmatrix(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_multmatrix(PyObject *self, PyObject *args)
 {
 	float arg1 [ 4 ] [ 4 ] ;
 	if (!getifloatarray(args, 1, 0, 4 * 4 , (float *) arg1))
@@ -3128,9 +2796,7 @@
 /* void crv float s[3*4] */
 
 static PyObject *
-gl_crv(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_crv(PyObject *self, PyObject *args)
 {
 	float arg1 [ 4 ] [ 3 ] ;
 	if (!getifloatarray(args, 1, 0, 3 * 4 , (float *) arg1))
@@ -3143,9 +2809,7 @@
 /* void rcrv float s[4*4] */
 
 static PyObject *
-gl_rcrv(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rcrv(PyObject *self, PyObject *args)
 {
 	float arg1 [ 4 ] [ 4 ] ;
 	if (!getifloatarray(args, 1, 0, 4 * 4 , (float *) arg1))
@@ -3158,9 +2822,7 @@
 /* void addtopup long s char *s long s */
 
 static PyObject *
-gl_addtopup(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_addtopup(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	string arg2 ;
@@ -3179,9 +2841,7 @@
 /* void charstr char *s */
 
 static PyObject *
-gl_charstr(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_charstr(PyObject *self, PyObject *args)
 {
 	string arg1 ;
 	if (!getistringarg(args, 1, 0, &arg1))
@@ -3194,9 +2854,7 @@
 /* void getport char *s */
 
 static PyObject *
-gl_getport(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getport(PyObject *self, PyObject *args)
 {
 	string arg1 ;
 	if (!getistringarg(args, 1, 0, &arg1))
@@ -3209,9 +2867,7 @@
 /* long strwidth char *s */
 
 static PyObject *
-gl_strwidth(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_strwidth(PyObject *self, PyObject *args)
 {
 	long retval;
 	string arg1 ;
@@ -3224,9 +2880,7 @@
 /* long winopen char *s */
 
 static PyObject *
-gl_winopen(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winopen(PyObject *self, PyObject *args)
 {
 	long retval;
 	string arg1 ;
@@ -3239,9 +2893,7 @@
 /* void wintitle char *s */
 
 static PyObject *
-gl_wintitle(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_wintitle(PyObject *self, PyObject *args)
 {
 	string arg1 ;
 	if (!getistringarg(args, 1, 0, &arg1))
@@ -3254,9 +2906,7 @@
 /* void polf long s float s[3*arg1] */
 
 static PyObject *
-gl_polf(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_polf(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float (* arg2) [ 3 ] ;
@@ -3276,9 +2926,7 @@
 /* void polf2 long s float s[2*arg1] */
 
 static PyObject *
-gl_polf2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_polf2(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float (* arg2) [ 2 ] ;
@@ -3298,9 +2946,7 @@
 /* void poly long s float s[3*arg1] */
 
 static PyObject *
-gl_poly(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_poly(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float (* arg2) [ 3 ] ;
@@ -3320,9 +2966,7 @@
 /* void poly2 long s float s[2*arg1] */
 
 static PyObject *
-gl_poly2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_poly2(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float (* arg2) [ 2 ] ;
@@ -3342,9 +2986,7 @@
 /* void crvn long s float s[3*arg1] */
 
 static PyObject *
-gl_crvn(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_crvn(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float (* arg2) [ 3 ] ;
@@ -3364,9 +3006,7 @@
 /* void rcrvn long s float s[4*arg1] */
 
 static PyObject *
-gl_rcrvn(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rcrvn(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float (* arg2) [ 4 ] ;
@@ -3386,9 +3026,7 @@
 /* void polf2i long s long s[2*arg1] */
 
 static PyObject *
-gl_polf2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_polf2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long (* arg2) [ 2 ] ;
@@ -3408,9 +3046,7 @@
 /* void polfi long s long s[3*arg1] */
 
 static PyObject *
-gl_polfi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_polfi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long (* arg2) [ 3 ] ;
@@ -3430,9 +3066,7 @@
 /* void poly2i long s long s[2*arg1] */
 
 static PyObject *
-gl_poly2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_poly2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long (* arg2) [ 2 ] ;
@@ -3452,9 +3086,7 @@
 /* void polyi long s long s[3*arg1] */
 
 static PyObject *
-gl_polyi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_polyi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long (* arg2) [ 3 ] ;
@@ -3474,9 +3106,7 @@
 /* void polf2s long s short s[2*arg1] */
 
 static PyObject *
-gl_polf2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_polf2s(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	short (* arg2) [ 2 ] ;
@@ -3496,9 +3126,7 @@
 /* void polfs long s short s[3*arg1] */
 
 static PyObject *
-gl_polfs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_polfs(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	short (* arg2) [ 3 ] ;
@@ -3518,9 +3146,7 @@
 /* void polys long s short s[3*arg1] */
 
 static PyObject *
-gl_polys(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_polys(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	short (* arg2) [ 3 ] ;
@@ -3540,9 +3166,7 @@
 /* void poly2s long s short s[2*arg1] */
 
 static PyObject *
-gl_poly2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_poly2s(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	short (* arg2) [ 2 ] ;
@@ -3562,9 +3186,7 @@
 /* void defcursor short s u_short s[128] */
 
 static PyObject *
-gl_defcursor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_defcursor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	unsigned short arg2 [ 128 ] ;
@@ -3580,9 +3202,7 @@
 /* void writepixels short s u_short s[arg1] */
 
 static PyObject *
-gl_writepixels(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_writepixels(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	unsigned short * arg2 ;
@@ -3601,9 +3221,7 @@
 /* void defbasis long s float s[4*4] */
 
 static PyObject *
-gl_defbasis(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_defbasis(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float arg2 [ 4 ] [ 4 ] ;
@@ -3619,9 +3237,7 @@
 /* void gewrite short s short s[arg1] */
 
 static PyObject *
-gl_gewrite(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gewrite(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short * arg2 ;
@@ -3640,9 +3256,7 @@
 /* void rotate short s char s */
 
 static PyObject *
-gl_rotate(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rotate(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	char arg2 ;
@@ -3658,9 +3272,7 @@
 /* void rot float s char s */
 
 static PyObject *
-gl_rot(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rot(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	char arg2 ;
@@ -3676,9 +3288,7 @@
 /* void circfi long s long s long s */
 
 static PyObject *
-gl_circfi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_circfi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3697,9 +3307,7 @@
 /* void circi long s long s long s */
 
 static PyObject *
-gl_circi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_circi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3718,9 +3326,7 @@
 /* void cmovi long s long s long s */
 
 static PyObject *
-gl_cmovi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cmovi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3739,9 +3345,7 @@
 /* void drawi long s long s long s */
 
 static PyObject *
-gl_drawi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_drawi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3760,9 +3364,7 @@
 /* void movei long s long s long s */
 
 static PyObject *
-gl_movei(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_movei(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3781,9 +3383,7 @@
 /* void pnti long s long s long s */
 
 static PyObject *
-gl_pnti(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pnti(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3802,9 +3402,7 @@
 /* void newtag long s long s long s */
 
 static PyObject *
-gl_newtag(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_newtag(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3823,9 +3421,7 @@
 /* void pdri long s long s long s */
 
 static PyObject *
-gl_pdri(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pdri(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3844,9 +3440,7 @@
 /* void pmvi long s long s long s */
 
 static PyObject *
-gl_pmvi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pmvi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3865,9 +3459,7 @@
 /* void rdri long s long s long s */
 
 static PyObject *
-gl_rdri(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rdri(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3886,9 +3478,7 @@
 /* void rmvi long s long s long s */
 
 static PyObject *
-gl_rmvi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rmvi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3907,9 +3497,7 @@
 /* void rpdri long s long s long s */
 
 static PyObject *
-gl_rpdri(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpdri(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3928,9 +3516,7 @@
 /* void rpmvi long s long s long s */
 
 static PyObject *
-gl_rpmvi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpmvi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3949,9 +3535,7 @@
 /* void xfpti long s long s long s */
 
 static PyObject *
-gl_xfpti(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_xfpti(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -3970,9 +3554,7 @@
 /* void circ float s float s float s */
 
 static PyObject *
-gl_circ(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_circ(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -3991,9 +3573,7 @@
 /* void circf float s float s float s */
 
 static PyObject *
-gl_circf(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_circf(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4012,9 +3592,7 @@
 /* void cmov float s float s float s */
 
 static PyObject *
-gl_cmov(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cmov(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4033,9 +3611,7 @@
 /* void draw float s float s float s */
 
 static PyObject *
-gl_draw(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_draw(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4054,9 +3630,7 @@
 /* void move float s float s float s */
 
 static PyObject *
-gl_move(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_move(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4075,9 +3649,7 @@
 /* void pnt float s float s float s */
 
 static PyObject *
-gl_pnt(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pnt(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4096,9 +3668,7 @@
 /* void scale float s float s float s */
 
 static PyObject *
-gl_scale(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_scale(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4117,9 +3687,7 @@
 /* void translate float s float s float s */
 
 static PyObject *
-gl_translate(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_translate(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4138,9 +3706,7 @@
 /* void pdr float s float s float s */
 
 static PyObject *
-gl_pdr(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pdr(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4159,9 +3725,7 @@
 /* void pmv float s float s float s */
 
 static PyObject *
-gl_pmv(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pmv(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4180,9 +3744,7 @@
 /* void rdr float s float s float s */
 
 static PyObject *
-gl_rdr(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rdr(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4201,9 +3763,7 @@
 /* void rmv float s float s float s */
 
 static PyObject *
-gl_rmv(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rmv(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4222,9 +3782,7 @@
 /* void rpdr float s float s float s */
 
 static PyObject *
-gl_rpdr(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpdr(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4243,9 +3801,7 @@
 /* void rpmv float s float s float s */
 
 static PyObject *
-gl_rpmv(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpmv(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4264,9 +3820,7 @@
 /* void xfpt float s float s float s */
 
 static PyObject *
-gl_xfpt(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_xfpt(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4285,9 +3839,7 @@
 /* void RGBcolor short s short s short s */
 
 static PyObject *
-gl_RGBcolor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_RGBcolor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4306,9 +3858,7 @@
 /* void RGBwritemask short s short s short s */
 
 static PyObject *
-gl_RGBwritemask(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_RGBwritemask(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4327,9 +3877,7 @@
 /* void setcursor short s short s short s */
 
 static PyObject *
-gl_setcursor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setcursor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4348,9 +3896,7 @@
 /* void tie short s short s short s */
 
 static PyObject *
-gl_tie(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_tie(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4369,9 +3915,7 @@
 /* void circfs short s short s short s */
 
 static PyObject *
-gl_circfs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_circfs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4390,9 +3934,7 @@
 /* void circs short s short s short s */
 
 static PyObject *
-gl_circs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_circs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4411,9 +3953,7 @@
 /* void cmovs short s short s short s */
 
 static PyObject *
-gl_cmovs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cmovs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4432,9 +3972,7 @@
 /* void draws short s short s short s */
 
 static PyObject *
-gl_draws(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_draws(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4453,9 +3991,7 @@
 /* void moves short s short s short s */
 
 static PyObject *
-gl_moves(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_moves(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4474,9 +4010,7 @@
 /* void pdrs short s short s short s */
 
 static PyObject *
-gl_pdrs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pdrs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4495,9 +4029,7 @@
 /* void pmvs short s short s short s */
 
 static PyObject *
-gl_pmvs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pmvs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4516,9 +4048,7 @@
 /* void pnts short s short s short s */
 
 static PyObject *
-gl_pnts(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pnts(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4537,9 +4067,7 @@
 /* void rdrs short s short s short s */
 
 static PyObject *
-gl_rdrs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rdrs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4558,9 +4086,7 @@
 /* void rmvs short s short s short s */
 
 static PyObject *
-gl_rmvs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rmvs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4579,9 +4105,7 @@
 /* void rpdrs short s short s short s */
 
 static PyObject *
-gl_rpdrs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpdrs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4600,9 +4124,7 @@
 /* void rpmvs short s short s short s */
 
 static PyObject *
-gl_rpmvs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpmvs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4621,9 +4143,7 @@
 /* void xfpts short s short s short s */
 
 static PyObject *
-gl_xfpts(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_xfpts(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4642,9 +4162,7 @@
 /* void curorigin short s short s short s */
 
 static PyObject *
-gl_curorigin(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_curorigin(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4663,9 +4181,7 @@
 /* void cyclemap short s short s short s */
 
 static PyObject *
-gl_cyclemap(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cyclemap(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -4684,9 +4200,7 @@
 /* void patch float s[4*4] float s[4*4] float s[4*4] */
 
 static PyObject *
-gl_patch(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_patch(PyObject *self, PyObject *args)
 {
 	float arg1 [ 4 ] [ 4 ] ;
 	float arg2 [ 4 ] [ 4 ] ;
@@ -4705,9 +4219,7 @@
 /* void splf long s float s[3*arg1] u_short s[arg1] */
 
 static PyObject *
-gl_splf(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_splf(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float (* arg2) [ 3 ] ;
@@ -4733,9 +4245,7 @@
 /* void splf2 long s float s[2*arg1] u_short s[arg1] */
 
 static PyObject *
-gl_splf2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_splf2(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float (* arg2) [ 2 ] ;
@@ -4761,9 +4271,7 @@
 /* void splfi long s long s[3*arg1] u_short s[arg1] */
 
 static PyObject *
-gl_splfi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_splfi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long (* arg2) [ 3 ] ;
@@ -4789,9 +4297,7 @@
 /* void splf2i long s long s[2*arg1] u_short s[arg1] */
 
 static PyObject *
-gl_splf2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_splf2i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long (* arg2) [ 2 ] ;
@@ -4817,9 +4323,7 @@
 /* void splfs long s short s[3*arg1] u_short s[arg1] */
 
 static PyObject *
-gl_splfs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_splfs(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	short (* arg2) [ 3 ] ;
@@ -4845,9 +4349,7 @@
 /* void splf2s long s short s[2*arg1] u_short s[arg1] */
 
 static PyObject *
-gl_splf2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_splf2s(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	short (* arg2) [ 2 ] ;
@@ -4873,9 +4375,7 @@
 /* void rpatch float s[4*4] float s[4*4] float s[4*4] float s[4*4] */
 
 static PyObject *
-gl_rpatch(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rpatch(PyObject *self, PyObject *args)
 {
 	float arg1 [ 4 ] [ 4 ] ;
 	float arg2 [ 4 ] [ 4 ] ;
@@ -4897,9 +4397,7 @@
 /* void ortho2 float s float s float s float s */
 
 static PyObject *
-gl_ortho2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_ortho2(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4921,9 +4419,7 @@
 /* void rect float s float s float s float s */
 
 static PyObject *
-gl_rect(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rect(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4945,9 +4441,7 @@
 /* void rectf float s float s float s float s */
 
 static PyObject *
-gl_rectf(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rectf(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4969,9 +4463,7 @@
 /* void xfpt4 float s float s float s float s */
 
 static PyObject *
-gl_xfpt4(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_xfpt4(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -4993,9 +4485,7 @@
 /* void textport short s short s short s short s */
 
 static PyObject *
-gl_textport(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_textport(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5017,9 +4507,7 @@
 /* void mapcolor short s short s short s short s */
 
 static PyObject *
-gl_mapcolor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_mapcolor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5041,9 +4529,7 @@
 /* void scrmask short s short s short s short s */
 
 static PyObject *
-gl_scrmask(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_scrmask(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5065,9 +4551,7 @@
 /* void setvaluator short s short s short s short s */
 
 static PyObject *
-gl_setvaluator(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setvaluator(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5089,9 +4573,7 @@
 /* void viewport short s short s short s short s */
 
 static PyObject *
-gl_viewport(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_viewport(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5113,9 +4595,7 @@
 /* void shaderange short s short s short s short s */
 
 static PyObject *
-gl_shaderange(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_shaderange(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5137,9 +4617,7 @@
 /* void xfpt4s short s short s short s short s */
 
 static PyObject *
-gl_xfpt4s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_xfpt4s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5161,9 +4639,7 @@
 /* void rectfi long s long s long s long s */
 
 static PyObject *
-gl_rectfi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rectfi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -5185,9 +4661,7 @@
 /* void recti long s long s long s long s */
 
 static PyObject *
-gl_recti(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_recti(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -5209,9 +4683,7 @@
 /* void xfpt4i long s long s long s long s */
 
 static PyObject *
-gl_xfpt4i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_xfpt4i(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -5233,9 +4705,7 @@
 /* void prefposition long s long s long s long s */
 
 static PyObject *
-gl_prefposition(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_prefposition(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -5257,9 +4727,7 @@
 /* void arc float s float s float s short s short s */
 
 static PyObject *
-gl_arc(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_arc(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -5284,9 +4752,7 @@
 /* void arcf float s float s float s short s short s */
 
 static PyObject *
-gl_arcf(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_arcf(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -5311,9 +4777,7 @@
 /* void arcfi long s long s long s short s short s */
 
 static PyObject *
-gl_arcfi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_arcfi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -5338,9 +4802,7 @@
 /* void arci long s long s long s short s short s */
 
 static PyObject *
-gl_arci(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_arci(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -5365,9 +4827,7 @@
 /* void bbox2 short s short s float s float s float s float s */
 
 static PyObject *
-gl_bbox2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bbox2(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5395,9 +4855,7 @@
 /* void bbox2i short s short s long s long s long s long s */
 
 static PyObject *
-gl_bbox2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bbox2i(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5425,9 +4883,7 @@
 /* void bbox2s short s short s short s short s short s short s */
 
 static PyObject *
-gl_bbox2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bbox2s(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5455,9 +4911,7 @@
 /* void blink short s short s short s short s short s */
 
 static PyObject *
-gl_blink(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_blink(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5482,9 +4936,7 @@
 /* void ortho float s float s float s float s float s float s */
 
 static PyObject *
-gl_ortho(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_ortho(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -5512,9 +4964,7 @@
 /* void window float s float s float s float s float s float s */
 
 static PyObject *
-gl_window(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_window(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -5542,9 +4992,7 @@
 /* void lookat float s float s float s float s float s float s short s */
 
 static PyObject *
-gl_lookat(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lookat(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -5575,9 +5023,7 @@
 /* void perspective short s float s float s float s */
 
 static PyObject *
-gl_perspective(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_perspective(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	float arg2 ;
@@ -5599,9 +5045,7 @@
 /* void polarview float s short s short s short s */
 
 static PyObject *
-gl_polarview(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_polarview(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	short arg2 ;
@@ -5623,9 +5067,7 @@
 /* void arcfs short s short s short s short s short s */
 
 static PyObject *
-gl_arcfs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_arcfs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5650,9 +5092,7 @@
 /* void arcs short s short s short s short s short s */
 
 static PyObject *
-gl_arcs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_arcs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5677,9 +5117,7 @@
 /* void rectcopy short s short s short s short s short s short s */
 
 static PyObject *
-gl_rectcopy(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rectcopy(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5707,9 +5145,7 @@
 /* void RGBcursor short s short s short s short s short s short s short s */
 
 static PyObject *
-gl_RGBcursor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_RGBcursor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -5740,9 +5176,7 @@
 /* long getbutton short s */
 
 static PyObject *
-gl_getbutton(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getbutton(PyObject *self, PyObject *args)
 {
 	long retval;
 	short arg1 ;
@@ -5755,9 +5189,7 @@
 /* long getcmmode */
 
 static PyObject *
-gl_getcmmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getcmmode(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getcmmode( );
@@ -5767,9 +5199,7 @@
 /* long getlsbackup */
 
 static PyObject *
-gl_getlsbackup(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getlsbackup(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getlsbackup( );
@@ -5779,9 +5209,7 @@
 /* long getresetls */
 
 static PyObject *
-gl_getresetls(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getresetls(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getresetls( );
@@ -5791,9 +5219,7 @@
 /* long getdcm */
 
 static PyObject *
-gl_getdcm(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getdcm(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getdcm( );
@@ -5803,9 +5229,7 @@
 /* long getzbuffer */
 
 static PyObject *
-gl_getzbuffer(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getzbuffer(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getzbuffer( );
@@ -5815,9 +5239,7 @@
 /* long ismex */
 
 static PyObject *
-gl_ismex(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_ismex(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = ismex( );
@@ -5827,9 +5249,7 @@
 /* long isobj long s */
 
 static PyObject *
-gl_isobj(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_isobj(PyObject *self, PyObject *args)
 {
 	long retval;
 	long arg1 ;
@@ -5842,9 +5262,7 @@
 /* long isqueued short s */
 
 static PyObject *
-gl_isqueued(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_isqueued(PyObject *self, PyObject *args)
 {
 	long retval;
 	short arg1 ;
@@ -5857,9 +5275,7 @@
 /* long istag long s */
 
 static PyObject *
-gl_istag(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_istag(PyObject *self, PyObject *args)
 {
 	long retval;
 	long arg1 ;
@@ -5872,9 +5288,7 @@
 /* long genobj */
 
 static PyObject *
-gl_genobj(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_genobj(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = genobj( );
@@ -5884,9 +5298,7 @@
 /* long gentag */
 
 static PyObject *
-gl_gentag(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gentag(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = gentag( );
@@ -5896,9 +5308,7 @@
 /* long getbuffer */
 
 static PyObject *
-gl_getbuffer(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getbuffer(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getbuffer( );
@@ -5908,9 +5318,7 @@
 /* long getcolor */
 
 static PyObject *
-gl_getcolor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getcolor(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getcolor( );
@@ -5920,9 +5328,7 @@
 /* long getdisplaymode */
 
 static PyObject *
-gl_getdisplaymode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getdisplaymode(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getdisplaymode( );
@@ -5932,9 +5338,7 @@
 /* long getfont */
 
 static PyObject *
-gl_getfont(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getfont(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getfont( );
@@ -5944,9 +5348,7 @@
 /* long getheight */
 
 static PyObject *
-gl_getheight(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getheight(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getheight( );
@@ -5956,9 +5358,7 @@
 /* long gethitcode */
 
 static PyObject *
-gl_gethitcode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gethitcode(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = gethitcode( );
@@ -5968,9 +5368,7 @@
 /* long getlstyle */
 
 static PyObject *
-gl_getlstyle(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getlstyle(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getlstyle( );
@@ -5980,9 +5378,7 @@
 /* long getlwidth */
 
 static PyObject *
-gl_getlwidth(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getlwidth(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getlwidth( );
@@ -5992,9 +5388,7 @@
 /* long getmap */
 
 static PyObject *
-gl_getmap(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getmap(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getmap( );
@@ -6004,9 +5398,7 @@
 /* long getplanes */
 
 static PyObject *
-gl_getplanes(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getplanes(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getplanes( );
@@ -6016,9 +5408,7 @@
 /* long getwritemask */
 
 static PyObject *
-gl_getwritemask(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getwritemask(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getwritemask( );
@@ -6028,9 +5418,7 @@
 /* long qtest */
 
 static PyObject *
-gl_qtest(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_qtest(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = qtest( );
@@ -6040,9 +5428,7 @@
 /* long getlsrepeat */
 
 static PyObject *
-gl_getlsrepeat(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getlsrepeat(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getlsrepeat( );
@@ -6052,9 +5438,7 @@
 /* long getmonitor */
 
 static PyObject *
-gl_getmonitor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getmonitor(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getmonitor( );
@@ -6064,9 +5448,7 @@
 /* long getopenobj */
 
 static PyObject *
-gl_getopenobj(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getopenobj(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getopenobj( );
@@ -6076,9 +5458,7 @@
 /* long getpattern */
 
 static PyObject *
-gl_getpattern(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getpattern(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getpattern( );
@@ -6088,9 +5468,7 @@
 /* long winget */
 
 static PyObject *
-gl_winget(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winget(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = winget( );
@@ -6100,9 +5478,7 @@
 /* long winattach */
 
 static PyObject *
-gl_winattach(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winattach(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = winattach( );
@@ -6112,9 +5488,7 @@
 /* long getothermonitor */
 
 static PyObject *
-gl_getothermonitor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getothermonitor(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getothermonitor( );
@@ -6124,9 +5498,7 @@
 /* long newpup */
 
 static PyObject *
-gl_newpup(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_newpup(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = newpup( );
@@ -6136,9 +5508,7 @@
 /* long getvaluator short s */
 
 static PyObject *
-gl_getvaluator(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getvaluator(PyObject *self, PyObject *args)
 {
 	long retval;
 	short arg1 ;
@@ -6151,9 +5521,7 @@
 /* void winset long s */
 
 static PyObject *
-gl_winset(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winset(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -6166,9 +5534,7 @@
 /* long dopup long s */
 
 static PyObject *
-gl_dopup(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_dopup(PyObject *self, PyObject *args)
 {
 	long retval;
 	long arg1 ;
@@ -6181,9 +5547,7 @@
 /* void getdepth short r short r */
 
 static PyObject *
-gl_getdepth(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getdepth(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6199,9 +5563,7 @@
 /* void getcpos short r short r */
 
 static PyObject *
-gl_getcpos(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getcpos(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6217,9 +5579,7 @@
 /* void getsize long r long r */
 
 static PyObject *
-gl_getsize(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getsize(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -6235,9 +5595,7 @@
 /* void getorigin long r long r */
 
 static PyObject *
-gl_getorigin(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getorigin(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -6253,9 +5611,7 @@
 /* void getviewport short r short r short r short r */
 
 static PyObject *
-gl_getviewport(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getviewport(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6275,9 +5631,7 @@
 /* void gettp short r short r short r short r */
 
 static PyObject *
-gl_gettp(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gettp(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6297,9 +5651,7 @@
 /* void getgpos float r float r float r float r */
 
 static PyObject *
-gl_getgpos(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getgpos(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -6319,9 +5671,7 @@
 /* void winposition long s long s long s long s */
 
 static PyObject *
-gl_winposition(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_winposition(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -6343,9 +5693,7 @@
 /* void gRGBcolor short r short r short r */
 
 static PyObject *
-gl_gRGBcolor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gRGBcolor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6363,9 +5711,7 @@
 /* void gRGBmask short r short r short r */
 
 static PyObject *
-gl_gRGBmask(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gRGBmask(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6383,9 +5729,7 @@
 /* void getscrmask short r short r short r short r */
 
 static PyObject *
-gl_getscrmask(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getscrmask(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6405,9 +5749,7 @@
 /* void getmcolor short s short r short r short r */
 
 static PyObject *
-gl_getmcolor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getmcolor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6428,9 +5770,7 @@
 /* void mapw long s short s short s float r float r float r float r float r float r */
 
 static PyObject *
-gl_mapw(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_mapw(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	short arg2 ;
@@ -6463,9 +5803,7 @@
 /* void mapw2 long s short s short s float r float r */
 
 static PyObject *
-gl_mapw2(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_mapw2(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	short arg2 ;
@@ -6490,9 +5828,7 @@
 /* void getcursor short r u_short r u_short r long r */
 
 static PyObject *
-gl_getcursor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getcursor(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	unsigned short arg2 ;
@@ -6512,9 +5848,7 @@
 /* void cmode */
 
 static PyObject *
-gl_cmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cmode(PyObject *self, PyObject *args)
 {
 	cmode( );
 	Py_INCREF(Py_None);
@@ -6524,9 +5858,7 @@
 /* void concave long s */
 
 static PyObject *
-gl_concave(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_concave(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -6539,9 +5871,7 @@
 /* void curstype long s */
 
 static PyObject *
-gl_curstype(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_curstype(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -6554,9 +5884,7 @@
 /* void drawmode long s */
 
 static PyObject *
-gl_drawmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_drawmode(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -6569,9 +5897,7 @@
 /* void gammaramp short s[256] short s[256] short s[256] */
 
 static PyObject *
-gl_gammaramp(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_gammaramp(PyObject *self, PyObject *args)
 {
 	short arg1 [ 256 ] ;
 	short arg2 [ 256 ] ;
@@ -6590,9 +5916,7 @@
 /* long getbackface */
 
 static PyObject *
-gl_getbackface(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getbackface(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getbackface( );
@@ -6602,9 +5926,7 @@
 /* long getdescender */
 
 static PyObject *
-gl_getdescender(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getdescender(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getdescender( );
@@ -6614,9 +5936,7 @@
 /* long getdrawmode */
 
 static PyObject *
-gl_getdrawmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getdrawmode(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getdrawmode( );
@@ -6626,9 +5946,7 @@
 /* long getmmode */
 
 static PyObject *
-gl_getmmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getmmode(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getmmode( );
@@ -6638,9 +5956,7 @@
 /* long getsm */
 
 static PyObject *
-gl_getsm(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getsm(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = getsm( );
@@ -6650,9 +5966,7 @@
 /* long getvideo long s */
 
 static PyObject *
-gl_getvideo(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getvideo(PyObject *self, PyObject *args)
 {
 	long retval;
 	long arg1 ;
@@ -6665,9 +5979,7 @@
 /* void imakebackground */
 
 static PyObject *
-gl_imakebackground(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_imakebackground(PyObject *self, PyObject *args)
 {
 	imakebackground( );
 	Py_INCREF(Py_None);
@@ -6677,9 +5989,7 @@
 /* void lmbind short s short s */
 
 static PyObject *
-gl_lmbind(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lmbind(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6695,9 +6005,7 @@
 /* void lmdef long s long s long s float s[arg3] */
 
 static PyObject *
-gl_lmdef(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lmdef(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -6722,9 +6030,7 @@
 /* void mmode long s */
 
 static PyObject *
-gl_mmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_mmode(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -6737,9 +6043,7 @@
 /* void normal float s[3] */
 
 static PyObject *
-gl_normal(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_normal(PyObject *self, PyObject *args)
 {
 	float arg1 [ 3 ] ;
 	if (!getifloatarray(args, 1, 0, 3 , arg1))
@@ -6752,9 +6056,7 @@
 /* void overlay long s */
 
 static PyObject *
-gl_overlay(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_overlay(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -6767,9 +6069,7 @@
 /* void RGBrange short s short s short s short s short s short s short s short s */
 
 static PyObject *
-gl_RGBrange(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_RGBrange(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -6803,9 +6103,7 @@
 /* void setvideo long s long s */
 
 static PyObject *
-gl_setvideo(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setvideo(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -6821,9 +6119,7 @@
 /* void shademodel long s */
 
 static PyObject *
-gl_shademodel(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_shademodel(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -6836,9 +6132,7 @@
 /* void underlay long s */
 
 static PyObject *
-gl_underlay(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_underlay(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -6851,9 +6145,7 @@
 /* void bgnclosedline */
 
 static PyObject *
-gl_bgnclosedline(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bgnclosedline(PyObject *self, PyObject *args)
 {
 	bgnclosedline( );
 	Py_INCREF(Py_None);
@@ -6863,9 +6155,7 @@
 /* void bgnline */
 
 static PyObject *
-gl_bgnline(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bgnline(PyObject *self, PyObject *args)
 {
 	bgnline( );
 	Py_INCREF(Py_None);
@@ -6875,9 +6165,7 @@
 /* void bgnpoint */
 
 static PyObject *
-gl_bgnpoint(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bgnpoint(PyObject *self, PyObject *args)
 {
 	bgnpoint( );
 	Py_INCREF(Py_None);
@@ -6887,9 +6175,7 @@
 /* void bgnpolygon */
 
 static PyObject *
-gl_bgnpolygon(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bgnpolygon(PyObject *self, PyObject *args)
 {
 	bgnpolygon( );
 	Py_INCREF(Py_None);
@@ -6899,9 +6185,7 @@
 /* void bgnsurface */
 
 static PyObject *
-gl_bgnsurface(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bgnsurface(PyObject *self, PyObject *args)
 {
 	bgnsurface( );
 	Py_INCREF(Py_None);
@@ -6911,9 +6195,7 @@
 /* void bgntmesh */
 
 static PyObject *
-gl_bgntmesh(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bgntmesh(PyObject *self, PyObject *args)
 {
 	bgntmesh( );
 	Py_INCREF(Py_None);
@@ -6923,9 +6205,7 @@
 /* void bgntrim */
 
 static PyObject *
-gl_bgntrim(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_bgntrim(PyObject *self, PyObject *args)
 {
 	bgntrim( );
 	Py_INCREF(Py_None);
@@ -6935,9 +6215,7 @@
 /* void endclosedline */
 
 static PyObject *
-gl_endclosedline(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_endclosedline(PyObject *self, PyObject *args)
 {
 	endclosedline( );
 	Py_INCREF(Py_None);
@@ -6947,9 +6225,7 @@
 /* void endline */
 
 static PyObject *
-gl_endline(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_endline(PyObject *self, PyObject *args)
 {
 	endline( );
 	Py_INCREF(Py_None);
@@ -6959,9 +6235,7 @@
 /* void endpoint */
 
 static PyObject *
-gl_endpoint(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_endpoint(PyObject *self, PyObject *args)
 {
 	endpoint( );
 	Py_INCREF(Py_None);
@@ -6971,9 +6245,7 @@
 /* void endpolygon */
 
 static PyObject *
-gl_endpolygon(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_endpolygon(PyObject *self, PyObject *args)
 {
 	endpolygon( );
 	Py_INCREF(Py_None);
@@ -6983,9 +6255,7 @@
 /* void endsurface */
 
 static PyObject *
-gl_endsurface(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_endsurface(PyObject *self, PyObject *args)
 {
 	endsurface( );
 	Py_INCREF(Py_None);
@@ -6995,9 +6265,7 @@
 /* void endtmesh */
 
 static PyObject *
-gl_endtmesh(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_endtmesh(PyObject *self, PyObject *args)
 {
 	endtmesh( );
 	Py_INCREF(Py_None);
@@ -7007,9 +6275,7 @@
 /* void endtrim */
 
 static PyObject *
-gl_endtrim(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_endtrim(PyObject *self, PyObject *args)
 {
 	endtrim( );
 	Py_INCREF(Py_None);
@@ -7019,9 +6285,7 @@
 /* void blendfunction long s long s */
 
 static PyObject *
-gl_blendfunction(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_blendfunction(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -7037,9 +6301,7 @@
 /* void c3f float s[3] */
 
 static PyObject *
-gl_c3f(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_c3f(PyObject *self, PyObject *args)
 {
 	float arg1 [ 3 ] ;
 	if (!getifloatarray(args, 1, 0, 3 , arg1))
@@ -7052,9 +6314,7 @@
 /* void c3i long s[3] */
 
 static PyObject *
-gl_c3i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_c3i(PyObject *self, PyObject *args)
 {
 	long arg1 [ 3 ] ;
 	if (!getilongarray(args, 1, 0, 3 , arg1))
@@ -7067,9 +6327,7 @@
 /* void c3s short s[3] */
 
 static PyObject *
-gl_c3s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_c3s(PyObject *self, PyObject *args)
 {
 	short arg1 [ 3 ] ;
 	if (!getishortarray(args, 1, 0, 3 , arg1))
@@ -7082,9 +6340,7 @@
 /* void c4f float s[4] */
 
 static PyObject *
-gl_c4f(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_c4f(PyObject *self, PyObject *args)
 {
 	float arg1 [ 4 ] ;
 	if (!getifloatarray(args, 1, 0, 4 , arg1))
@@ -7097,9 +6353,7 @@
 /* void c4i long s[4] */
 
 static PyObject *
-gl_c4i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_c4i(PyObject *self, PyObject *args)
 {
 	long arg1 [ 4 ] ;
 	if (!getilongarray(args, 1, 0, 4 , arg1))
@@ -7112,9 +6366,7 @@
 /* void c4s short s[4] */
 
 static PyObject *
-gl_c4s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_c4s(PyObject *self, PyObject *args)
 {
 	short arg1 [ 4 ] ;
 	if (!getishortarray(args, 1, 0, 4 , arg1))
@@ -7127,9 +6379,7 @@
 /* void colorf float s */
 
 static PyObject *
-gl_colorf(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_colorf(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	if (!getifloatarg(args, 1, 0, &arg1))
@@ -7142,9 +6392,7 @@
 /* void cpack long s */
 
 static PyObject *
-gl_cpack(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_cpack(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7157,9 +6405,7 @@
 /* void czclear long s long s */
 
 static PyObject *
-gl_czclear(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_czclear(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -7175,9 +6421,7 @@
 /* void dglclose long s */
 
 static PyObject *
-gl_dglclose(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_dglclose(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7190,9 +6434,7 @@
 /* long dglopen char *s long s */
 
 static PyObject *
-gl_dglopen(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_dglopen(PyObject *self, PyObject *args)
 {
 	long retval;
 	string arg1 ;
@@ -7208,9 +6450,7 @@
 /* long getgdesc long s */
 
 static PyObject *
-gl_getgdesc(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getgdesc(PyObject *self, PyObject *args)
 {
 	long retval;
 	long arg1 ;
@@ -7223,9 +6463,7 @@
 /* void getnurbsproperty long s float r */
 
 static PyObject *
-gl_getnurbsproperty(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_getnurbsproperty(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float arg2 ;
@@ -7238,9 +6476,7 @@
 /* void glcompat long s long s */
 
 static PyObject *
-gl_glcompat(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_glcompat(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -7256,9 +6492,7 @@
 /* void iconsize long s long s */
 
 static PyObject *
-gl_iconsize(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_iconsize(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -7274,9 +6508,7 @@
 /* void icontitle char *s */
 
 static PyObject *
-gl_icontitle(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_icontitle(PyObject *self, PyObject *args)
 {
 	string arg1 ;
 	if (!getistringarg(args, 1, 0, &arg1))
@@ -7289,9 +6521,7 @@
 /* void lRGBrange short s short s short s short s short s short s long s long s */
 
 static PyObject *
-gl_lRGBrange(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lRGBrange(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -7325,9 +6555,7 @@
 /* void linesmooth long s */
 
 static PyObject *
-gl_linesmooth(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_linesmooth(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7340,9 +6568,7 @@
 /* void lmcolor long s */
 
 static PyObject *
-gl_lmcolor(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lmcolor(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7355,9 +6581,7 @@
 /* void logicop long s */
 
 static PyObject *
-gl_logicop(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_logicop(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7370,9 +6594,7 @@
 /* void lsetdepth long s long s */
 
 static PyObject *
-gl_lsetdepth(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lsetdepth(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -7388,9 +6610,7 @@
 /* void lshaderange short s short s long s long s */
 
 static PyObject *
-gl_lshaderange(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_lshaderange(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -7412,9 +6632,7 @@
 /* void n3f float s[3] */
 
 static PyObject *
-gl_n3f(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_n3f(PyObject *self, PyObject *args)
 {
 	float arg1 [ 3 ] ;
 	if (!getifloatarray(args, 1, 0, 3 , arg1))
@@ -7427,9 +6645,7 @@
 /* void noborder */
 
 static PyObject *
-gl_noborder(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_noborder(PyObject *self, PyObject *args)
 {
 	noborder( );
 	Py_INCREF(Py_None);
@@ -7439,9 +6655,7 @@
 /* void pntsmooth long s */
 
 static PyObject *
-gl_pntsmooth(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pntsmooth(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7454,9 +6668,7 @@
 /* void readsource long s */
 
 static PyObject *
-gl_readsource(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_readsource(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7469,9 +6681,7 @@
 /* void rectzoom float s float s */
 
 static PyObject *
-gl_rectzoom(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_rectzoom(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -7487,9 +6697,7 @@
 /* void sbox float s float s float s float s */
 
 static PyObject *
-gl_sbox(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_sbox(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -7511,9 +6719,7 @@
 /* void sboxi long s long s long s long s */
 
 static PyObject *
-gl_sboxi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_sboxi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -7535,9 +6741,7 @@
 /* void sboxs short s short s short s short s */
 
 static PyObject *
-gl_sboxs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_sboxs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -7559,9 +6763,7 @@
 /* void sboxf float s float s float s float s */
 
 static PyObject *
-gl_sboxf(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_sboxf(PyObject *self, PyObject *args)
 {
 	float arg1 ;
 	float arg2 ;
@@ -7583,9 +6785,7 @@
 /* void sboxfi long s long s long s long s */
 
 static PyObject *
-gl_sboxfi(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_sboxfi(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -7607,9 +6807,7 @@
 /* void sboxfs short s short s short s short s */
 
 static PyObject *
-gl_sboxfs(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_sboxfs(PyObject *self, PyObject *args)
 {
 	short arg1 ;
 	short arg2 ;
@@ -7631,9 +6829,7 @@
 /* void setnurbsproperty long s float s */
 
 static PyObject *
-gl_setnurbsproperty(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setnurbsproperty(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	float arg2 ;
@@ -7649,9 +6845,7 @@
 /* void setpup long s long s long s */
 
 static PyObject *
-gl_setpup(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_setpup(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -7670,9 +6864,7 @@
 /* void smoothline long s */
 
 static PyObject *
-gl_smoothline(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_smoothline(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7685,9 +6877,7 @@
 /* void subpixel long s */
 
 static PyObject *
-gl_subpixel(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_subpixel(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7700,9 +6890,7 @@
 /* void swaptmesh */
 
 static PyObject *
-gl_swaptmesh(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_swaptmesh(PyObject *self, PyObject *args)
 {
 	swaptmesh( );
 	Py_INCREF(Py_None);
@@ -7712,9 +6900,7 @@
 /* long swinopen long s */
 
 static PyObject *
-gl_swinopen(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_swinopen(PyObject *self, PyObject *args)
 {
 	long retval;
 	long arg1 ;
@@ -7727,9 +6913,7 @@
 /* void v2f float s[2] */
 
 static PyObject *
-gl_v2f(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v2f(PyObject *self, PyObject *args)
 {
 	float arg1 [ 2 ] ;
 	if (!getifloatarray(args, 1, 0, 2 , arg1))
@@ -7742,9 +6926,7 @@
 /* void v2i long s[2] */
 
 static PyObject *
-gl_v2i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v2i(PyObject *self, PyObject *args)
 {
 	long arg1 [ 2 ] ;
 	if (!getilongarray(args, 1, 0, 2 , arg1))
@@ -7757,9 +6939,7 @@
 /* void v2s short s[2] */
 
 static PyObject *
-gl_v2s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v2s(PyObject *self, PyObject *args)
 {
 	short arg1 [ 2 ] ;
 	if (!getishortarray(args, 1, 0, 2 , arg1))
@@ -7772,9 +6952,7 @@
 /* void v3f float s[3] */
 
 static PyObject *
-gl_v3f(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v3f(PyObject *self, PyObject *args)
 {
 	float arg1 [ 3 ] ;
 	if (!getifloatarray(args, 1, 0, 3 , arg1))
@@ -7787,9 +6965,7 @@
 /* void v3i long s[3] */
 
 static PyObject *
-gl_v3i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v3i(PyObject *self, PyObject *args)
 {
 	long arg1 [ 3 ] ;
 	if (!getilongarray(args, 1, 0, 3 , arg1))
@@ -7802,9 +6978,7 @@
 /* void v3s short s[3] */
 
 static PyObject *
-gl_v3s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v3s(PyObject *self, PyObject *args)
 {
 	short arg1 [ 3 ] ;
 	if (!getishortarray(args, 1, 0, 3 , arg1))
@@ -7817,9 +6991,7 @@
 /* void v4f float s[4] */
 
 static PyObject *
-gl_v4f(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v4f(PyObject *self, PyObject *args)
 {
 	float arg1 [ 4 ] ;
 	if (!getifloatarray(args, 1, 0, 4 , arg1))
@@ -7832,9 +7004,7 @@
 /* void v4i long s[4] */
 
 static PyObject *
-gl_v4i(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v4i(PyObject *self, PyObject *args)
 {
 	long arg1 [ 4 ] ;
 	if (!getilongarray(args, 1, 0, 4 , arg1))
@@ -7847,9 +7017,7 @@
 /* void v4s short s[4] */
 
 static PyObject *
-gl_v4s(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v4s(PyObject *self, PyObject *args)
 {
 	short arg1 [ 4 ] ;
 	if (!getishortarray(args, 1, 0, 4 , arg1))
@@ -7862,9 +7030,7 @@
 /* void videocmd long s */
 
 static PyObject *
-gl_videocmd(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_videocmd(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7877,9 +7043,7 @@
 /* long windepth long s */
 
 static PyObject *
-gl_windepth(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_windepth(PyObject *self, PyObject *args)
 {
 	long retval;
 	long arg1 ;
@@ -7892,9 +7056,7 @@
 /* void wmpack long s */
 
 static PyObject *
-gl_wmpack(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_wmpack(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7907,9 +7069,7 @@
 /* void zdraw long s */
 
 static PyObject *
-gl_zdraw(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_zdraw(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7922,9 +7082,7 @@
 /* void zfunction long s */
 
 static PyObject *
-gl_zfunction(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_zfunction(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7937,9 +7095,7 @@
 /* void zsource long s */
 
 static PyObject *
-gl_zsource(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_zsource(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7952,9 +7108,7 @@
 /* void zwritemask long s */
 
 static PyObject *
-gl_zwritemask(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_zwritemask(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
@@ -7967,9 +7121,7 @@
 /* void v2d double s[2] */
 
 static PyObject *
-gl_v2d(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v2d(PyObject *self, PyObject *args)
 {
 	double arg1 [ 2 ] ;
 	if (!getidoublearray(args, 1, 0, 2 , arg1))
@@ -7982,9 +7134,7 @@
 /* void v3d double s[3] */
 
 static PyObject *
-gl_v3d(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v3d(PyObject *self, PyObject *args)
 {
 	double arg1 [ 3 ] ;
 	if (!getidoublearray(args, 1, 0, 3 , arg1))
@@ -7997,9 +7147,7 @@
 /* void v4d double s[4] */
 
 static PyObject *
-gl_v4d(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_v4d(PyObject *self, PyObject *args)
 {
 	double arg1 [ 4 ] ;
 	if (!getidoublearray(args, 1, 0, 4 , arg1))
@@ -8012,9 +7160,7 @@
 /* void pixmode long s long s */
 
 static PyObject *
-gl_pixmode(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_pixmode(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	long arg2 ;
@@ -8030,9 +7176,7 @@
 /* long qgetfd */
 
 static PyObject *
-gl_qgetfd(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_qgetfd(PyObject *self, PyObject *args)
 {
 	long retval;
 	retval = qgetfd( );
@@ -8042,9 +7186,7 @@
 /* void dither long s */
 
 static PyObject *
-gl_dither(self, args)
-	PyObject *self;
-	PyObject *args;
+gl_dither(PyObject *self, PyObject *args)
 {
 	long arg1 ;
 	if (!getilongarg(args, 1, 0, &arg1))
diff --git a/Modules/imgfile.c b/Modules/imgfile.c
index 5bab540..0b9dd54 100644
--- a/Modules/imgfile.c
+++ b/Modules/imgfile.c
@@ -46,8 +46,7 @@
 /* The error handler */
 
 static void
-imgfile_error(str)
-	char *str;
+imgfile_error(char *str)
 {
 	PyErr_SetString(ImgfileError, str);
 	error_called = 1;
@@ -59,8 +58,7 @@
    Make sure we raise an exception if we fail. */
 
 static IMAGE *
-imgfile_open(fname)
-	char *fname;
+imgfile_open(char *fname)
 {
 	IMAGE *image;
 	i_seterror(imgfile_error);
@@ -81,9 +79,7 @@
 }
 
 static PyObject *
-imgfile_ttob(self, args)
-	PyObject *self;
-PyObject *args;
+imgfile_ttob(PyObject *self, PyObject *args)
 {
 	int newval;
 	PyObject *rv;
@@ -96,9 +92,7 @@
 }
 
 static PyObject *
-imgfile_read(self, args)
-	PyObject *self;
-PyObject *args;
+imgfile_read(PyObject *self, PyObject *args)
 {
 	char *fname;
 	PyObject *rv;
@@ -190,9 +184,7 @@
 static int glob_width, glob_z, glob_ysize;
 
 static void
-xs_get(buf, y)
-	short *buf;
-int y;
+xs_get(short *buf, int y)
 {
 	if (top_to_bottom)
 		getrow(glob_image, buf, (glob_ysize-1-y), glob_z);
@@ -201,9 +193,7 @@
 }
 
 static void
-xs_put_c(buf, y)
-	short *buf;
-int y;
+xs_put_c(short *buf, int y)
 {
 	char *datap = (char *)glob_datap + y*glob_width;
 	int width = glob_width;
@@ -213,9 +203,7 @@
 }
 
 static void
-xs_put_0(buf, y)
-	short *buf;
-int y;
+xs_put_0(short *buf, int y)
 {
 	long *datap = glob_datap + y*glob_width;
 	int width = glob_width;
@@ -224,9 +212,7 @@
 		*datap++ = (*buf++) & 0xff;
 }
 static void
-xs_put_12(buf, y)
-	short *buf;
-int y;
+xs_put_12(short *buf, int y)
 {
 	long *datap = glob_datap + y*glob_width;
 	int width = glob_width;
@@ -236,13 +222,8 @@
 }
 
 static void
-xscale(image, xsize, ysize, zsize, datap, xnew, ynew, fmode, blur)
-	IMAGE *image;
-int xsize, ysize, zsize;
-long *datap;
-int xnew, ynew;
-int fmode;
-double blur;
+xscale(IMAGE *image, int xsize, int ysize, int zsize,
+       long *datap, int xnew, int ynew, int fmode, double blur)
 {
 	glob_image = image;
 	glob_datap = datap;
@@ -267,9 +248,7 @@
 
 
 static PyObject *
-imgfile_readscaled(self, args)
-	PyObject *self;
-PyObject *args;
+imgfile_readscaled(PyObject *self, PyObject *args)
 {
 	char *fname;
 	PyObject *rv;
@@ -415,9 +394,7 @@
 }
 
 static PyObject *
-imgfile_getsizes(self, args)
-	PyObject *self;
-PyObject *args;
+imgfile_getsizes(PyObject *self, PyObject *args)
 {
 	char *fname;
 	PyObject *rv;
@@ -434,9 +411,7 @@
 }
 
 static PyObject *
-imgfile_write(self, args)
-	PyObject *self;
-PyObject *args;
+imgfile_write(PyObject *self, PyObject *args)
 {
 	IMAGE *image;
 	char *fname;
