Fix resource leak reported in SF #1516995.
[python.git] / Include / pymactoolbox.h
blob92799e975c8b76c9196eceb2dbe354d24c5637d1
1 /*
2 ** pymactoolbox.h - globals defined in mactoolboxglue.c
3 */
4 #ifndef Py_PYMACTOOLBOX_H
5 #define Py_PYMACTOOLBOX_H
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
10 #include <Carbon/Carbon.h>
11 #include <QuickTime/QuickTime.h>
14 ** Helper routines for error codes and such.
16 char *PyMac_StrError(int); /* strerror with mac errors */
17 extern PyObject *PyMac_OSErrException; /* Exception for OSErr */
18 PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */
19 PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */
20 PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */
21 extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert
22 fsspec->path */
24 ** These conversion routines are defined in mactoolboxglue.c itself.
26 int PyMac_GetOSType(PyObject *, OSType *); /* argument parser for OSType */
27 PyObject *PyMac_BuildOSType(OSType); /* Convert OSType to PyObject */
29 PyObject *PyMac_BuildNumVersion(NumVersion);/* Convert NumVersion to PyObject */
31 int PyMac_GetStr255(PyObject *, Str255); /* argument parser for Str255 */
32 PyObject *PyMac_BuildStr255(Str255); /* Convert Str255 to PyObject */
33 PyObject *PyMac_BuildOptStr255(Str255); /* Convert Str255 to PyObject,
34 NULL to None */
36 int PyMac_GetRect(PyObject *, Rect *); /* argument parser for Rect */
37 PyObject *PyMac_BuildRect(Rect *); /* Convert Rect to PyObject */
39 int PyMac_GetPoint(PyObject *, Point *); /* argument parser for Point */
40 PyObject *PyMac_BuildPoint(Point); /* Convert Point to PyObject */
42 int PyMac_GetEventRecord(PyObject *, EventRecord *); /* argument parser for
43 EventRecord */
44 PyObject *PyMac_BuildEventRecord(EventRecord *); /* Convert EventRecord to
45 PyObject */
47 int PyMac_GetFixed(PyObject *, Fixed *); /* argument parser for Fixed */
48 PyObject *PyMac_BuildFixed(Fixed); /* Convert Fixed to PyObject */
49 int PyMac_Getwide(PyObject *, wide *); /* argument parser for wide */
50 PyObject *PyMac_Buildwide(wide *); /* Convert wide to PyObject */
53 ** The rest of the routines are implemented by extension modules. If they are
54 ** dynamically loaded mactoolboxglue will contain a stub implementation of the
55 ** routine, which imports the module, whereupon the module's init routine will
56 ** communicate the routine pointer back to the stub.
57 ** If USE_TOOLBOX_OBJECT_GLUE is not defined there is no glue code, and the
58 ** extension modules simply declare the routine. This is the case for static
59 ** builds (and could be the case for MacPython CFM builds, because CFM extension
60 ** modules can reference each other without problems).
63 #ifdef USE_TOOLBOX_OBJECT_GLUE
65 ** These macros are used in the module init code. If we use toolbox object glue
66 ** it sets the function pointer to point to the real function.
68 #define PyMac_INIT_TOOLBOX_OBJECT_NEW(object, rtn) { \
69 extern PyObject *(*PyMacGluePtr_##rtn)(object); \
70 PyMacGluePtr_##rtn = _##rtn; \
72 #define PyMac_INIT_TOOLBOX_OBJECT_CONVERT(object, rtn) { \
73 extern int (*PyMacGluePtr_##rtn)(PyObject *, object *); \
74 PyMacGluePtr_##rtn = _##rtn; \
76 #else
78 ** If we don't use toolbox object glue the init macros are empty. Moreover, we define
79 ** _xxx_New to be the same as xxx_New, and the code in mactoolboxglue isn't included.
81 #define PyMac_INIT_TOOLBOX_OBJECT_NEW(object, rtn)
82 #define PyMac_INIT_TOOLBOX_OBJECT_CONVERT(object, rtn)
83 #endif /* USE_TOOLBOX_OBJECT_GLUE */
85 /* macfs exports */
86 int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */
87 PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */
89 int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */
90 PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */
92 /* AE exports */
93 extern PyObject *AEDesc_New(AppleEvent *); /* XXXX Why passed by address?? */
94 extern PyObject *AEDesc_NewBorrowed(AppleEvent *);
95 extern int AEDesc_Convert(PyObject *, AppleEvent *);
97 /* Cm exports */
98 extern PyObject *CmpObj_New(Component);
99 extern int CmpObj_Convert(PyObject *, Component *);
100 extern PyObject *CmpInstObj_New(ComponentInstance);
101 extern int CmpInstObj_Convert(PyObject *, ComponentInstance *);
103 /* Ctl exports */
104 extern PyObject *CtlObj_New(ControlHandle);
105 extern int CtlObj_Convert(PyObject *, ControlHandle *);
107 /* Dlg exports */
108 extern PyObject *DlgObj_New(DialogPtr);
109 extern int DlgObj_Convert(PyObject *, DialogPtr *);
110 extern PyObject *DlgObj_WhichDialog(DialogPtr);
112 /* Drag exports */
113 extern PyObject *DragObj_New(DragReference);
114 extern int DragObj_Convert(PyObject *, DragReference *);
116 /* List exports */
117 extern PyObject *ListObj_New(ListHandle);
118 extern int ListObj_Convert(PyObject *, ListHandle *);
120 /* Menu exports */
121 extern PyObject *MenuObj_New(MenuHandle);
122 extern int MenuObj_Convert(PyObject *, MenuHandle *);
124 /* Qd exports */
125 extern PyObject *GrafObj_New(GrafPtr);
126 extern int GrafObj_Convert(PyObject *, GrafPtr *);
127 extern PyObject *BMObj_New(BitMapPtr);
128 extern int BMObj_Convert(PyObject *, BitMapPtr *);
129 extern PyObject *QdRGB_New(RGBColor *);
130 extern int QdRGB_Convert(PyObject *, RGBColor *);
132 /* Qdoffs exports */
133 extern PyObject *GWorldObj_New(GWorldPtr);
134 extern int GWorldObj_Convert(PyObject *, GWorldPtr *);
136 /* Qt exports */
137 extern PyObject *TrackObj_New(Track);
138 extern int TrackObj_Convert(PyObject *, Track *);
139 extern PyObject *MovieObj_New(Movie);
140 extern int MovieObj_Convert(PyObject *, Movie *);
141 extern PyObject *MovieCtlObj_New(MovieController);
142 extern int MovieCtlObj_Convert(PyObject *, MovieController *);
143 extern PyObject *TimeBaseObj_New(TimeBase);
144 extern int TimeBaseObj_Convert(PyObject *, TimeBase *);
145 extern PyObject *UserDataObj_New(UserData);
146 extern int UserDataObj_Convert(PyObject *, UserData *);
147 extern PyObject *MediaObj_New(Media);
148 extern int MediaObj_Convert(PyObject *, Media *);
150 /* Res exports */
151 extern PyObject *ResObj_New(Handle);
152 extern int ResObj_Convert(PyObject *, Handle *);
153 extern PyObject *OptResObj_New(Handle);
154 extern int OptResObj_Convert(PyObject *, Handle *);
156 /* TE exports */
157 extern PyObject *TEObj_New(TEHandle);
158 extern int TEObj_Convert(PyObject *, TEHandle *);
160 /* Win exports */
161 extern PyObject *WinObj_New(WindowPtr);
162 extern int WinObj_Convert(PyObject *, WindowPtr *);
163 extern PyObject *WinObj_WhichWindow(WindowPtr);
165 /* CF exports */
166 extern PyObject *CFObj_New(CFTypeRef);
167 extern int CFObj_Convert(PyObject *, CFTypeRef *);
168 extern PyObject *CFTypeRefObj_New(CFTypeRef);
169 extern int CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
170 extern PyObject *CFStringRefObj_New(CFStringRef);
171 extern int CFStringRefObj_Convert(PyObject *, CFStringRef *);
172 extern PyObject *CFMutableStringRefObj_New(CFMutableStringRef);
173 extern int CFMutableStringRefObj_Convert(PyObject *, CFMutableStringRef *);
174 extern PyObject *CFArrayRefObj_New(CFArrayRef);
175 extern int CFArrayRefObj_Convert(PyObject *, CFArrayRef *);
176 extern PyObject *CFMutableArrayRefObj_New(CFMutableArrayRef);
177 extern int CFMutableArrayRefObj_Convert(PyObject *, CFMutableArrayRef *);
178 extern PyObject *CFDictionaryRefObj_New(CFDictionaryRef);
179 extern int CFDictionaryRefObj_Convert(PyObject *, CFDictionaryRef *);
180 extern PyObject *CFMutableDictionaryRefObj_New(CFMutableDictionaryRef);
181 extern int CFMutableDictionaryRefObj_Convert(PyObject *, CFMutableDictionaryRef *);
182 extern PyObject *CFURLRefObj_New(CFURLRef);
183 extern int CFURLRefObj_Convert(PyObject *, CFURLRef *);
184 extern int OptionalCFURLRefObj_Convert(PyObject *, CFURLRef *);
186 #ifdef __cplusplus
188 #endif
189 #endif