Rather massive changes:
- Make the stuff run on Jack's machine (and hopefully all machines) in
  stead of Guido's only (addpack stuff)
- Use the Universal Headers in stead of the Think headers
- Fixed the test programs to use the new routine names
diff --git a/Mac/Modules/ae/AEmodule.c b/Mac/Modules/ae/AEmodule.c
index dc2fc7d..6bb9dfb 100644
--- a/Mac/Modules/ae/AEmodule.c
+++ b/Mac/Modules/ae/AEmodule.c
@@ -62,7 +62,7 @@
 
 static pascal Boolean AEIdleProc(EventRecord *theEvent, long *sleepTime, RgnHandle *mouseRgn)
 {
-	(void) PyMac_Idle();
+	PyMac_Yield();
 	return 0;
 }
 
@@ -164,55 +164,6 @@
 	return _res;
 }
 
-static PyObject *AEDesc_AEPutPtr(_self, _args)
-	AEDescObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	long index;
-	DescType typeCode;
-	char *dataPtr__in__;
-	long dataPtr__len__;
-	int dataPtr__in_len__;
-	if (!PyArg_ParseTuple(_args, "lO&s#",
-	                      &index,
-	                      PyMac_GetOSType, &typeCode,
-	                      &dataPtr__in__, &dataPtr__in_len__))
-		return NULL;
-	dataPtr__len__ = dataPtr__in_len__;
-	_err = AEPutPtr(&_self->ob_itself,
-	                index,
-	                typeCode,
-	                dataPtr__in__, dataPtr__len__);
-	if (_err != noErr) return PyMac_Error(_err);
-	Py_INCREF(Py_None);
-	_res = Py_None;
- dataPtr__error__: ;
-	return _res;
-}
-
-static PyObject *AEDesc_AEPutDesc(_self, _args)
-	AEDescObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	long index;
-	AEDesc theAEDesc;
-	if (!PyArg_ParseTuple(_args, "lO&",
-	                      &index,
-	                      AEDesc_Convert, &theAEDesc))
-		return NULL;
-	_err = AEPutDesc(&_self->ob_itself,
-	                 index,
-	                 &theAEDesc);
-	if (_err != noErr) return PyMac_Error(_err);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *AEDesc_AEGetNthPtr(_self, _args)
 	AEDescObject *_self;
 	PyObject *_args;
@@ -302,174 +253,6 @@
 	return _res;
 }
 
