blob: 403ddf5034fcd24b8fd7a2bb16697758c78985fb [file] [log] [blame]
Jack Jansen9d8b96c2000-07-14 22:16:45 +00001/*
Jack Jansen94bebc02001-08-08 13:17:31 +00002** pymactoolbox.h - globals defined in mactoolboxglue.c
Jack Jansen9d8b96c2000-07-14 22:16:45 +00003*/
Jack Jansen47ec1412002-09-10 12:32:47 +00004#ifndef Py_PYMACTOOLBOX_H
5#define Py_PYMACTOOLBOX_H
Jack Jansen9d8b96c2000-07-14 22:16:45 +00006#ifdef __cplusplus
7 extern "C" {
8#endif
9
Jack Jansen9f66b4a2001-05-19 12:32:39 +000010#include <Carbon/Carbon.h>
11#include <QuickTime/QuickTime.h>
Jack Jansen9d8b96c2000-07-14 22:16:45 +000012
Jack Jansen94bebc02001-08-08 13:17:31 +000013/*
14** Helper routines for error codes and such.
15*/
Jack Jansen94bebc02001-08-08 13:17:31 +000016char *PyMac_StrError(int); /* strerror with mac errors */
Jack Jansen3305d242003-11-20 13:28:19 +000017extern PyObject *PyMac_OSErrException; /* Exception for OSErr */
18PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */
Jack Jansen94bebc02001-08-08 13:17:31 +000019PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */
20PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */
Jack Jansen7b049462001-09-10 22:09:30 +000021extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert fsspec->path */
Jack Jansen21ed16a2002-08-02 14:11:24 +000022#ifdef WITH_NEXT_FRAMEWORK
23extern char *PyMac_GetAppletScriptFile(void); /* Return applet script file or NULL */
24#endif
Jack Jansen94bebc02001-08-08 13:17:31 +000025/*
26** These conversion routines are defined in mactoolboxglue.c itself.
27*/
28int PyMac_GetOSType(PyObject *, OSType *); /* argument parser for OSType */
29PyObject *PyMac_BuildOSType(OSType); /* Convert OSType to PyObject */
30
31PyObject *PyMac_BuildNumVersion(NumVersion);/* Convert NumVersion to PyObject */
32
33int PyMac_GetStr255(PyObject *, Str255); /* argument parser for Str255 */
34PyObject *PyMac_BuildStr255(Str255); /* Convert Str255 to PyObject */
35PyObject *PyMac_BuildOptStr255(Str255); /* Convert Str255 to PyObject, NULL to None */
36
37int PyMac_GetRect(PyObject *, Rect *); /* argument parser for Rect */
38PyObject *PyMac_BuildRect(Rect *); /* Convert Rect to PyObject */
39
40int PyMac_GetPoint(PyObject *, Point *); /* argument parser for Point */
41PyObject *PyMac_BuildPoint(Point); /* Convert Point to PyObject */
42
43int PyMac_GetEventRecord(PyObject *, EventRecord *); /* argument parser for EventRecord */
44PyObject *PyMac_BuildEventRecord(EventRecord *); /* Convert EventRecord to PyObject */
45
46int PyMac_GetFixed(PyObject *, Fixed *); /* argument parser for Fixed */
47PyObject *PyMac_BuildFixed(Fixed); /* Convert Fixed to PyObject */
48int PyMac_Getwide(PyObject *, wide *); /* argument parser for wide */
49PyObject *PyMac_Buildwide(wide *); /* Convert wide to PyObject */
50
51/*
52** The rest of the routines are implemented by extension modules. If they are
53** dynamically loaded mactoolboxglue will contain a stub implementation of the
54** routine, which imports the module, whereupon the module's init routine will
55** communicate the routine pointer back to the stub.
56** If USE_TOOLBOX_OBJECT_GLUE is not defined there is no glue code, and the
57** extension modules simply declare the routine. This is the case for static
58** builds (and could be the case for MacPython CFM builds, because CFM extension
59** modules can reference each other without problems).
60*/
61
Jack Jansenf57a4a22001-05-17 22:11:44 +000062#ifdef USE_TOOLBOX_OBJECT_GLUE
63/*
64** These macros are used in the module init code. If we use toolbox object glue
65** it sets the function pointer to point to the real function.
66*/
Jack Jansen0268ac82001-05-22 22:34:56 +000067#define PyMac_INIT_TOOLBOX_OBJECT_NEW(object, rtn) { \
Jack Jansenf57a4a22001-05-17 22:11:44 +000068 extern PyObject *(*PyMacGluePtr_##rtn)(object); \
69 PyMacGluePtr_##rtn = _##rtn; \
70}
Jack Jansen0268ac82001-05-22 22:34:56 +000071#define PyMac_INIT_TOOLBOX_OBJECT_CONVERT(object, rtn) { \
72 extern int (*PyMacGluePtr_##rtn)(PyObject *, object *); \
Jack Jansenf57a4a22001-05-17 22:11:44 +000073 PyMacGluePtr_##rtn = _##rtn; \
74}
75#else
76/*
77** If we don't use toolbox object glue the init macros are empty. Moreover, we define
78** _xxx_New to be the same as xxx_New, and the code in mactoolboxglue isn't included.
79*/
Jack Jansen0268ac82001-05-22 22:34:56 +000080#define PyMac_INIT_TOOLBOX_OBJECT_NEW(object, rtn)
81#define PyMac_INIT_TOOLBOX_OBJECT_CONVERT(object, rtn)
Jack Jansenf57a4a22001-05-17 22:11:44 +000082#endif /* USE_TOOLBOX_OBJECT_GLUE */
83
Jack Jansena5bca572001-08-03 15:39:27 +000084/* macfs exports */
Jack Jansenfabd00f2001-09-01 23:39:58 +000085int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */
86PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */
87
88int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */
89PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */
Jack Jansena5bca572001-08-03 15:39:27 +000090
Jack Jansen9d8b96c2000-07-14 22:16:45 +000091/* AE exports */
92extern PyObject *AEDesc_New(AppleEvent *); /* XXXX Why passed by address?? */
Jack Jansenb2a57722003-01-17 23:11:17 +000093extern PyObject *AEDesc_NewBorrowed(AppleEvent *);
Jack Jansen9d8b96c2000-07-14 22:16:45 +000094extern int AEDesc_Convert(PyObject *, AppleEvent *);
95
96/* Cm exports */
97extern PyObject *CmpObj_New(Component);
98extern int CmpObj_Convert(PyObject *, Component *);
99extern PyObject *CmpInstObj_New(ComponentInstance);
100extern int CmpInstObj_Convert(PyObject *, ComponentInstance *);
101
102/* Ctl exports */
103extern PyObject *CtlObj_New(ControlHandle);
104extern int CtlObj_Convert(PyObject *, ControlHandle *);
105
106/* Dlg exports */
107extern PyObject *DlgObj_New(DialogPtr);
108extern int DlgObj_Convert(PyObject *, DialogPtr *);
Jack Jansenadd58f92001-02-09 15:59:18 +0000109extern PyObject *DlgObj_WhichDialog(DialogPtr);
Jack Jansen9d8b96c2000-07-14 22:16:45 +0000110
111/* Drag exports */
112extern PyObject *DragObj_New(DragReference);
113extern int DragObj_Convert(PyObject *, DragReference *);
114
115/* List exports */
116extern PyObject *ListObj_New(ListHandle);
117extern int ListObj_Convert(PyObject *, ListHandle *);
118
119/* Menu exports */
120extern PyObject *MenuObj_New(MenuHandle);
121extern int MenuObj_Convert(PyObject *, MenuHandle *);
122
123/* Qd exports */
124extern PyObject *GrafObj_New(GrafPtr);
125extern int GrafObj_Convert(PyObject *, GrafPtr *);
126extern PyObject *BMObj_New(BitMapPtr);
127extern int BMObj_Convert(PyObject *, BitMapPtr *);
128extern PyObject *QdRGB_New(RGBColor *);
129extern int QdRGB_Convert(PyObject *, RGBColor *);
130
Jack Jansen50bf1482000-12-12 22:13:03 +0000131/* Qdoffs exports */
132extern PyObject *GWorldObj_New(GWorldPtr);
133extern int GWorldObj_Convert(PyObject *, GWorldPtr *);
134
Jack Jansen9d8b96c2000-07-14 22:16:45 +0000135/* Qt exports */
136extern PyObject *TrackObj_New(Track);
137extern int TrackObj_Convert(PyObject *, Track *);
138extern PyObject *MovieObj_New(Movie);
139extern int MovieObj_Convert(PyObject *, Movie *);
140extern PyObject *MovieCtlObj_New(MovieController);
Jack Jansenf57a4a22001-05-17 22:11:44 +0000141extern int MovieCtlObj_Convert(PyObject *, MovieController *);
Jack Jansen9d8b96c2000-07-14 22:16:45 +0000142extern PyObject *TimeBaseObj_New(TimeBase);
143extern int TimeBaseObj_Convert(PyObject *, TimeBase *);
144extern PyObject *UserDataObj_New(UserData);
145extern int UserDataObj_Convert(PyObject *, UserData *);
146extern PyObject *MediaObj_New(Media);
147extern int MediaObj_Convert(PyObject *, Media *);
148
149/* Res exports */
150extern PyObject *ResObj_New(Handle);
151extern int ResObj_Convert(PyObject *, Handle *);
152extern PyObject *OptResObj_New(Handle);
153extern int OptResObj_Convert(PyObject *, Handle *);
154
155/* TE exports */
156extern PyObject *TEObj_New(TEHandle);
157extern int TEObj_Convert(PyObject *, TEHandle *);
158
159/* Win exports */
160extern PyObject *WinObj_New(WindowPtr);
161extern int WinObj_Convert(PyObject *, WindowPtr *);
162extern PyObject *WinObj_WhichWindow(WindowPtr);
Jack Jansen9d8b96c2000-07-14 22:16:45 +0000163
Jack Jansen537a69f2001-11-05 14:39:22 +0000164/* CF exports */
Jack Jansen4eb45e72003-05-27 21:39:58 +0000165extern PyObject *CFObj_New(CFTypeRef);
166extern int CFObj_Convert(PyObject *, CFTypeRef *);
Jack Jansen537a69f2001-11-05 14:39:22 +0000167extern PyObject *CFTypeRefObj_New(CFTypeRef);
168extern int CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
169extern PyObject *CFStringRefObj_New(CFStringRef);
170extern int CFStringRefObj_Convert(PyObject *, CFStringRef *);
171extern PyObject *CFMutableStringRefObj_New(CFMutableStringRef);
172extern int CFMutableStringRefObj_Convert(PyObject *, CFMutableStringRef *);
173extern PyObject *CFArrayRefObj_New(CFArrayRef);
174extern int CFArrayRefObj_Convert(PyObject *, CFArrayRef *);
175extern PyObject *CFMutableArrayRefObj_New(CFMutableArrayRef);
176extern int CFMutableArrayRefObj_Convert(PyObject *, CFMutableArrayRef *);
177extern PyObject *CFDictionaryRefObj_New(CFDictionaryRef);
178extern int CFDictionaryRefObj_Convert(PyObject *, CFDictionaryRef *);
179extern PyObject *CFMutableDictionaryRefObj_New(CFMutableDictionaryRef);
180extern int CFMutableDictionaryRefObj_Convert(PyObject *, CFMutableDictionaryRef *);
181extern PyObject *CFURLRefObj_New(CFURLRef);
182extern int CFURLRefObj_Convert(PyObject *, CFURLRef *);
183extern int OptionalCFURLRefObj_Convert(PyObject *, CFURLRef *);
Jack Jansen9d8b96c2000-07-14 22:16:45 +0000184
185#ifdef __cplusplus
186 }
187#endif
Jack Jansen47ec1412002-09-10 12:32:47 +0000188#endif