| /* |
| * |
| * This is a simple module to allow the |
| * user to compile and execute an applescript |
| * which is passed in as a text item. |
| * |
| * Sean Hummel <seanh@prognet.com> |
| * 1/20/98 |
| * RealNetworks |
| * |
| * Jay Painter <jpaint@serv.net> <jpaint@gimp.org> <jpaint@real.com> |
| * |
| * |
| */ |
| #include "OSAm.h" |
| #include "ScriptRunner.h" |
| #include <AppleEvents.h> |
| |
| |
| |
| /* |
| * Boiler plate generated from "genmodule.py" |
| */ |
| static PyObject *ErrorObject; |
| static char OSAm_DoCommand__doc__[] = ""; |
| |
| |
| |
| static PyObject * |
| OSAm_RunCompiledScript (self, args) |
| PyObject *self; |
| PyObject *args; |
| { |
| char *commandStr = NULL; |
| char *outpath = NULL; |
| OSErr myErr; |
| AEDesc temp; |
| EventRecord event; |
| |
| temp.dataHandle = NULL; |
| |
| if (!PyArg_ParseTuple (args, "s", &commandStr)) |
| return NULL; |
| |
| myErr = ExecuteScriptFile (commandStr, NULL, &temp); |
| |
| if (temp.dataHandle != NULL && temp.descriptorType == 'TEXT') |
| { |
| char *line; |
| DescType typeCode; |
| long dataSize = 0; |
| |
| HLock (temp.dataHandle); |
| |
| dataSize = GetHandleSize (temp.dataHandle); |
| |
| if (dataSize > 0) |
| { |
| PyObject *result = PyString_FromStringAndSize ((*temp.dataHandle), |
| dataSize); |
| |
| AEDisposeDesc (&temp); |
| |
| if (!result) |
| { |
| printf ("OSAm.error Out of memory.\n"); |
| Py_INCREF (Py_None); |
| return Py_None; |
| } |
| |
| return result; |
| } |
| } |
| |
| if (myErr != noErr) |
| { |
| PyErr_Mac (ErrorObject, myErr); |
| return NULL; |
| } |
| |
| |
| Py_INCREF (Py_None); |
| return Py_None; |
| } |
| |
| |
| |
| |
| static PyObject * |
| OSAm_CompileAndSave (self, args) |
| PyObject *self; |
| PyObject *args; |
| { |
| char *commandStr = NULL; |
| char *outpath = NULL; |
| OSErr myErr; |
| AEDesc temp; |
| EventRecord event; |
| |
| temp.dataHandle = NULL; |
| |
| if (!PyArg_ParseTuple (args, "ss", &commandStr, &outpath)) |
| return NULL; |
| |
| myErr = CompileAndSave (commandStr, outpath, NULL, &temp); |
| |
| |
| if (temp.dataHandle != NULL && temp.descriptorType == 'TEXT') |
| { |
| char *line; |
| DescType typeCode; |
| long dataSize = 0; |
| |
| HLock (temp.dataHandle); |
| |
| dataSize = GetHandleSize (temp.dataHandle); |
| |
| if (dataSize > 0) |
| { |
| PyObject *result = PyString_FromStringAndSize ((*temp.dataHandle), |
| dataSize); |
| |
| AEDisposeDesc (&temp); |
| |
| if (!result) |
| { |
| printf ("OSAm.error Out of memory.\n"); |
| Py_INCREF (Py_None); |
| return Py_None; |
| } |
| |
| return result; |
| } |
| |
| } |
| |
| if (myErr != noErr) |
| { |
| |
| PyErr_Mac (ErrorObject, myErr); |
| return NULL; |
| } |
| |
| |
| Py_INCREF (Py_None); |
| return Py_None; |
| } |
| |
| |
| |
| static PyObject * |
| OSAm_CompileAndExecute (self, args) |
| PyObject *self; |
| PyObject *args; |
| { |
| char *commandStr; |
| OSErr myErr; |
| AEDesc temp; |
| EventRecord event; |
| |
| temp.dataHandle = NULL; |
| |
| if (!PyArg_ParseTuple (args, "s", &commandStr)) |
| return NULL; |
| |
| myErr = CompileAndExecute (commandStr, &temp, NULL); |
| |
| if (temp.dataHandle != NULL && temp.descriptorType == 'TEXT') |
| { |
| char *line; |
| DescType typeCode; |
| long dataSize = 0; |
| |
| HLock (temp.dataHandle); |
| |
| dataSize = GetHandleSize (temp.dataHandle); |
| |
| if (dataSize > 0) |
| { |
| PyObject *result = PyString_FromStringAndSize ((*temp.dataHandle), |
| dataSize); |
| |
| AEDisposeDesc (&temp); |
| |
| if (!result) |
| { |
| printf ("OSAm.error Out of memory.\n"); |
| Py_INCREF (Py_None); |
| return Py_None; |
| } |
| |
| return result; |
| } |
| } |
| |
| if (myErr != noErr) |
| { |
| |
| PyErr_Mac (ErrorObject, myErr); |
| return NULL; |
| } |
| |
| |
| Py_INCREF (Py_None); |
| return Py_None; |
| } |
| |
| |
| |
| /* |
| * List of methods defined in the module |
| */ |
| static struct PyMethodDef OSAm_methods[] = |
| { |
| {"CompileAndExecute", |
| (PyCFunction) OSAm_CompileAndExecute, |
| METH_VARARGS, |
| OSAm_DoCommand__doc__}, |
| |
| {"CompileAndSave", |
| (PyCFunction) OSAm_CompileAndSave, |
| METH_VARARGS, |
| OSAm_DoCommand__doc__}, |
| |
| {"RunCompiledScript", |
| (PyCFunction) OSAm_RunCompiledScript, |
| METH_VARARGS, |
| OSAm_DoCommand__doc__}, |
| |
| {NULL, (PyCFunction) NULL, 0, NULL} |
| }; |
| |
| |
| |
| static char OSAm_module_documentation[] = ""; |
| |
| |
| /* |
| * PYTHON Module Initalization |
| */ |
| void |
| initOSAm () |
| { |
| PyObject *m, *d; |
| |
| /* Create the module and add the functions */ |
| m = Py_InitModule4 ("OSAm", |
| OSAm_methods, |
| OSAm_module_documentation, |
| (PyObject *) NULL, PYTHON_API_VERSION); |
| |
| |
| /* Add some symbolic constants to the module */ |
| d = PyModule_GetDict (m); |
| ErrorObject = PyString_FromString ("OSAm.error"); |
| PyDict_SetItemString (d, "error", ErrorObject); |
| |
| |
| /* Check for errors */ |
| if (PyErr_Occurred ()) |
| Py_FatalError ("can't initialize module OSAm"); |
| } |