First step in porting MacPython modules to OSX/unix: break all references between modules except for the obj_New() and obj_Convert() routines, the PyArg_Parse and Py_BuildValue helpers.

And these can now be vectored through glue routines (by defining USE_TOOLBOX_OBJECT_GLUE) which will do the necessary imports, whereupon the module's init routine will tell the glue routine about the real conversion routine address and everything is fine again.
diff --git a/Mac/Modules/qd/Qdmodule.c b/Mac/Modules/qd/Qdmodule.c
index 12f44f4..9c3280e 100644
--- a/Mac/Modules/qd/Qdmodule.c
+++ b/Mac/Modules/qd/Qdmodule.c
@@ -10,6 +10,22 @@
 
 #include <QuickDraw.h>
 
+#ifdef USE_TOOLBOX_OBJECT_GLUE
+extern PyObject *_GrafObj_New(GrafPtr);
+extern int _GrafObj_Convert(PyObject *, GrafPtr *);
+extern PyObject *_BMObj_New(BitMapPtr);
+extern int _BMObj_Convert(PyObject *, BitMapPtr *);
+extern PyObject *_QdRGB_New(RGBColorPtr);
+extern int _QdRGB_Convert(PyObject *, RGBColorPtr *);
+
+#define GrafObj_New _GrafObj_New
+#define GrafObj_Convert _GrafObj_Convert
+#define BMObj_New _BMObj_New
+#define BMObj_Convert _BMObj_Convert
+#define QdRGB_New _QdRGB_New
+#define QdRGB_Convert _QdRGB_Convert
+#endif
+
 #if !ACCESSOR_CALLS_ARE_FUNCTIONS
 #define GetPortBitMapForCopyBits(port) ((const struct BitMap *)&((GrafPort *)(port))->portBits)
 #define GetPortPixMap(port) (((CGrafPtr)(port))->portPixMap)
@@ -144,6 +160,16 @@
 	PyObject *v;
 	GrafPtr *p_itself;
 {
+#if 1
+	{
+		WindowRef win;
+		if (WinObj_Convert(v, &win) && v) {
+			*p_itself = (GrafPtr)GetWindowPort(win);
+			return 1;
+		}
+		PyErr_Clear();
+	}
+#else
 	if (DlgObj_Check(v)) {
 		DialogRef dlg = (DialogRef)((GrafPortObject *)v)->ob_itself;
 		*p_itself = (GrafPtr)GetWindowPort(GetDialogWindow(dlg));
@@ -154,6 +180,7 @@
 		*p_itself = (GrafPtr)GetWindowPort(win);
 		return 1;
 	}
+#endif
 	if (!GrafObj_Check(v))
 	{
 		PyErr_SetString(PyExc_TypeError, "GrafPort required");
@@ -6194,6 +6221,13 @@
 
 
 
+		PyMac_INIT_TOOLBOX_OBJECT_NEW(BMObj_New);
+		PyMac_INIT_TOOLBOX_OBJECT_CONVERT(BMObj_Convert);
+		PyMac_INIT_TOOLBOX_OBJECT_NEW(GrafObj_New);
+		PyMac_INIT_TOOLBOX_OBJECT_CONVERT(GrafObj_Convert);
+		PyMac_INIT_TOOLBOX_OBJECT_NEW(QdRGB_New);
+		PyMac_INIT_TOOLBOX_OBJECT_CONVERT(QdRGB_Convert);
+
 
 	m = Py_InitModule("Qd", Qd_methods);
 	d = PyModule_GetDict(m);