Accessor functions for regions and such expect an existing region as parameter. Fixed for grafport attribute access.
Got GetPortBitMapForCopyBits() and port.portBits to work.
diff --git a/Mac/Modules/qd/Qdmodule.c b/Mac/Modules/qd/Qdmodule.c
index 1ca8647..7c9d49b 100644
--- a/Mac/Modules/qd/Qdmodule.c
+++ b/Mac/Modules/qd/Qdmodule.c
@@ -255,10 +255,8 @@
 #else
 
 			{	CGrafPtr itself_color = (CGrafPtr)self->ob_itself;
-				/*
 				if ( strcmp(name, "portBits") == 0 )
-					return BMObj_New((BitMapPtr)GetPortPixMap(itself_color));
-				*/
+					return BMObj_New((BitMapPtr)GetPortBitMapForCopyBits(itself_color));
 				if ( strcmp(name, "chExtra") == 0 )
 					return Py_BuildValue("h", GetPortChExtra(itself_color));
 				if ( strcmp(name, "pnLocHFrac") == 0 )
@@ -276,12 +274,12 @@
 					return Py_BuildValue("O&", QdRGB_New, GetPortBackColor(itself_color, &c));
 				}
 				if ( strcmp(name, "pnPixPat") == 0 ) {
-					PixPatHandle h=0;
+					PixPatHandle h=NewPixPat(); /* XXXX wrong dispose routine */
 					
 					return Py_BuildValue("O&", ResObj_New, (Handle)GetPortPenPixPat(itself_color, h));
 				}
 				if ( strcmp(name, "fillPixPat") == 0 ) {
-					PixPatHandle h=0;
+					PixPatHandle h=NewPixPat(); /* XXXX wrong dispose routine */
 					return Py_BuildValue("O&", ResObj_New, (Handle)GetPortFillPixPat(itself_color, h));
 				}
 				if ( strcmp(name, "portRect") == 0 ) {
@@ -289,11 +287,11 @@
 					return Py_BuildValue("O&", PyMac_BuildRect, GetPortBounds(itself_color, &r));
 				}
 				if ( strcmp(name, "visRgn") == 0 ) {
-					RgnHandle h=0;
+					RgnHandle h=NewRgn(); /* XXXX wrong dispose routine */
 					return Py_BuildValue("O&", ResObj_New, (Handle)GetPortVisibleRegion(itself_color, h));
 				}
 				if ( strcmp(name, "clipRgn") == 0 ) {
-					RgnHandle h=0;
+					RgnHandle h=NewRgn(); /* XXXX wrong dispose routine */
 					return Py_BuildValue("O&", ResObj_New, (Handle)GetPortClipRegion(itself_color, h));
 				}
 				if ( strcmp(name, "pnLoc") == 0 ) {
@@ -3858,6 +3856,22 @@
 	return _res;
 }
 
+static PyObject *Qd_GetPortBitMapForCopyBits(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	const BitMap * _rv;
+	CGrafPtr port;
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      GrafObj_Convert, &port))
+		return NULL;
+	_rv = GetPortBitMapForCopyBits(port);
+	_res = Py_BuildValue("O&",
+	                     BMObj_New, _rv);
+	return _res;
+}
+
 static PyObject *Qd_GetPortBounds(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -5931,6 +5945,8 @@
 	 "(Fixed slope) -> (short _rv)"},
 	{"GetPortPixMap", (PyCFunction)Qd_GetPortPixMap, 1,
 	 "(CGrafPtr port) -> (PixMapHandle _rv)"},
+	{"GetPortBitMapForCopyBits", (PyCFunction)Qd_GetPortBitMapForCopyBits, 1,
+	 "(CGrafPtr port) -> (const BitMap * _rv)"},
 	{"GetPortBounds", (PyCFunction)Qd_GetPortBounds, 1,
 	 "(CGrafPtr port) -> (Rect rect)"},
 	{"GetPortForeColor", (PyCFunction)Qd_GetPortForeColor, 1,
diff --git a/Mac/Modules/qd/qdscan.py b/Mac/Modules/qd/qdscan.py
index 6711ac2..6336ba8 100644
--- a/Mac/Modules/qd/qdscan.py
+++ b/Mac/Modules/qd/qdscan.py
@@ -100,7 +100,6 @@
 			'GetPortHWND',
 			'GetHWNDPort',
 			'GetPICTFromDIB',
-			'GetPortBitMapForCopyBits', # Something funny in the declaration
 			
 			'HandleToRgn', # Funny signature
 
diff --git a/Mac/Modules/qd/qdsupport.py b/Mac/Modules/qd/qdsupport.py
index 80d1709..b255110 100644
--- a/Mac/Modules/qd/qdsupport.py
+++ b/Mac/Modules/qd/qdsupport.py
@@ -45,6 +45,7 @@
 CGrafPtr = OpaqueByValueType("CGrafPtr", "GrafObj")
 GrafPtr = OpaqueByValueType("GrafPtr", "GrafObj")
 BitMap_ptr = OpaqueByValueType("BitMapPtr", "BMObj")
+const_BitMap_ptr = OpaqueByValueType("const BitMap *", "BMObj")
 BitMap = OpaqueType("BitMap", "BMObj")
 RGBColor = OpaqueType('RGBColor', 'QdRGB')
 RGBColor_ptr = RGBColor
@@ -284,10 +285,8 @@
 		Output("#else")
 		Output("""
 		{	CGrafPtr itself_color = (CGrafPtr)self->ob_itself;
-			/*
 			if ( strcmp(name, "portBits") == 0 )
-				return BMObj_New((BitMapPtr)GetPortPixMap(itself_color));
-			*/
+				return BMObj_New((BitMapPtr)GetPortBitMapForCopyBits(itself_color));
 			if ( strcmp(name, "chExtra") == 0 )
 				return Py_BuildValue("h", GetPortChExtra(itself_color));
 			if ( strcmp(name, "pnLocHFrac") == 0 )
@@ -305,12 +304,12 @@
 				return Py_BuildValue("O&", QdRGB_New, GetPortBackColor(itself_color, &c));
 			}
 			if ( strcmp(name, "pnPixPat") == 0 ) {
-				PixPatHandle h=0;
+				PixPatHandle h=NewPixPat(); /* XXXX wrong dispose routine */
 				
 				return Py_BuildValue("O&", ResObj_New, (Handle)GetPortPenPixPat(itself_color, h));
 			}
 			if ( strcmp(name, "fillPixPat") == 0 ) {
-				PixPatHandle h=0;
+				PixPatHandle h=NewPixPat(); /* XXXX wrong dispose routine */
 				return Py_BuildValue("O&", ResObj_New, (Handle)GetPortFillPixPat(itself_color, h));
 			}
 			if ( strcmp(name, "portRect") == 0 ) {
@@ -318,11 +317,11 @@
 				return Py_BuildValue("O&", PyMac_BuildRect, GetPortBounds(itself_color, &r));
 			}
 			if ( strcmp(name, "visRgn") == 0 ) {
-				RgnHandle h=0;
+				RgnHandle h=NewRgn(); /* XXXX wrong dispose routine */
 				return Py_BuildValue("O&", ResObj_New, (Handle)GetPortVisibleRegion(itself_color, h));
 			}
 			if ( strcmp(name, "clipRgn") == 0 ) {
-				RgnHandle h=0;
+				RgnHandle h=NewRgn(); /* XXXX wrong dispose routine */
 				return Py_BuildValue("O&", ResObj_New, (Handle)GetPortClipRegion(itself_color, h));
 			}
 			if ( strcmp(name, "pnLoc") == 0 ) {