| /* | |
| ** An interface to the application scripting related functions of the OSA API. | |
| ** | |
| ** GetAppTerminology - given an FSSpec/posix path to an application, | |
| ** returns its aevt (scripting terminology) resource(s) | |
| ** | |
| ** GetSysTerminology - returns the AppleScript language component's | |
| ** aeut (scripting terminology) resource | |
| ** | |
| ** Written by Donovan Preston and slightly modified by Jack and HAS. | |
| */ | |
| #include "Python.h" | |
| #include "pymactoolbox.h" | |
| #include <Carbon/Carbon.h> | |
| #if APPLE_SUPPORTS_QUICKTIME | |
| static PyObject * | |
| PyOSA_GetAppTerminology(PyObject* self, PyObject* args) | |
| { | |
| AEDesc theDesc = {0,0}; | |
| FSSpec fss; | |
| ComponentInstance defaultComponent = NULL; | |
| SInt16 defaultTerminology = 0; | |
| Boolean didLaunch = 0; | |
| OSAError err; | |
| long modeFlags = 0; | |
| if (!PyArg_ParseTuple(args, "O&|i", PyMac_GetFSSpec, &fss, &modeFlags)) | |
| return NULL; | |
| /* | |
| ** Note that we have to use the AppleScript component here. Who knows why | |
| ** OSAGetAppTerminology should require a scripting component in the | |
| ** first place, but it does. Note: doesn't work with the generic scripting | |
| ** component, which is unfortunate as the AS component is currently very | |
| ** slow (~1 sec?) to load, but we just have to live with this. | |
| */ | |
| defaultComponent = OpenDefaultComponent (kOSAComponentType, 'ascr'); | |
| err = GetComponentInstanceError (defaultComponent); | |
| if (err) return PyMac_Error(err); | |
| err = OSAGetAppTerminology ( | |
| defaultComponent, | |
| kOSAModeNull, | |
| &fss, | |
| defaultTerminology, | |
| &didLaunch, | |
| &theDesc | |
| ); | |
| if (err) return PyMac_Error(err); | |
| return Py_BuildValue("O&i", AEDesc_New, &theDesc, didLaunch); | |
| } | |
| static PyObject * | |
| PyOSA_GetSysTerminology(PyObject* self, PyObject* args) | |
| { | |
| AEDesc theDesc = {0,0}; | |
| ComponentInstance defaultComponent = NULL; | |
| SInt16 defaultTerminology = 0; | |
| OSAError err; | |
| /* Accept any args for sake of backwards compatibility, then ignore them. */ | |
| defaultComponent = OpenDefaultComponent (kOSAComponentType, 'ascr'); | |
| err = GetComponentInstanceError (defaultComponent); | |
| if (err) return PyMac_Error(err); | |
| err = OSAGetSysTerminology ( | |
| defaultComponent, | |
| kOSAModeNull, | |
| defaultTerminology, | |
| &theDesc | |
| ); | |
| if (err) return PyMac_Error(err); | |
| return Py_BuildValue("O&", AEDesc_New, &theDesc); | |
| } | |
| #endif /* APPLE_SUPPORTS_QUICKTIME */ | |
| /* | |
| * List of methods defined in the module | |
| */ | |
| static struct PyMethodDef OSATerminology_methods[] = | |
| { | |
| #if APPLE_SUPPORTS_QUICKTIME | |
| {"GetAppTerminology", | |
| (PyCFunction) PyOSA_GetAppTerminology, | |
| METH_VARARGS, | |
| "Get an application's terminology. GetAppTerminology(path) --> AEDesc"}, | |
| {"GetSysTerminology", | |
| (PyCFunction) PyOSA_GetSysTerminology, | |
| METH_VARARGS, | |
| "Get the AppleScript language's terminology. GetSysTerminology() --> AEDesc"}, | |
| #endif /* APPLE_SUPPORTS_QUICKTIME */ | |
| {NULL, (PyCFunction) NULL, 0, NULL} | |
| }; | |
| void | |
| initOSATerminology(void) | |
| { | |
| if (PyErr_WarnPy3k("In 3.x, the OSATerminology module is removed.", 1) < 0) | |
| return; | |
| Py_InitModule("OSATerminology", OSATerminology_methods); | |
| } |