-static PyObject *AEDesc_AEDeleteItem(_self, _args)
-	AEDescObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	long index;
-	if (!PyArg_ParseTuple(_args, "l",
-	                      &index))
-		return NULL;
-	_err = AEDeleteItem(&_self->ob_itself,
-	                    index);
-	if (_err != noErr) return PyMac_Error(_err);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *AEDesc_AEPutKeyPtr(_self, _args)
-	AEDescObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	AEKeyword theAEKeyword;
-	DescType typeCode;
-	char *dataPtr__in__;
-	long dataPtr__len__;
-	int dataPtr__in_len__;
-	if (!PyArg_ParseTuple(_args, "O&O&s#",
-	                      PyMac_GetOSType, &theAEKeyword,
-	                      PyMac_GetOSType, &typeCode,
-	                      &dataPtr__in__, &dataPtr__in_len__))
-		return NULL;
-	dataPtr__len__ = dataPtr__in_len__;
-	_err = AEPutKeyPtr(&_self->ob_itself,
-	                   theAEKeyword,
-	                   typeCode,
-	                   dataPtr__in__, dataPtr__len__);
-	if (_err != noErr) return PyMac_Error(_err);
-	Py_INCREF(Py_None);
-	_res = Py_None;
- dataPtr__error__: ;
-	return _res;
-}
-
-static PyObject *AEDesc_AEPutKeyDesc(_self, _args)
-	AEDescObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	AEKeyword theAEKeyword;
-	AEDesc theAEDesc;
-	if (!PyArg_ParseTuple(_args, "O&O&",
-	                      PyMac_GetOSType, &theAEKeyword,
-	                      AEDesc_Convert, &theAEDesc))
-		return NULL;
-	_err = AEPutKeyDesc(&_self->ob_itself,
-	                    theAEKeyword,
-	                    &theAEDesc);
-	if (_err != noErr) return PyMac_Error(_err);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *AEDesc_AEGetKeyPtr(_self, _args)
-	AEDescObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	AEKeyword theAEKeyword;
-	DescType desiredType;
-	DescType typeCode;
-	char *dataPtr__out__;
-	long dataPtr__len__;
-	int dataPtr__in_len__;
-	if (!PyArg_ParseTuple(_args, "O&O&i",
-	                      PyMac_GetOSType, &theAEKeyword,
-	                      PyMac_GetOSType, &desiredType,
-	                      &dataPtr__in_len__))
-		return NULL;
-	if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
-	{
-		PyErr_NoMemory();
-		goto dataPtr__error__;
-	}
-	dataPtr__len__ = dataPtr__in_len__;
-	_err = AEGetKeyPtr(&_self->ob_itself,
-	                   theAEKeyword,
-	                   desiredType,
-	                   &typeCode,
-	                   dataPtr__out__, dataPtr__len__, &dataPtr__len__);
-	if (_err != noErr) return PyMac_Error(_err);
-	_res = Py_BuildValue("O&s#",
-	                     PyMac_BuildOSType, typeCode,
-	                     dataPtr__out__, (int)dataPtr__len__);
-	free(dataPtr__out__);
- dataPtr__error__: ;
-	return _res;
-}
-
-static PyObject *AEDesc_AEGetKeyDesc(_self, _args)
-	AEDescObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	AEKeyword theAEKeyword;
-	DescType desiredType;
-	AEDesc result;
-	if (!PyArg_ParseTuple(_args, "O&O&",
-	                      PyMac_GetOSType, &theAEKeyword,
-	                      PyMac_GetOSType, &desiredType))
-		return NULL;
-	_err = AEGetKeyDesc(&_self->ob_itself,
-	                    theAEKeyword,
-	                    desiredType,
-	                    &result);
-	if (_err != noErr) return PyMac_Error(_err);
-	_res = Py_BuildValue("O&",
-	                     AEDesc_New, &result);
-	return _res;
-}
-
-static PyObject *AEDesc_AESizeOfKeyDesc(_self, _args)
-	AEDescObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	AEKeyword theAEKeyword;
-	DescType typeCode;
-	Size dataSize;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      PyMac_GetOSType, &theAEKeyword))
-		return NULL;
-	_err = AESizeOfKeyDesc(&_self->ob_itself,
-	                       theAEKeyword,
-	                       &typeCode,
-	                       &dataSize);
-	if (_err != noErr) return PyMac_Error(_err);
-	_res = Py_BuildValue("O&l",
-	                     PyMac_BuildOSType, typeCode,
-	                     dataSize);
-	return _res;
-}
-
-static PyObject *AEDesc_AEDeleteKeyDesc(_self, _args)
-	AEDescObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	AEKeyword theAEKeyword;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      PyMac_GetOSType, &theAEKeyword))
-		return NULL;
-	_err = AEDeleteKeyDesc(&_self->ob_itself,
-	                       theAEKeyword);
-	if (_err != noErr) return PyMac_Error(_err);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *AEDesc_AEPutParamPtr(_self, _args)
 	AEDescObject *_self;
 	PyObject *_args;
@@ -817,19 +600,33 @@
 	PyObject *_res = NULL;
 	OSErr _err;
 	AppleEvent reply;
-	AEEventHandlerUPP dispatcher__proc__ = upp_GenericEventHandler;
-	PyObject *dispatcher;
-	if (!PyArg_ParseTuple(_args, "O&O",
+	long handlerRefcon;
+	if (!PyArg_ParseTuple(_args, "O&l",
 	                      AEDesc_Convert, &reply,
-	                      &dispatcher))
+	                      &handlerRefcon))
 		return NULL;
 	_err = AEResumeTheCurrentEvent(&_self->ob_itself,
 	                               &reply,
-	                               dispatcher__proc__, (long)dispatcher);
+	                               upp_GenericEventHandler,
+	                               handlerRefcon);
 	if (_err != noErr) return PyMac_Error(_err);
 	Py_INCREF(Py_None);
 	_res = Py_None;
-	Py_INCREF(dispatcher); /* XXX leak, but needed */
+	return _res;
+}
+
+static PyObject *AEDesc_AEGetTheCurrentEvent(_self, _args)
+	AEDescObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_err = AEGetTheCurrentEvent(&_self->ob_itself);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
 	return _res;
 }
 
@@ -855,30 +652,12 @@
 	 "() -> (AEDesc result)"},
 	{"AECountItems", (PyCFunction)AEDesc_AECountItems, 1,
 	 "() -> (long theCount)"},
