added high level event interface (requires stdwin patch)
diff --git a/Mac/Modules/macosmodule.c b/Mac/Modules/macosmodule.c
index 344be9a..833ef42 100644
--- a/Mac/Modules/macosmodule.c
+++ b/Mac/Modules/macosmodule.c
@@ -493,15 +493,111 @@
 	return Py_BuildValue("(hhl)", c.cmd, c.param1, c.param2);
 }
 
+/*----------------------------------------------------------------------*/
+/* STDWIN High Level Event interface */
+
+#include <EPPC.h>
+#include <Events.h>
+
+#ifdef USE_STDWIN
+
+extern void (*_w_high_level_event_proc)(EventRecord *);
+
+static PyObject *MacOS_HighLevelEventHandler = NULL;
+
+static void
+MacOS_HighLevelEventProc(EventRecord *erp)
+{
+	if (MacOS_HighLevelEventHandler != NULL) {
+		PyObject *args = Py_BuildValue("(s#)", (char *)erp, (int)sizeof(*erp));
+		PyObject *res;
+		if (args == NULL)
+			res = NULL;
+		else {
+			res = PyEval_CallObject(MacOS_HighLevelEventHandler, args);
+			Py_DECREF(args);
+		}
+		if (res == NULL) {
+			fprintf(stderr, "Exception in MacOS_HighLevelEventProc:\n");
+			PyErr_Print();
+		}
+		else
+			Py_DECREF(res);
+	}
+}
+
+static PyObject *
+MacOS_SetHighLevelEventHandler(self, args)
+	PyObject *self;
+	PyObject *args;
+{
+	PyObject *previous = MacOS_HighLevelEventHandler;
+	PyObject *next = NULL;
+	if (!PyArg_ParseTuple(args, "|O", &next))
+		return NULL;
+	if (next == Py_None)
+		next = NULL;
+	Py_INCREF(next);
+	MacOS_HighLevelEventHandler = next;
+	if (next == NULL)
+		_w_high_level_event_proc = NULL;
+	else
+		_w_high_level_event_proc = MacOS_HighLevelEventProc;
+	if (previous == NULL) {
+		Py_INCREF(Py_None);
+		previous = Py_None;
+	}
+	return previous;
+}
+
+#endif /* USE_STDWIN */
+
+static PyObject *
+MacOS_AcceptHighLevelEvent(self, args)
+	PyObject *self;
+	PyObject *args;
+{
+	TargetID sender;
+	unsigned long refcon;
+	Ptr buf;
+	unsigned long len;
+	OSErr err;
+	PyObject *res;
+	
+	buf = NULL;
+	len = 0;
+	err = AcceptHighLevelEvent(&sender, &refcon, buf, &len);
+	if (err == bufferIsSmall) {
+		buf = malloc(len);
+		if (buf == NULL)
+			return PyErr_NoMemory();
+		err = AcceptHighLevelEvent(&sender, &refcon, buf, &len);
+		if (err != noErr) {
+			free(buf);
+			return PyErr_Mac(MacOS_Error, (int)err);
+		}
+	}
+	else if (err != noErr)
+		return PyErr_Mac(MacOS_Error, (int)err);
+	res = Py_BuildValue("s#ls#",
+		(char *)&sender, (int)(sizeof sender), refcon, (char *)buf, (int)len);
+	free(buf);
+	return res;
+}
+
 static PyMethodDef MacOS_Methods[] = {
+	{"AcceptHighLevelEvent",	MacOS_AcceptHighLevelEvent, 1},
 	{"GetResource",			MacOS_GetResource, 1},
-	{"GetNamedResource",	MacOS_GetNamedResource, 1},
+	{"GetNamedResource",		MacOS_GetNamedResource, 1},
 	{"GetFileType",			MacOS_GetFileType, 1},
 	{"SetFileType",			MacOS_SetFileType, 1},
 	{"SndNewChannel",		MacOS_SndNewChannel, 1},
-	{"SndPlay",				MacOS_SndPlay, 1},
+	{"SndPlay",			MacOS_SndPlay, 1},
 	{"SndControl",			MacOS_SndControl, 1},
-	{NULL,					NULL}		 /* Sentinel */
+#ifdef USE_STDWIN
+	{"SetHighLevelEventHandler",	MacOS_SetHighLevelEventHandler, 1},
+#endif
+	{NULL,				NULL}		 /* Sentinel */
 };