cpython/Mac/Contrib/osam/OSAm.c

263 lines
4.5 KiB
C

/*
*
* 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");
}