-	{"AEPutPtr", (PyCFunction)AEDesc_AEPutPtr, 1,
-	 "(long index, DescType typeCode, Buffer dataPtr) -> None"},
-	{"AEPutDesc", (PyCFunction)AEDesc_AEPutDesc, 1,
-	 "(long index, AEDesc theAEDesc) -> None"},
 	{"AEGetNthPtr", (PyCFunction)AEDesc_AEGetNthPtr, 1,
 	 "(long index, DescType desiredType, Buffer dataPtr) -> (AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr)"},
 	{"AEGetNthDesc", (PyCFunction)AEDesc_AEGetNthDesc, 1,
 	 "(long index, DescType desiredType) -> (AEKeyword theAEKeyword, AEDesc result)"},
 	{"AESizeOfNthItem", (PyCFunction)AEDesc_AESizeOfNthItem, 1,
 	 "(long index) -> (DescType typeCode, Size dataSize)"},
-	{"AEDeleteItem", (PyCFunction)AEDesc_AEDeleteItem, 1,
-	 "(long index) -> None"},
-	{"AEPutKeyPtr", (PyCFunction)AEDesc_AEPutKeyPtr, 1,
-	 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
-	{"AEPutKeyDesc", (PyCFunction)AEDesc_AEPutKeyDesc, 1,
-	 "(AEKeyword theAEKeyword, AEDesc theAEDesc) -> None"},
-	{"AEGetKeyPtr", (PyCFunction)AEDesc_AEGetKeyPtr, 1,
-	 "(AEKeyword theAEKeyword, DescType desiredType, Buffer dataPtr) -> (DescType typeCode, Buffer dataPtr)"},
-	{"AEGetKeyDesc", (PyCFunction)AEDesc_AEGetKeyDesc, 1,
-	 "(AEKeyword theAEKeyword, DescType desiredType) -> (AEDesc result)"},
-	{"AESizeOfKeyDesc", (PyCFunction)AEDesc_AESizeOfKeyDesc, 1,
-	 "(AEKeyword theAEKeyword) -> (DescType typeCode, Size dataSize)"},
-	{"AEDeleteKeyDesc", (PyCFunction)AEDesc_AEDeleteKeyDesc, 1,
-	 "(AEKeyword theAEKeyword) -> None"},
 	{"AEPutParamPtr", (PyCFunction)AEDesc_AEPutParamPtr, 1,
 	 "(AEKeyword theAEKeyword, DescType typeCode, Buffer dataPtr) -> None"},
 	{"AEPutParamDesc", (PyCFunction)AEDesc_AEPutParamDesc, 1,
@@ -908,7 +687,9 @@
 	{"AESuspendTheCurrentEvent", (PyCFunction)AEDesc_AESuspendTheCurrentEvent, 1,
 	 "() -> None"},
 	{"AEResumeTheCurrentEvent", (PyCFunction)AEDesc_AEResumeTheCurrentEvent, 1,
-	 "(AppleEvent reply, EventHandler dispatcher) -> None"},
+	 "(AppleEvent reply, long handlerRefcon) -> None"},
+	{"AEGetTheCurrentEvent", (PyCFunction)AEDesc_AEGetTheCurrentEvent, 1,
+	 "() -> None"},
 	{"AESetTheCurrentEvent", (PyCFunction)AEDesc_AESetTheCurrentEvent, 1,
 	 "() -> None"},
 	{NULL, NULL, 0}
@@ -1040,6 +821,76 @@
 	return _res;
 }
 
+static PyObject *AE_AEPutPtr(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	AEDescList theAEDescList;
+	long index;
+	DescType typeCode;
+	char *dataPtr__in__;
+	long dataPtr__len__;
+	int dataPtr__in_len__;
+	if (!PyArg_ParseTuple(_args, "lO&s#",
+	                      &index,
+	                      PyMac_GetOSType, &typeCode,
+	                      &dataPtr__in__, &dataPtr__in_len__))
+		return NULL;
+	dataPtr__len__ = dataPtr__in_len__;
+	_err = AEPutPtr(&theAEDescList,
+	                index,
+	                typeCode,
+	                dataPtr__in__, dataPtr__len__);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("O&",
+	                     AEDesc_New, &theAEDescList);
+ dataPtr__error__: ;
+	return _res;
+}
+
+static PyObject *AE_AEPutDesc(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	AEDescList theAEDescList;
+	long index;
+	AEDesc theAEDesc;
+	if (!PyArg_ParseTuple(_args, "lO&",
+	                      &index,
+	                      AEDesc_Convert, &theAEDesc))
+		return NULL;
+	_err = AEPutDesc(&theAEDescList,
+	                 index,
+	                 &theAEDesc);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("O&",
+	                     AEDesc_New, &theAEDescList);
+	return _res;
+}
+
+static PyObject *AE_AEDeleteItem(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	AEDescList theAEDescList;
+	long index;
+	if (!PyArg_ParseTuple(_args, "l",
+	                      &index))
+		return NULL;
+	_err = AEDeleteItem(&theAEDescList,
+	                    index);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("O&",
+	                     AEDesc_New, &theAEDescList);
+	return _res;
+}
+
 static PyObject *AE_AECreateAppleEvent(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1088,22 +939,6 @@
 	return _res;
 }
 
