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.
This commit is contained in:
Jack Jansen 2001-05-17 21:58:34 +00:00
parent 99f9baa331
commit 0e04eecdbf
26 changed files with 463 additions and 2 deletions

View file

@ -11,6 +11,14 @@
#include <AppleEvents.h>
#include <AEObjects.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_AEDesc_New(AEDesc *);
extern int _AEDesc_Convert(PyObject *, AEDesc *);
#define AEDesc_New _AEDesc_New
#define AEDesc_Convert _AEDesc_Convert
#endif
static pascal OSErr GenericEventHandler(); /* Forward */
AEEventHandlerUPP upp_GenericEventHandler;
@ -1331,6 +1339,8 @@ void initAE()
upp_AEIdleProc = NewAEIdleProc(AEIdleProc);
upp_GenericEventHandler = NewAEEventHandlerProc(GenericEventHandler);
PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(AEDesc_Convert);
m = Py_InitModule("AE", AE_methods);

View file

@ -85,6 +85,14 @@ includestuff = includestuff + """
#include <AppleEvents.h>
#include <AEObjects.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_AEDesc_New(AEDesc *);
extern int _AEDesc_Convert(PyObject *, AEDesc *);
#define AEDesc_New _AEDesc_New
#define AEDesc_Convert _AEDesc_Convert
#endif
static pascal OSErr GenericEventHandler(); /* Forward */
AEEventHandlerUPP upp_GenericEventHandler;
@ -138,6 +146,8 @@ GenericEventHandler(const AppleEvent *request, AppleEvent *reply, unsigned long
initstuff = initstuff + """
upp_AEIdleProc = NewAEIdleProc(AEIdleProc);
upp_GenericEventHandler = NewAEEventHandlerProc(GenericEventHandler);
PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(AEDesc_Convert);
"""
module = MacModule('AE', 'AE', includestuff, finalstuff, initstuff)

View file

@ -9,6 +9,17 @@
#include "pymactoolbox.h"
#include <Components.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_CmpObj_New(Component);
extern int _CmpObj_Convert(PyObject *, Component *);
extern PyObject *_CmpInstObj_New(ComponentInstance);
extern int _CmpInstObj_Convert(PyObject *, ComponentInstance *);
#define CmpObj_New _CmpObj_New
#define CmpObj_Convert _CmpObj_Convert
#define CmpInstObj_New _CmpInstObj_New
#define CmpInstObj_Convert _CmpInstObj_Convert
#endif
/*
** Parse/generate ComponentDescriptor records
@ -825,6 +836,11 @@ void initCm()
PyMac_INIT_TOOLBOX_OBJECT_NEW(CmpObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CmpObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(CmpInstObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CmpInstObj_Convert);
m = Py_InitModule("Cm", Cm_methods);
d = PyModule_GetDict(m);

View file

@ -22,6 +22,17 @@ from macsupport import *
includestuff = includestuff + """
#include <%s>""" % MACHEADERFILE + """
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_CmpObj_New(Component);
extern int _CmpObj_Convert(PyObject *, Component *);
extern PyObject *_CmpInstObj_New(ComponentInstance);
extern int _CmpInstObj_Convert(PyObject *, ComponentInstance *);
#define CmpObj_New _CmpObj_New
#define CmpObj_Convert _CmpObj_Convert
#define CmpInstObj_New _CmpInstObj_New
#define CmpInstObj_Convert _CmpInstObj_Convert
#endif
/*
** Parse/generate ComponentDescriptor records
@ -52,6 +63,13 @@ CmpDesc_Convert(v, p_itself)
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(CmpObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CmpObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(CmpInstObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CmpInstObj_Convert);
"""
ComponentDescription = OpaqueType('ComponentDescription', 'CmpDesc')
Component = OpaqueByValueType('Component', C_OBJECTPREFIX)
ComponentInstance = OpaqueByValueType('ComponentInstance', CI_OBJECTPREFIX)

View file

@ -13,6 +13,14 @@
#include <ControlDefinitions.h>
#endif
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_CtlObj_New(ControlHandle);
extern int _CtlObj_Convert(PyObject *, ControlHandle *);
#define CtlObj_New _CtlObj_New
#define CtlObj_Convert _CtlObj_Convert
#endif
staticforward PyObject *CtlObj_WhichControl(ControlHandle);
#define as_Control(h) ((ControlHandle)h)
@ -2925,6 +2933,8 @@ void initCtl()
myidleproc_upp = NewControlUserPaneIdleProc(myidleproc);
myhittestproc_upp = NewControlUserPaneHitTestProc(myhittestproc);
mytrackingproc_upp = NewControlUserPaneTrackingProc(mytrackingproc);
PyMac_INIT_TOOLBOX_OBJECT_NEW(CtlObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CtlObj_Convert);
m = Py_InitModule("Ctl", Ctl_methods);

View file

@ -54,6 +54,14 @@ includestuff = includestuff + """
#include <ControlDefinitions.h>
#endif
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_CtlObj_New(ControlHandle);
extern int _CtlObj_Convert(PyObject *, ControlHandle *);
#define CtlObj_New _CtlObj_New
#define CtlObj_Convert _CtlObj_Convert
#endif
staticforward PyObject *CtlObj_WhichControl(ControlHandle);
#define as_Control(h) ((ControlHandle)h)
@ -316,6 +324,8 @@ mydrawproc_upp = NewControlUserPaneDrawProc(mydrawproc);
myidleproc_upp = NewControlUserPaneIdleProc(myidleproc);
myhittestproc_upp = NewControlUserPaneHitTestProc(myhittestproc);
mytrackingproc_upp = NewControlUserPaneTrackingProc(mytrackingproc);
PyMac_INIT_TOOLBOX_OBJECT_NEW(CtlObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CtlObj_Convert);
"""
class MyObjectDefinition(ObjectIdentityMixin, GlobalObjectDefinition):

View file

@ -9,6 +9,15 @@
#include "pymactoolbox.h"
#include <Dialogs.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_DlgObj_New(DialogRef);
extern PyObject *_DlgObj_WhichDialog(DialogRef);
extern int _DlgObj_Convert(PyObject *, DialogRef *);
#define DlgObj_New _DlgObj_New
#define DlgObj_WhichDialog _DlgObj_WhichDialog
#define DlgObj_Convert _DlgObj_Convert
#endif
#if !ACCESSOR_CALLS_ARE_FUNCTIONS
#define GetDialogTextEditHandle(dlg) (((DialogPeek)(dlg))->textH)
@ -1468,7 +1477,7 @@ static PyMethodDef Dlg_methods[] = {
/* Return the WindowPtr corresponding to a DialogObject */
#if 0
WindowPtr
DlgObj_ConvertToWindow(self)
PyObject *self;
@ -1477,6 +1486,7 @@ DlgObj_ConvertToWindow(self)
return GetDialogWindow(((DialogObject *)self)->ob_itself);
return NULL;
}
#endif
/* Return the object corresponding to the dialog, or None */
PyObject *
@ -1516,6 +1526,10 @@ void initDlg()
PyMac_INIT_TOOLBOX_OBJECT_NEW(DlgObj_New);
PyMac_INIT_TOOLBOX_OBJECT_NEW(DlgObj_WhichDialog);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(DlgObj_Convert);
m = Py_InitModule("Dlg", Dlg_methods);
d = PyModule_GetDict(m);

