Home | History | Annotate | Download | only in Modules
      1 /*
      2 ** An interface to the application scripting related functions of the OSA API.
      3 **
      4 ** GetAppTerminology - given an FSSpec/posix path to an application,
      5 **                         returns its aevt (scripting terminology) resource(s)
      6 **
      7 ** GetSysTerminology - returns the AppleScript language component's
      8 **                         aeut (scripting terminology) resource
      9 **
     10 ** Written by Donovan Preston and slightly modified by Jack and HAS.
     11 */
     12 #include "Python.h"
     13 #include "pymactoolbox.h"
     14 
     15 #include <Carbon/Carbon.h>
     16 
     17 #if APPLE_SUPPORTS_QUICKTIME
     18 static PyObject *
     19 PyOSA_GetAppTerminology(PyObject* self, PyObject* args)
     20 {
     21     AEDesc theDesc = {0,0};
     22     FSSpec fss;
     23     ComponentInstance defaultComponent = NULL;
     24     SInt16 defaultTerminology = 0;
     25     Boolean didLaunch = 0;
     26     OSAError err;
     27     long modeFlags = 0;
     28 
     29     if (!PyArg_ParseTuple(args, "O&|i", PyMac_GetFSSpec, &fss, &modeFlags))
     30              return NULL;
     31 
     32     /*
     33     ** Note that we have to use the AppleScript component here. Who knows why
     34     ** OSAGetAppTerminology should require a scripting component in the
     35     ** first place, but it does. Note: doesn't work with the generic scripting
     36     ** component, which is unfortunate as the AS component is currently very
     37     ** slow (~1 sec?) to load, but we just have to live with this.
     38     */
     39     defaultComponent = OpenDefaultComponent (kOSAComponentType, 'ascr');
     40     err = GetComponentInstanceError (defaultComponent);
     41     if (err) return PyMac_Error(err);
     42     err = OSAGetAppTerminology (
     43     defaultComponent,
     44     kOSAModeNull,
     45     &fss,
     46     defaultTerminology,
     47     &didLaunch,
     48     &theDesc
     49     );
     50     if (err) return PyMac_Error(err);
     51     return Py_BuildValue("O&i", AEDesc_New, &theDesc, didLaunch);
     52 }
     53 
     54 static PyObject *
     55 PyOSA_GetSysTerminology(PyObject* self, PyObject* args)
     56 {
     57     AEDesc theDesc = {0,0};
     58     ComponentInstance defaultComponent = NULL;
     59     SInt16 defaultTerminology = 0;
     60     OSAError err;
     61 
     62     /* Accept any args for sake of backwards compatibility, then ignore them. */
     63 
     64     defaultComponent = OpenDefaultComponent (kOSAComponentType, 'ascr');
     65     err = GetComponentInstanceError (defaultComponent);
     66     if (err) return PyMac_Error(err);
     67     err = OSAGetSysTerminology (
     68     defaultComponent,
     69     kOSAModeNull,
     70     defaultTerminology,
     71     &theDesc
     72     );
     73     if (err) return PyMac_Error(err);
     74     return Py_BuildValue("O&", AEDesc_New, &theDesc);
     75 }
     76 #endif /* APPLE_SUPPORTS_QUICKTIME */
     77 
     78 /*
     79  * List of methods defined in the module
     80  */
     81 static struct PyMethodDef OSATerminology_methods[] =
     82 {
     83 #if APPLE_SUPPORTS_QUICKTIME
     84     {"GetAppTerminology",
     85         (PyCFunction) PyOSA_GetAppTerminology,
     86         METH_VARARGS,
     87         "Get an application's terminology. GetAppTerminology(path) --> AEDesc"},
     88     {"GetSysTerminology",
     89         (PyCFunction) PyOSA_GetSysTerminology,
     90         METH_VARARGS,
     91         "Get the AppleScript language's terminology. GetSysTerminology() --> AEDesc"},
     92 #endif /* APPLE_SUPPORTS_QUICKTIME */
     93     {NULL, (PyCFunction) NULL, 0, NULL}
     94 };
     95 
     96 void
     97 initOSATerminology(void)
     98 {
     99     if (PyErr_WarnPy3k("In 3.x, the OSATerminology module is removed.", 1) < 0)
    100         return;
    101     Py_InitModule("OSATerminology", OSATerminology_methods);
    102 }
    103