-static PyObject *AE_AEGetTheCurrentEvent(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	OSErr _err;
-	AppleEvent theAppleEvent;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	_err = AEGetTheCurrentEvent(&theAppleEvent);
-	if (_err != noErr) return PyMac_Error(_err);
-	_res = Py_BuildValue("O&",
-	                     AEDesc_New, &theAppleEvent);
-	return _res;
-}
-
 static PyObject *AE_AEGetInteractionAllowed(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1164,21 +999,20 @@
 	OSErr _err;
 	AEEventClass theAEEventClass;
 	AEEventID theAEEventID;
-	AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
-	PyObject *handler;
-	if (!PyArg_ParseTuple(_args, "O&O&O",
+	long handlerRefcon;
+	if (!PyArg_ParseTuple(_args, "O&O&l",
 	                      PyMac_GetOSType, &theAEEventClass,
 	                      PyMac_GetOSType, &theAEEventID,
-	                      &handler))
+	                      &handlerRefcon))
 		return NULL;
 	_err = AEInstallEventHandler(theAEEventClass,
 	                             theAEEventID,
-	                             handler__proc__, (long)handler,
+	                             upp_GenericEventHandler,
+	                             handlerRefcon,
 	                             0);
 	if (_err != noErr) return PyMac_Error(_err);
 	Py_INCREF(Py_None);
 	_res = Py_None;
-	Py_INCREF(handler); /* XXX leak, but needed */
 	return _res;
 }
 
@@ -1230,12 +1064,16 @@
 	 "(DescType typeCode, Buffer dataPtr, DescType toType) -> (AEDesc result)"},
 	{"AECreateList", (PyCFunction)AE_AECreateList, 1,
 	 "(Buffer factoringPtr, Boolean isRecord) -> (AEDescList resultList)"},
+	{"AEPutPtr", (PyCFunction)AE_AEPutPtr, 1,
+	 "(long index, DescType typeCode, Buffer dataPtr) -> (AEDescList theAEDescList)"},
+	{"AEPutDesc", (PyCFunction)AE_AEPutDesc, 1,
+	 "(long index, AEDesc theAEDesc) -> (AEDescList theAEDescList)"},
+	{"AEDeleteItem", (PyCFunction)AE_AEDeleteItem, 1,
+	 "(long index) -> (AEDescList theAEDescList)"},
 	{"AECreateAppleEvent", (PyCFunction)AE_AECreateAppleEvent, 1,
 	 "(AEEventClass theAEEventClass, AEEventID theAEEventID, AEAddressDesc target, short returnID, long transactionID) -> (AppleEvent result)"},
 	{"AEProcessAppleEvent", (PyCFunction)AE_AEProcessAppleEvent, 1,
 	 "(EventRecord theEventRecord) -> None"},
-	{"AEGetTheCurrentEvent", (PyCFunction)AE_AEGetTheCurrentEvent, 1,
-	 "() -> (AppleEvent theAppleEvent)"},
 	{"AEGetInteractionAllowed", (PyCFunction)AE_AEGetInteractionAllowed, 1,
 	 "() -> (AEInteractAllowed level)"},
 	{"AESetInteractionAllowed", (PyCFunction)AE_AESetInteractionAllowed, 1,
@@ -1243,7 +1081,7 @@
 	{"AEInteractWithUser", (PyCFunction)AE_AEInteractWithUser, 1,
 	 "(long timeOutInTicks) -> None"},
 	{"AEInstallEventHandler", (PyCFunction)AE_AEInstallEventHandler, 1,
-	 "(AEEventClass theAEEventClass, AEEventID theAEEventID, EventHandler handler) -> None"},
+	 "(AEEventClass theAEEventClass, AEEventID theAEEventID, long handlerRefcon) -> None"},
 	{"AERemoveEventHandler", (PyCFunction)AE_AERemoveEventHandler, 1,
 	 "(AEEventClass theAEEventClass, AEEventID theAEEventID) -> None"},
 	{"AEManagerInfo", (PyCFunction)AE_AEManagerInfo, 1,