View file

@ -32,6 +32,15 @@ EventMask = Type("EventMask", "H")
includestuff = includestuff + """
#include <Dialogs.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_DlgObj_New(DialogRef);
extern PyObject *_DlgObj_WhichDialog(DialogRef);
extern int _DlgObj_Convert(PyObject *, DialogRef *);
#define DlgObj_New _DlgObj_New
#define DlgObj_WhichDialog _DlgObj_WhichDialog
#define DlgObj_Convert _DlgObj_Convert
#endif
#if !ACCESSOR_CALLS_ARE_FUNCTIONS
#define GetDialogTextEditHandle(dlg) (((DialogPeek)(dlg))->textH)
@ -139,7 +148,7 @@ extern PyMethodChain WinObj_chain;
finalstuff = finalstuff + """
/* Return the WindowPtr corresponding to a DialogObject */
#if 0
WindowPtr
DlgObj_ConvertToWindow(self)
PyObject *self;
@ -148,6 +157,7 @@ DlgObj_ConvertToWindow(self)
return GetDialogWindow(((DialogObject *)self)->ob_itself);
return NULL;
}
#endif
/* Return the object corresponding to the dialog, or None */
PyObject *
@ -180,6 +190,12 @@ DlgObj_WhichDialog(d)
}
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(DlgObj_New);
PyMac_INIT_TOOLBOX_OBJECT_NEW(DlgObj_WhichDialog);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(DlgObj_Convert);
"""
# Define a class which specializes our object definition
class MyObjectDefinition(GlobalObjectDefinition):

View file

@ -19,6 +19,14 @@ DragInputUPP dragglue_InputUPP;
DragDrawingUPP dragglue_DrawingUPP;
#endif
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_DragObj_New(DragRef);
extern int _DragObj_Convert(PyObject *, DragRef *);
#define DragObj_New _DragObj_New
#define DragObj_Convert _DragObj_Convert
#endif
static PyObject *Drag_Error;
/* ---------------------- Object type DragObj ----------------------- */
@ -1040,6 +1048,9 @@ void initDrag()
PyMac_INIT_TOOLBOX_OBJECT_NEW(DragObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(DragObj_Convert);
m = Py_InitModule("Drag", Drag_methods);
d = PyModule_GetDict(m);

View file

@ -54,6 +54,14 @@ DragSendDataUPP dragglue_SendDataUPP;
DragInputUPP dragglue_InputUPP;
DragDrawingUPP dragglue_DrawingUPP;
#endif
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_DragObj_New(DragRef);
extern int _DragObj_Convert(PyObject *, DragRef *);
#define DragObj_New _DragObj_New
#define DragObj_Convert _DragObj_Convert
#endif
"""
finalstuff = finalstuff + """
@ -153,6 +161,11 @@ dragglue_Drawing(xxxx
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(DragObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(DragObj_Convert);
"""
variablestuff = """
dragglue_TrackingHandlerUPP = NewDragTrackingHandlerProc(dragglue_TrackingHandler);
dragglue_ReceiveHandlerUPP = NewDragReceiveHandlerProc(dragglue_ReceiveHandler);

View file

@ -10,6 +10,15 @@
#include <Lists.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_ListObj_New(ListHandle);
extern int _ListObj_Convert(PyObject *, ListHandle *);
#define ListObj_New _ListObj_New
#define ListObj_Convert _ListObj_Convert
#endif
#if !ACCESSOR_CALLS_ARE_FUNCTIONS
#define GetListPort(list) ((CGrafPtr)(*(list))->port)
#define GetListVerticalScrollBar(list) ((*(list))->vScroll)
@ -1066,6 +1075,9 @@ void initList()
PyMac_INIT_TOOLBOX_OBJECT_NEW(ListObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(ListObj_Convert);
m = Py_InitModule("List", List_methods);
d = PyModule_GetDict(m);

View file

@ -37,6 +37,15 @@ CGrafPtr = OpaqueByValueType("CGrafPtr", "GrafObj")
includestuff = includestuff + """
#include <%s>""" % MACHEADERFILE + """
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_ListObj_New(ListHandle);
extern int _ListObj_Convert(PyObject *, ListHandle *);
#define ListObj_New _ListObj_New
#define ListObj_Convert _ListObj_Convert
#endif
#if !ACCESSOR_CALLS_ARE_FUNCTIONS
#define GetListPort(list) ((CGrafPtr)(*(list))->port)
#define GetListVerticalScrollBar(list) ((*(list))->vScroll)
@ -66,6 +75,11 @@ includestuff = includestuff + """
#define as_Resource(lh) ((Handle)lh)
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(ListObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(ListObj_Convert);
"""
class ListMethodGenerator(MethodGenerator):
"""Similar to MethodGenerator, but has self as last argument"""

