summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>1996-01-29 15:44:03 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>1996-01-29 15:44:03 (GMT)
commitbdd0747193e9e08d94e146f65254a885bdb6178b (patch)
tree09c2bdf79a933af1a016e394b3e3470f61e0c0ee
parent05a6d8f4c78db6dab8628f01fcf53c7855caf1d5 (diff)
downloadcpython-bdd0747193e9e08d94e146f65254a885bdb6178b.zip
cpython-bdd0747193e9e08d94e146f65254a885bdb6178b.tar.gz
cpython-bdd0747193e9e08d94e146f65254a885bdb6178b.tar.bz2
Fixed access to Quickdraw globals. Unfortunately, they now have to be
accessed as Qd.qd.xxxx
-rw-r--r--Mac/Modules/qd/Qdmodule.c99
-rw-r--r--Mac/Modules/qd/qdsupport.py66
2 files changed, 125 insertions, 40 deletions
diff --git a/Mac/Modules/qd/Qdmodule.c b/Mac/Modules/qd/Qdmodule.c
index 54176f3..88cddaf 100644
--- a/Mac/Modules/qd/Qdmodule.c
+++ b/Mac/Modules/qd/Qdmodule.c
@@ -329,6 +329,81 @@ PyTypeObject BitMap_Type = {
/* --------------------- End object type BitMap --------------------- */
+/* ------------------ Object type QDGlobalsAccess ------------------- */
+
+staticforward PyTypeObject QDGlobalsAccess_Type;
+
+#define QDGA_Check(x) ((x)->ob_type == &QDGlobalsAccess_Type)
+
+typedef struct QDGlobalsAccessObject {
+ PyObject_HEAD
+} QDGlobalsAccessObject;
+
+static PyObject *QDGA_New()
+{
+ QDGlobalsAccessObject *it;
+ it = PyObject_NEW(QDGlobalsAccessObject, &QDGlobalsAccess_Type);
+ if (it == NULL) return NULL;
+ return (PyObject *)it;
+}
+
+static void QDGA_dealloc(self)
+ QDGlobalsAccessObject *self;
+{
+ PyMem_DEL(self);
+}
+
+static PyMethodDef QDGA_methods[] = {
+ {NULL, NULL, 0}
+};
+
+static PyMethodChain QDGA_chain = { QDGA_methods, NULL };
+
+static PyObject *QDGA_getattr(self, name)
+ QDGlobalsAccessObject *self;
+ char *name;
+{
+
+ if ( strcmp(name, "arrow") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.arrow, sizeof(qd.arrow));
+ if ( strcmp(name, "black") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.black, sizeof(qd.black));
+ if ( strcmp(name, "white") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.white, sizeof(qd.white));
+ if ( strcmp(name, "gray") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.gray, sizeof(qd.gray));
+ if ( strcmp(name, "ltGray") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.ltGray, sizeof(qd.ltGray));
+ if ( strcmp(name, "dkGray") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.dkGray, sizeof(qd.dkGray));
+ if ( strcmp(name, "screenBits") == 0 )
+ return BMObj_New(&qd.screenBits);
+ if ( strcmp(name, "thePort") == 0 )
+ return GrafObj_New(qd.thePort);
+ if ( strcmp(name, "randSeed") == 0 )
+ return Py_BuildValue("l", &qd.randSeed);
+
+ return Py_FindMethodInChain(&QDGA_chain, (PyObject *)self, name);
+}
+
+#define QDGA_setattr NULL
+
+staticforward PyTypeObject QDGlobalsAccess_Type = {
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, /*ob_size*/
+ "QDGlobalsAccess", /*tp_name*/
+ sizeof(QDGlobalsAccessObject), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ /* methods */
+ (destructor) QDGA_dealloc, /*tp_dealloc*/
+ 0, /*tp_print*/
+ (getattrfunc) QDGA_getattr, /*tp_getattr*/
+ (setattrfunc) QDGA_setattr, /*tp_setattr*/
+};
+
+/* ---------------- End object type QDGlobalsAccess ----------------- */
+
+
static PyObject *Qd_SetPort(_self, _args)
PyObject *_self;
PyObject *_args;
@@ -3855,26 +3930,10 @@ void initQd()
{
PyObject *o;
-
- o = PyString_FromStringAndSize((char *)&qd.arrow, sizeof(qd.arrow));
- if (o == NULL || PyDict_SetItemString(d, "arrow", o) != 0)
- Py_FatalError("can't initialize Qd.arrow");
- o = PyString_FromStringAndSize((char *)&qd.black, sizeof(qd.black));
- if (o == NULL || PyDict_SetItemString(d, "black", o) != 0)
- Py_FatalError("can't initialize Qd.black");
- o = PyString_FromStringAndSize((char *)&qd.white, sizeof(qd.white));
- if (o == NULL || PyDict_SetItemString(d, "white", o) != 0)
- Py_FatalError("can't initialize Qd.white");
- o = PyString_FromStringAndSize((char *)&qd.gray, sizeof(qd.gray));
- if (o == NULL || PyDict_SetItemString(d, "gray", o) != 0)
- Py_FatalError("can't initialize Qd.gray");
- o = PyString_FromStringAndSize((char *)&qd.ltGray, sizeof(qd.ltGray));
- if (o == NULL || PyDict_SetItemString(d, "ltGray", o) != 0)
- Py_FatalError("can't initialize Qd.ltGray");
- o = PyString_FromStringAndSize((char *)&qd.dkGray, sizeof(qd.dkGray));
- if (o == NULL || PyDict_SetItemString(d, "dkGray", o) != 0)
- Py_FatalError("can't initialize Qd.dkGray");
- /* thePort, screenBits and randSeed still missing... */
+
+ o = QDGA_New();
+ if (o == NULL || PyDict_SetItemString(d, "qd", o) != 0)
+ Py_FatalError("can't initialize Qd.qd");
}
diff --git a/Mac/Modules/qd/qdsupport.py b/Mac/Modules/qd/qdsupport.py
index 39d9895..203f8c0 100644
--- a/Mac/Modules/qd/qdsupport.py
+++ b/Mac/Modules/qd/qdsupport.py
@@ -101,26 +101,10 @@ PyObject *QdFI_New(itself)
variablestuff = """
{
PyObject *o;
-
- o = PyString_FromStringAndSize((char *)&qd.arrow, sizeof(qd.arrow));
- if (o == NULL || PyDict_SetItemString(d, "arrow", o) != 0)
- Py_FatalError("can't initialize Qd.arrow");
- o = PyString_FromStringAndSize((char *)&qd.black, sizeof(qd.black));
- if (o == NULL || PyDict_SetItemString(d, "black", o) != 0)
- Py_FatalError("can't initialize Qd.black");
- o = PyString_FromStringAndSize((char *)&qd.white, sizeof(qd.white));
- if (o == NULL || PyDict_SetItemString(d, "white", o) != 0)
- Py_FatalError("can't initialize Qd.white");
- o = PyString_FromStringAndSize((char *)&qd.gray, sizeof(qd.gray));
- if (o == NULL || PyDict_SetItemString(d, "gray", o) != 0)
- Py_FatalError("can't initialize Qd.gray");
- o = PyString_FromStringAndSize((char *)&qd.ltGray, sizeof(qd.ltGray));
- if (o == NULL || PyDict_SetItemString(d, "ltGray", o) != 0)
- Py_FatalError("can't initialize Qd.ltGray");
- o = PyString_FromStringAndSize((char *)&qd.dkGray, sizeof(qd.dkGray));
- if (o == NULL || PyDict_SetItemString(d, "dkGray", o) != 0)
- Py_FatalError("can't initialize Qd.dkGray");
- /* thePort, screenBits and randSeed still missing... */
+
+ o = QDGA_New();
+ if (o == NULL || PyDict_SetItemString(d, "qd", o) != 0)
+ Py_FatalError("can't initialize Qd.qd");
}
"""
@@ -251,6 +235,46 @@ class MyBMObjectDefinition(GlobalObjectDefinition):
if ( strcmp(name, "pixmap_data") == 0 )
return PyString_FromStringAndSize((char *)self->ob_itself, sizeof(PixMap));
""")
+
+# This object is instanciated once, and will access qd globals.
+class QDGlobalsAccessObjectDefinition(ObjectDefinition):
+ def outputStructMembers(self):
+ pass
+ def outputNew(self):
+ Output()
+ Output("%sPyObject *%s_New()", self.static, self.prefix)
+ OutLbrace()
+ Output("%s *it;", self.objecttype)
+ Output("it = PyObject_NEW(%s, &%s);", self.objecttype, self.typename)
+ Output("if (it == NULL) return NULL;")
+ Output("return (PyObject *)it;")
+ OutRbrace()
+ def outputConvert(self):
+ pass
+ def outputCleanupStructMembers(self):
+ pass
+
+ def outputGetattrHook(self):
+ Output("""
+ if ( strcmp(name, "arrow") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.arrow, sizeof(qd.arrow));
+ if ( strcmp(name, "black") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.black, sizeof(qd.black));
+ if ( strcmp(name, "white") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.white, sizeof(qd.white));
+ if ( strcmp(name, "gray") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.gray, sizeof(qd.gray));
+ if ( strcmp(name, "ltGray") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.ltGray, sizeof(qd.ltGray));
+ if ( strcmp(name, "dkGray") == 0 )
+ return PyString_FromStringAndSize((char *)&qd.dkGray, sizeof(qd.dkGray));
+ if ( strcmp(name, "screenBits") == 0 )
+ return BMObj_New(&qd.screenBits);
+ if ( strcmp(name, "thePort") == 0 )
+ return GrafObj_New(qd.thePort);
+ if ( strcmp(name, "randSeed") == 0 )
+ return Py_BuildValue("l", &qd.randSeed);
+ """)
# Create the generator groups and link them
module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff, variablestuff)
@@ -262,6 +286,8 @@ gr_object = MyGRObjectDefinition("GrafPort", "GrafObj", "GrafPtr")
module.addobject(gr_object)
bm_object = MyBMObjectDefinition("BitMap", "BMObj", "BitMapPtr")
module.addobject(bm_object)
+qd_object = QDGlobalsAccessObjectDefinition("QDGlobalsAccess", "QDGA", "XXXX")
+module.addobject(qd_object)
# Create the generator classes used to populate the lists