View file

@ -11,6 +11,15 @@
#include <Devices.h> /* Defines OpenDeskAcc in universal headers */
#include <Menus.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_MenuObj_New(MenuHandle);
extern int _MenuObj_Convert(PyObject *, MenuHandle *);
#define MenuObj_New _MenuObj_New
#define MenuObj_Convert _MenuObj_Convert
#endif
#if !ACCESSOR_CALLS_ARE_FUNCTIONS
#define GetMenuID(menu) ((*(menu))->menuID)
#define GetMenuWidth(menu) ((*(menu))->menuWidth)
@ -2780,6 +2789,9 @@ void initMenu()
PyMac_INIT_TOOLBOX_OBJECT_NEW(MenuObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MenuObj_Convert);
m = Py_InitModule("Menu", Menu_methods);
d = PyModule_GetDict(m);

View file

@ -39,6 +39,15 @@ includestuff = includestuff + """
#include <Devices.h> /* Defines OpenDeskAcc in universal headers */
#include <%s>""" % MACHEADERFILE + """
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_MenuObj_New(MenuHandle);
extern int _MenuObj_Convert(PyObject *, MenuHandle *);
#define MenuObj_New _MenuObj_New
#define MenuObj_Convert _MenuObj_Convert
#endif
#if !ACCESSOR_CALLS_ARE_FUNCTIONS
#define GetMenuID(menu) ((*(menu))->menuID)
#define GetMenuWidth(menu) ((*(menu))->menuWidth)
@ -53,6 +62,11 @@ includestuff = includestuff + """
#define as_Resource(h) ((Handle)h)
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(MenuObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MenuObj_Convert);
"""
class MyObjectDefinition(GlobalObjectDefinition):
pass

View file

@ -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 @@ GrafObj_Convert(v, p_itself)
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 @@ GrafObj_Convert(v, p_itself)
*p_itself = (GrafPtr)GetWindowPort(win);
return 1;
}
#endif
if (!GrafObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "GrafPort required");
@ -6194,6 +6221,13 @@ void initQd()
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);

View file

@ -63,6 +63,22 @@ PenState_ptr = StructInputBufferType('PenState')
includestuff = includestuff + """
#include <%s>""" % MACHEADERFILE + """
#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)
@ -201,6 +217,15 @@ variablestuff = """
}
"""
initstuff = initstuff + """
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);
"""
## not yet...
##
##class Region_ObjectDefinition(GlobalObjectDefinition):
@ -219,6 +244,16 @@ class MyGRObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self):
Output("if (itself == NULL) return PyMac_Error(resNotFound);")
def outputCheckConvertArg(self):
Output("#if 1")
OutLbrace()
Output("WindowRef win;")
OutLbrace("if (WinObj_Convert(v, &win) && v)")
Output("*p_itself = (GrafPtr)GetWindowPort(win);")
Output("return 1;")
OutRbrace()
Output("PyErr_Clear();")
OutRbrace()
Output("#else")
OutLbrace("if (DlgObj_Check(v))")
Output("DialogRef dlg = (DialogRef)((GrafPortObject *)v)->ob_itself;")
Output("*p_itself = (GrafPtr)GetWindowPort(GetDialogWindow(dlg));")
@ -229,6 +264,7 @@ class MyGRObjectDefinition(GlobalObjectDefinition):
Output("*p_itself = (GrafPtr)GetWindowPort(win);")
Output("return 1;")
OutRbrace()
Output("#endif")
def outputGetattrHook(self):
Output("#if !ACCESSOR_CALLS_ARE_FUNCTIONS")
Output("""

View file

@ -10,6 +10,14 @@
#include <QDOffscreen.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_GWorldObj_New(GWorldPtr);
extern int _GWorldObj_Convert(PyObject *, GWorldPtr *);
#define GWorldObj_New _GWorldObj_New
#define GWorldObj_Convert _GWorldObj_Convert
#endif
#define as_GrafPtr(gworld) ((GrafPtr)(gworld))
@ -622,6 +630,9 @@ void initQdoffs()
PyMac_INIT_TOOLBOX_OBJECT_NEW(GWorldObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(GWorldObj_Convert);
m = Py_InitModule("Qdoffs", Qdoffs_methods);
d = PyModule_GetDict(m);

View file

@ -36,10 +36,22 @@ QDErr = OSErrType("QDErr", 'h')
includestuff = includestuff + """
#include <%s>""" % MACHEADERFILE + """
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_GWorldObj_New(GWorldPtr);
extern int _GWorldObj_Convert(PyObject *, GWorldPtr *);
#define GWorldObj_New _GWorldObj_New
#define GWorldObj_Convert _GWorldObj_Convert
#endif
#define as_GrafPtr(gworld) ((GrafPtr)(gworld))
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(GWorldObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(GWorldObj_Convert);
"""
class MyObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self):

View file

@ -10,6 +10,33 @@
#include <Movies.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_TrackObj_New(Track);
extern int _TrackObj_Convert(PyObject *, Track *);
extern PyObject *_MovieObj_New(Movie);
extern int _MovieObj_Convert(PyObject *, Movie *);
extern PyObject *_MovieCtlObj_New(MovieController);
extern int _MovieCtlObj_Convert(PyObject *, MovieController *);
extern PyObject *_TimeBaseObj_New(TimeBase);
extern int _TimeBaseObj_Convert(PyObject *, TimeBase *);
extern PyObject *_UserDataObj_New(UserData);
extern int _UserDataObj_Convert(PyObject *, UserData *);
extern PyObject *_MediaObj_New(Media);
extern int _MediaObj_Convert(PyObject *, Media *);
#define TrackObj_New _TrackObj_New
#define TrackObj_Convert _TrackObj_Convert
#define MovieObj_New _MovieObj_New
#define MovieObj_Convert _MovieObj_Convert
#define MovieCtlObj_New _MovieCtlObj_New
#define MovieCtlObj_Convert _MovieCtlObj_Convert
#define TimeBaseObj_New _TimeBaseObj_New
#define TimeBaseObj_Convert _TimeBaseObj_Convert
#define UserDataObj_New _UserDataObj_New
#define UserDataObj_Convert _UserDataObj_Convert
#define MediaObj_New _MediaObj_New
#define MediaObj_Convert _MediaObj_Convert
#endif
/* Macro to allow us to GetNextInterestingTime without duration */
#define GetMediaNextInterestingTimeOnly(media, flags, time, rate, rv) GetMediaNextInterestingTime(media, flags, time, rate, rv, NULL)
@ -9160,6 +9187,19 @@ void initQt()
PyMac_INIT_TOOLBOX_OBJECT_NEW(TrackObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(TrackObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(MovieObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MovieObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(MovieCtlObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MovieCtlObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(TimeBaseObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(TimeBaseObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(UserDataObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(UserDataObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(MediaObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MediaObj_Convert);
m = Py_InitModule("Qt", Qt_methods);
d = PyModule_GetDict(m);

View file

@ -26,6 +26,33 @@ from macsupport import *
includestuff = includestuff + """
#include <%s>""" % MACHEADERFILE + """
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_TrackObj_New(Track);
extern int _TrackObj_Convert(PyObject *, Track *);
extern PyObject *_MovieObj_New(Movie);
extern int _MovieObj_Convert(PyObject *, Movie *);
extern PyObject *_MovieCtlObj_New(MovieController);
extern int _MovieCtlObj_Convert(PyObject *, MovieController *);
extern PyObject *_TimeBaseObj_New(TimeBase);
extern int _TimeBaseObj_Convert(PyObject *, TimeBase *);
extern PyObject *_UserDataObj_New(UserData);
extern int _UserDataObj_Convert(PyObject *, UserData *);
extern PyObject *_MediaObj_New(Media);
extern int _MediaObj_Convert(PyObject *, Media *);
#define TrackObj_New _TrackObj_New
#define TrackObj_Convert _TrackObj_Convert
#define MovieObj_New _MovieObj_New
#define MovieObj_Convert _MovieObj_Convert
#define MovieCtlObj_New _MovieCtlObj_New
#define MovieCtlObj_Convert _MovieCtlObj_Convert
#define TimeBaseObj_New _TimeBaseObj_New
#define TimeBaseObj_Convert _TimeBaseObj_Convert
#define UserDataObj_New _UserDataObj_New
#define UserDataObj_Convert _UserDataObj_Convert
#define MediaObj_New _MediaObj_New
#define MediaObj_Convert _MediaObj_Convert
#endif
/* Macro to allow us to GetNextInterestingTime without duration */
#define GetMediaNextInterestingTimeOnly(media, flags, time, rate, rv) \
@ -65,6 +92,21 @@ QtTimeRecord_Convert(v, p_itself)
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(TrackObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(TrackObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(MovieObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MovieObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(MovieCtlObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MovieCtlObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(TimeBaseObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(TimeBaseObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(UserDataObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(UserDataObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(MediaObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MediaObj_Convert);
"""
# Our (opaque) objects

View file

@ -11,6 +11,17 @@
#include <Resources.h>
#include <string.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_ResObj_New(Handle);
extern int _ResObj_Convert(PyObject *, Handle *);
extern PyObject *_OptResObj_New(Handle);
extern int _OptResObj_Convert(PyObject *, Handle *);
#define ResObj_New _ResObj_New
#define ResObj_Convert _ResObj_Convert
#define OptResObj_New _OptResObj_New
#define OptResObj_Convert _OptResObj_Convert
#endif
/* Function to dispose a resource, with a "normal" calling sequence */
static void
PyMac_AutoDisposeHandle(Handle h)
@ -1678,6 +1689,10 @@ void initRes()
PyMac_INIT_TOOLBOX_OBJECT_NEW(ResObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(ResObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(OptResObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(OptResObj_Convert);
m = Py_InitModule("Res", Res_methods);

View file

@ -26,6 +26,17 @@ includestuff = includestuff + """
#include <Resources.h>
#include <string.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_ResObj_New(Handle);
extern int _ResObj_Convert(PyObject *, Handle *);
extern PyObject *_OptResObj_New(Handle);
extern int _OptResObj_Convert(PyObject *, Handle *);
#define ResObj_New _ResObj_New
#define ResObj_Convert _ResObj_Convert
#define OptResObj_New _OptResObj_New
#define OptResObj_Convert _OptResObj_Convert
#endif
/* Function to dispose a resource, with a "normal" calling sequence */
static void
PyMac_AutoDisposeHandle(Handle h)
@ -75,6 +86,10 @@ OptResObj_Convert(v, p_itself)
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(ResObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(ResObj_Convert);
PyMac_INIT_TOOLBOX_OBJECT_NEW(OptResObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(OptResObj_Convert);
"""
module = MacModule('Res', 'Res', includestuff, finalstuff, initstuff)

View file

@ -10,6 +10,14 @@
#include <TextEdit.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_TEObj_New(TEHandle);
extern int _TEObj_Convert(PyObject *, TEHandle *);
#define TEObj_New _TEObj_New
#define TEObj_Convert _TEObj_Convert
#endif
#define as_TE(h) ((TEHandle)h)
#define as_Resource(teh) ((Handle)teh)
@ -1105,6 +1113,9 @@ void initTE()
PyMac_INIT_TOOLBOX_OBJECT_NEW(TEObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(TEObj_Convert);
m = Py_InitModule("TE", TE_methods);
d = PyModule_GetDict(m);

View file

@ -34,6 +34,14 @@ TextStyle_ptr = TextStyle
includestuff = includestuff + """
#include <%s>""" % MACHEADERFILE + """
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_TEObj_New(TEHandle);
extern int _TEObj_Convert(PyObject *, TEHandle *);
#define TEObj_New _TEObj_New
#define TEObj_Convert _TEObj_Convert
#endif
#define as_TE(h) ((TEHandle)h)
#define as_Resource(teh) ((Handle)teh)
@ -65,6 +73,11 @@ TextStyle_Convert(v, p_itself)
}
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(TEObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(TEObj_Convert);
"""
class TEMethodGenerator(OSErrMethodGenerator):
"""Similar to MethodGenerator, but has self as last argument"""

View file

@ -10,6 +10,16 @@
#include <Windows.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_WinObj_New(WindowRef);
extern PyObject *_WinObj_WhichWindow(WindowRef);
extern int _WinObj_Convert(PyObject *, WindowRef *);
#define WinObj_New _WinObj_New
#define WinObj_WhichWindow _WinObj_WhichWindow
#define WinObj_Convert _WinObj_Convert
#endif
#if !ACCESSOR_CALLS_ARE_FUNCTIONS
/* Carbon calls that we emulate in classic mode */
#define GetWindowSpareFlag(win) (((CWindowPeek)(win))->spareFlag)
@ -65,10 +75,21 @@ WinObj_Convert(v, p_itself)
PyObject *v;
WindowPtr *p_itself;
{
#if 1
{
DialogRef dlg;
if (DlgObj_Convert(v, &dlg) && dlg) {
*p_itself = GetDialogWindow(dlg);
return 1;
}
PyErr_Clear();
}
#else
if (DlgObj_Check(v)) {
*p_itself = DlgObj_ConvertToWindow(v);
return 1;
}
#endif
if (v == Py_None) { *p_itself = NULL; return 1; }
if (PyInt_Check(v)) { *p_itself = (WindowPtr)PyInt_AsLong(v); return 1; }
@ -3057,6 +3078,10 @@ void initWin()
PyMac_INIT_TOOLBOX_OBJECT_NEW(WinObj_New);
PyMac_INIT_TOOLBOX_OBJECT_NEW(WinObj_WhichWindow);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(WinObj_Convert);
m = Py_InitModule("Win", Win_methods);
d = PyModule_GetDict(m);

View file

@ -56,6 +56,16 @@ PropertyTag = OSTypeType("PropertyTag")
includestuff = includestuff + """
#include <%s>""" % MACHEADERFILE + """
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_WinObj_New(WindowRef);
extern PyObject *_WinObj_WhichWindow(WindowRef);
extern int _WinObj_Convert(PyObject *, WindowRef *);
#define WinObj_New _WinObj_New
#define WinObj_WhichWindow _WinObj_WhichWindow
#define WinObj_Convert _WinObj_Convert
#endif
#if !ACCESSOR_CALLS_ARE_FUNCTIONS
/* Carbon calls that we emulate in classic mode */
#define GetWindowSpareFlag(win) (((CWindowPeek)(win))->spareFlag)
@ -103,6 +113,12 @@ WinObj_WhichWindow(w)
}
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(WinObj_New);
PyMac_INIT_TOOLBOX_OBJECT_NEW(WinObj_WhichWindow);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(WinObj_Convert);
"""
class MyObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self):
Output("if (itself == NULL) return PyMac_Error(resNotFound);")
@ -118,10 +134,21 @@ class MyObjectDefinition(GlobalObjectDefinition):
Output("it->ob_freeit = PyMac_AutoDisposeWindow;")
OutRbrace()
def outputCheckConvertArg(self):
Output("#if 1")
OutLbrace()
Output("DialogRef dlg;")
OutLbrace("if (DlgObj_Convert(v, &dlg) && dlg)")
Output("*p_itself = GetDialogWindow(dlg);")
Output("return 1;")
OutRbrace()
Output("PyErr_Clear();")
OutRbrace()
Output("#else")
OutLbrace("if (DlgObj_Check(v))")
Output("*p_itself = DlgObj_ConvertToWindow(v);")
Output("return 1;")
OutRbrace()
Output("#endif")
Out("""
if (v == Py_None) { *p_itself = NULL; return 1; }
if (PyInt_Check(v)) { *p_itself = (WindowPtr)PyInt_AsLong(v); return 1; }