summaryrefslogtreecommitdiffstats
path: root/Mac/Contrib/osam
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>1998-08-18 14:54:11 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>1998-08-18 14:54:11 (GMT)
commit7cc5735ef26a60df9d1bc3554c1912f951a90308 (patch)
tree5c391a5a9b8e4f6d1932205d9d8ff1283542caef /Mac/Contrib/osam
parent1d6a6ea1a819a645a3a8841205b10cf33eb04493 (diff)
downloadcpython-7cc5735ef26a60df9d1bc3554c1912f951a90308.zip
cpython-7cc5735ef26a60df9d1bc3554c1912f951a90308.tar.gz
cpython-7cc5735ef26a60df9d1bc3554c1912f951a90308.tar.bz2
Initial revision
Diffstat (limited to 'Mac/Contrib/osam')
-rw-r--r--Mac/Contrib/osam/OSAm.c262
-rw-r--r--Mac/Contrib/osam/OSAm.exp1
-rw-r--r--Mac/Contrib/osam/OSAm.h30
-rw-r--r--Mac/Contrib/osam/OSAm.prj.hqx358
-rw-r--r--Mac/Contrib/osam/ScriptRunner.c289
-rw-r--r--Mac/Contrib/osam/ScriptRunner.h30
6 files changed, 970 insertions, 0 deletions
diff --git a/Mac/Contrib/osam/OSAm.c b/Mac/Contrib/osam/OSAm.c
new file mode 100644
index 0000000..a9c3445
--- /dev/null
+++ b/Mac/Contrib/osam/OSAm.c
@@ -0,0 +1,262 @@
+/*
+ *
+ * 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");
+}
diff --git a/Mac/Contrib/osam/OSAm.exp b/Mac/Contrib/osam/OSAm.exp
new file mode 100644
index 0000000..d567a95
--- /dev/null
+++ b/Mac/Contrib/osam/OSAm.exp
@@ -0,0 +1 @@
+initOSAm
diff --git a/Mac/Contrib/osam/OSAm.h b/Mac/Contrib/osam/OSAm.h
new file mode 100644
index 0000000..2fd0469
--- /dev/null
+++ b/Mac/Contrib/osam/OSAm.h
@@ -0,0 +1,30 @@
+/*
+ *
+ * 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>
+ *
+ *
+ */
+
+#pragma once
+
+
+/* Python API */
+#include "Python.h"
+#include "macglue.h"
+
+
+/* Macintosh API */
+#include <Types.h>
+#include <AppleEvents.h>
+#include <Processes.h>
+#include <Files.h>
+#include <Gestalt.h>
+#include <Events.h>
diff --git a/Mac/Contrib/osam/OSAm.prj.hqx b/Mac/Contrib/osam/OSAm.prj.hqx
new file mode 100644
index 0000000..a744952
--- /dev/null
+++ b/Mac/Contrib/osam/OSAm.prj.hqx
@@ -0,0 +1,358 @@
+(This file must be converted with BinHex 4.0)
+
+:#%p63@dZF(*U!%e08(*$9dP&!3!!!-f(!*!%llTMEfpX!!!!!`!!!5J!!--A!!$
+%2`!!#8J!!!"M!3)"!*!*3fpNC9GKFR*TEh)J8(*[DQ9MG!#3lJ3!N!N'!3$rr`#
+3#2rr!C!&!*!%(J%"!*!)QCN!!$rr2rmrr`%!!!%!#3CYEfjKBfm!N"`%!#J!#J(
+#!S!!+!!+!F)#J!#3%!%!!!%!V!&A!4N#HJ$J!!#XC3!!IV-!!!#4!!!!S!!!$1S
+!!"!!N!54!'*KFf9XD@jP3DmM*@3!)MSJEA8"!!!'!3!!"`%!!!J"!!!*!3!!#J%
+!!!X"!!!$!!!!"`!!!#3"!!!!!3!!#`)!!!-#!!!'!J!!"`)!!!J#!!!*!J!!#J)
+!!!X!!!!(!!!!*!)!!!!#!!!,!!!!33!!!'!!!!0T!!!%!*!%33"K!*!%!@%!N!3
+"B3#3"!&K!*!(!3!!!!)!!!!$!!!!"!!!!!8!!!!'!*"d!3!!!`!!!!8!!!!N!3!
+!!!%!!!P#Tb!%!!%"!!!"!3!"!!!"!3%!N!S%!*!*"J%!rrm!N!Mrr`'3"3#3""i
+"!3#3#*QC!!!rrcrr2rm"!!!"!!N'E@pZB@0[!*!F"!!S!!S"`J+!!#J!#J(#!S!
+!N"!"!!!"!&J!VJ$&!KS"0`!!V'8!!"fdH(JZ3dC00MK,1P"bEfTPBh3J6@PcB`"
+iH#j$4Ndf1%Xk4@4TG'pb!(Ki,N0'66Bi5cT'Efjd!(Ki,N0'66Bi5cT3FQpUC@0
+d)%9iG(*KF`"iH#j$4Ndf1%Xk3h9cG'pY)%YPHAG[FQ4c!(Ki,N0'66Bi5cT"Bf0
+PFh-J8'&dD(-!H(JZ3dC00MK,1N*eD@aN)%9iG(*KF`"iH#j$4Ndf1%Xk0MK,)%0
+[C'9(C@i!H(JZ3dC00MK,1MBi5b"%DA0KFh0PE@*XCA)!H(JZ3dC00MK,1MBi5b"
+-D@jVCA)!H(JZ3dC00MK,1MBi5b"3FQpUC@0d!(Ki,N0'66Bi5cT$,d-V+b"$Efe
+`D@aPFJ"iH#j$4Ndf1%Xk3bp$+bXJ9f&bEQPZCh-!H(JZ3dC00MK,1N0'66Bi5`"
+iH#j$4Ndf1%Xk8'&cBf&X)%0[EA"TE'9b!(Ki,N0'66Bi5cT3BA0MB@`J9f&bEQP
+ZCh-!H(JZ3dC00MK,1P"33b"$Ef4P4f9Z!(Ki,N0'66Bi5cT38%-J4'PcBA0cC@e
+LE'9b!(Ki,N0'66Bi5cT38%-J6'PZDf9b!(Ki,N0'66Bi5cT38%-J8%9'!(Ki,N0
+'66Bi5cT38%-J8(*[DQ9MG!"iH#j$4Ndf1%Xk8&"$3A0Y)&"KEQ9X!(Ki,N0'66B
+i5cT5CASJ3fpYF'PXCA)!H(JZ3dC00MK,1P4KFQGPG#"6CA4dD@jRF`"iH#j$4Nd
+f1%Xk4QPXC5"0BA"`D@jRF`"iH#j`F'-k8(*[DQ9MG#"0DA0M!(Ki,R"`BcT&C'P
+dEh)!H(JZF("M1NC[ER3!H(JZF("M1P"bEfTPBh3J4AKdFQ&c!(Ki,R"`BcT$GA0
+dEfdJ5f9jGfpbC(-!H(JZF("M1N&MBf9cFb"3BA4SF`"iH#j`F'-k3R9TE'3J4AK
+dFQ&c!(Ki,R"`BcSf1%XJ3fpNC8GPEJ"iH#j`F'-k0MK,)%4TFf&cFf9YBQaPFJ"
+iH#j`F'-k0MK,)%aTEQYPFJ"iH#j`F'-k0MK,)&"bEfTPBh3!H(JZF("M1N-[3bX
+V)%0[EA"TE'9b!(Ki,R"`BcT$,d-V+b"ABA*ZD@jRF`"iH#j`F'-k3dC00MK,!(K
+i,R"`BcT3BA0MB@`J3fpYF'PXCA)!H(JZF("M1P"KFf0KE#"ABA*ZD@jRF`"iH#j
+`F'-k8&"$)%0[C'9(C@i!H(JZF("M1P"33b"%DA0KFh0PE@*XCA)!H(JZF("M1P"
+33b"-D@jVCA)!H(JZF("M1P"33b"348B!H(JZF("M1P"33b"3FQpUC@0d!(Ki,R"
+`BcT38%0"FfdJ8'&ZC@`!H(JZF("M1P*PHL"$Efe`D@aPFJ"iH#j`F'-k9'&bCf9
+d)&0PG(4TEQGc!(Ki,R"`BcT'D@aP)%eKF("TEQGc!&"bEfTPBh3J4QPXC5"-DA0
+d!(Ki,N0'66Bi5cT*8L"2F(4TE@PkCA)!H(JZ3dC00MK,1NeKBdp6)%ePFQGP)&"
+KEQ9X!(Ki,R"`BcT*8L"2F(4TE@PkCA)!H(JZF("M1NeKBdp6)%ePFQGP)&"KEQ9
+X!(Ki,N0'66Bi5cT%C@*eCfGPFL"8BA*RCA3!H(JZ3dC00MK,1NC88#"3B@jPE!"
+iH#j$4Ndf1%Xk5Q&fB5"-B@jRG@&RC3"iH#j$4Ndf1%Xk5Q&fB5"2GA4`GA3!H(J
+Z3dC00MK,1NTKGQ%J8(*[DQ9MG!"iH#j$4Ndf1%Xk5Q&fB84[Bb"3FQpUC@0d!(K
+i,N0'66Bi5cTAD@j53b"$Efe`D@aPFJ"iH#j$4Ndf1%XkH$Jf)%0[C'9(C@i!H(J
+Z3dC00MK,1RJi0L"&H'0PF(4TEfjc)&"KEQ9X!(Ki,N0'66Bi5cTi1$BJ6'PZDf9
+b!(Ki,N0'66Bi5cTi1$BJ8(*[DQ9MG!"iH#j`F'-k4'9LG@GRCA)J9'&bCf9d!(K
+i,R"`BcT'9&!J8'&ZC@`!H(JZF("M1NTKGQ%J6'&ZCh9KCf8!H(JZF("M1NTKGQ%
+J6h9dF(9d!(Ki,R"`BcT+BACK)&"bEfTPBh3!H(JZF("M1NTKGQ&%Ef-J8(*[DQ9
+MG!"iH#j`F'-k9fPZ8N-J3fpYF'PXCA)!H(JZF("M1RJi0L"$Ef4P4f9Z!(Ki,R"
+`BcTi1$BJ4AKMCA"dD@pZFb"3B@jPE!"iH#j`F'-kH$Jf)%aTEQYPFJ"iH#j`F'-
+kH$Jf)&"bEfTPBh3!6e0"E5j$4Ndf1%Xk3h9cG'pY)%YPHAG[FQ4c!%p63@dZ3dC
+00MK,1N&MBf9cFb"3BA4SF`"28d&Y,N0'66Bi5cT8BA*RCA3J8f9dG'PZCh-!6e0
+"E5j$4Ndf1%Xk4QPXC5"0BA"`D@jRF`"28d&Y,N0'66Bi5cT#G@PXC#"&H(4bBA-
+!6e0"E5j$4Ndf1%Xk4'9LG@GRCA)J9'&bCf9d!%p63@dZ3dC00MK,1MBi5b"$Ef4
+P4f9Z!%p63@dZ3dC00MK,1MBi5b"%DA0KFh0PE@*XCA)!6e0"E5j$4Ndf1%Xk0MK
+,)%aTEQYPFJ"28d&Y,N0'66Bi5cSf1%XJ8(*[DQ9MG!"28d&Y,N0'66Bi5cT$,d-
+V+b"$Efe`D@aPFJ"28d&Y,N0'66Bi5cT$,d-V+b"ABA*ZD@jRF`"28d&Y,N0'66B
+i5cT$4Ndf1%X!6e0"E5j$4Ndf1%Xk4P43)&"KEQ9X!%p63@dZ3dC00MK,1NP5)%p
+`G'PYDATPFJ"28d&Y,N0'66Bi5cT+BACK)%aKEQGeB@GP!%p63@dZ3dC00MK,1NT
+KGQ%J6h9dF(9d!%p63@dZ3dC00MK,1NTKGQ%J8(*[DQ9MG!"28d&Y,N0'66Bi5cT
++BACK4'pM)&"bEfTPBh3!6e0"E5j$4Ndf1%Xk6@&M6e-J6@9bCf8J8'&ZC@`!6e0
+"E5j$4Ndf1%Xk8'&cBf&X)%0[EA"TE'9b!%p63@dZ3dC00MK,1P"KFf0KE#"ABA*
+ZD@jRF`"28d&Y,N0'66Bi5cT38%-J3fpNC8GPEJ"28d&Y,N0'66Bi5cT38%-J4'P
+cBA0cC@eLE'9b!%p63@dZ3dC00MK,1P"33b"-D@jVCA)!6e0"E5j$4Ndf1%Xk8&"
+$)&"&4J"28d&Y,N0'66Bi5cT38%-J8(*[DQ9MG!"28d&Y,N0'66Bi5cT38%0"Ffd
+J8'&ZC@`!6e0"E5j$4Ndf1%Xk8Q9k)%0[EA"TE'9b!%p63@dZ3dC00MK,1PGTEP*
+$)%0[EA"TE'9b!%p63@dZ3dC00MK,1RJi0L"$Ef4P4f9Z!%p63@dZ3dC00MK,1RJ
+i0L"&H'0PF(4TEfjc)&"KEQ9X!%p63@dZ3dC00MK,1RJi0L"-D@jVCA)!6e0"E5j
+$4Ndf1%XkH$Jf)&"bEfTPBh3!6e0"E5j`F'-k3h9cG'pY)%YPHAG[FQ4c!%p63@d
+ZF("M1N&MBf9cFb"3BA4SF`"28d&Y,R"`BcT8BA*RCA3J8f9dG'PZCh-!6e0"E5j
+`F'-k4QPXC5"0BA"`D@jRF`"28d&Y,R"`BcT#G@PXC#"&H(4bBA-!6e0"E5j`F'-
+k4'9LG@GRCA)J9'&bCf9d!%p63@dZF("M1MBi5b"$Ef4P4f9Z!%p63@dZF("M1MB
+i5b"%DA0KFh0PE@*XCA)!6e0"E5j`F'-k0MK,)%aTEQYPFJ"28d&Y,R"`BcSf1%X
+J8(*[DQ9MG!"28d&Y,R"`BcT$,d-V+b"$Efe`D@aPFJ"28d&Y,R"`BcT$,d-V+b"
+ABA*ZD@jRF`"28d&Y,R"`BcT$4Ndf1%X!6e0"E5j`F'-k4P43)&"KEQ9X!%p63@d
+ZF("M1NP5)%p`G'PYDATPFJ"28d&Y,R"`BcT+BACK)%aKEQGeB@GP!%p63@dZF("
+M1NTKGQ%J6h9dF(9d!%p63@dZF("M1NTKGQ%J8(*[DQ9MG!"28d&Y,R"`BcT+BAC
+K4'pM)&"bEfTPBh3!6e0"E5j`F'-k6@&M6e-J6@9bCf8J8'&ZC@`!6e0"E5j`F'-
+k8'&cBf&X)%0[EA"TE'9b!%p63@dZF("M1P"KFf0KE#"ABA*ZD@jRF`"28d&Y,R"
+`BcT38%-J3fpNC8GPEJ"28d&Y,R"`BcT38%-J4'PcBA0cC@eLE'9b!%p63@dZF("
+M1P"33b"-D@jVCA)!6e0"E5j`F'-k8&"$)&"&4J"28d&Y,R"`BcT38%-J8(*[DQ9
+MG!"28d&Y,R"`BcT38%0"FfdJ8'&ZC@`!6e0"E5j`F'-k8Q9k)%0[EA"TE'9b!%p
+63@dZF("M1PGTEP*$)%0[EA"TE'9b!%p63@dZF("M1RJi0L"$Ef4P4f9Z!%p63@d
+ZF("M1RJi0L"&H'0PF(4TEfjc)&"KEQ9X!%p63@dZF("M1RJi0L"-D@jVCA)!6e0
+"E5j`F'-kH$Jf)&"bEfTPBh3!N2m!N2m!N2m!N#%"!*!(&`!!!!)!N!FS!!!!!`#
+3"cF!!!!%!*!(8!!!!!8!N!GU!!!!"J#3"i%!!!!(!*!(Q!!!!!J!N!HZ!!!!#3#
+3"mN!!!!+!*!(hJ!!!!X!N!Id!!!!$!#3"J%0!!!!$3#3"J%Q!!!!$J#3"J%h!!!
+!$`#3"J&4!!!!%!#3"J&V!!!!%3#3"J'"!!!!%J#3"J'F!!!!%`#3"J'a!!!!&!#
+3"J($!!!!&3#3"J(C!!!!&J#3"J(`!!!!&`#3"J)(!!!!'!#3"J)K!!!!'3#3"J)
+j!!!!'J#3"J*0!!!!'`#3"J*E!!!!(!#3"J*R!!!!(3#3"J*p!!!!(J#3"J+8!!!
+!(`#3"J+S!!!!)!#3"J+m!!!!)3#3"J,2!!!!)J#3"J,R!!!!)`#3"J,j!!!!*!#
+3"J--!!!!*3#3"J-L!!!!*J#3"J-i!!!!*`#3"J0'!!!!+!#3"J0G!!!!+3#3"J0
+d!!!!+J#3"J1(!!!!+`#3"J1I!!!!,!#3"J1a!!!!,3#3"J2!!!!!,J#3"J26!!!
+!,`#3"J2R!!!!-!#3"J2l!!!!-3#3"J35!!!!-J#3"J3R!!!!-`#3"J3j!!!!0!#
+3"J43!!!!03#3"J4X!!!!0J#3"J5!!!!!0`#3"J5C!!!!1!#3"J5c!!!!13#3"J6
+(!!!!1J#3"J6I!!!!1`#3"J6e!!!!2!#3"J8-!!!!23#3"J8Q!!!!2J#3"J8r!!!
+!2`#3"J99!!!!3!#3"J9d!!!!33#3"J@*!!!!3J#3"J@I!!!!3`#3"J@f!!!!4!#
+3"JA(!!!!43#3"JAF!!!!4J#3"JA[!!!!4`#3"JB$!!!!5!#3"JBD!!!!53#3"JB
+`!!!!5J#3"JC$!!!!5`#3"JCI!!!!6!#3"JCa!!!!63#3"JD%!!!!6J#3"JDJ!!!
+!6`#3"JDj!!!!8!#3"JE9!!!!83#3"JE[!!!!8J#3"JF)!!!!8`#3"JFN!!!!9!#
+3"JFm!!!!93#3"JGC!!!!9J#3"JG`!!!!9`#3"JH)!!!!@!#3"JHM!!!!@3#3"JH
+q!!!!@J#3"JI4!!!!@`#3"JIR!!!!A!#3"JJ!N!4G!*!'#"S!!!"H!*!'#$)!!!"
+I!*!'#%X!!!"J!*!'#'F!!!"K!*!'#)8!!!"L!*!'#+%!!!"M!*!'#,d!!!"N!*!
+'#08!!!"P!*!'#2)!!!"Q!*!'#3N!!!"R!*!'#4d!!!"S!*!'#68!!!"T!*!'#8i
+!!!"U!*!'#@F!!!"V!*!'#B)!!!"X!*!'#CS!!!"Y!*!'#EX!!!"Z!*!'#G)!!!"
+[!*!'#HS!!!"`!*!'#J-!!!"a!*!'#KN!!!"b!*!'#M)!!!"c!*!'#NN!!!"d!*!
+'#Pm!!!"e!*!'#RJ!!!"f!*!'#Sd!!!"h!*!'#UF!!!"i!*!'#VX!!!"j!*!'#Y!
+!!!"k!*!'#ZJ!!!"l!*!'#`#3"(`!N!B,%!!!!(d!N!B,)`!!!(i!N!B,13!!!(m
+!N!B,8!!!!)!!N!B,C3!!!)%!N!B,H`!!!))!N!B,P!!!!)-!N!B,V`!!!)3!N!B
+,b!!!!)8!N!B,i3!!!)B!N!B,pJ!!!)F!N!B-%!!!!)J!N!B-*!!!!)N!N!B-03!
+!!)S!N!B-5J!!!)X!N!B-B!!!!)`!N!B-GJ!!!)d!N!B-MJ!!!)i!N!B-S`!!!)m
+!N!B-`3!!!*!!!*!'$08!!!#4!*#l8`!!!&3!!!"9!!!!9J!!!%i!!!"4!!!!9`!
+!!&J!!!"C!!!!63!!!&)!!!"3!!!!@J!!!&X!!!"F!!!!A3!!!&i!!!"I!!!!B!!
+!!'%!!!"L!!!!B`!!!'3!!!"P!!!!CJ!!!'F!!!"S!!!!D3!!!%m!!!"U!!!!D`!
+!!'`!!!"Y!!!!EJ!!!(8!!!"f!!!!G`!!!(J!!!"`!!!!F`!!!(N!!!"k!!!!H`!
+!!'m!!!"d!!!!FJ!!!(`!!!"p!!!!IJ!!!(m!!!#!!!!!J3!!!))!!!#$!!!!K!!
+!!)8!!!#'!!!!K`!!!)J!!!#*!!!!LJ!!!)X!!!"a!!!!M!!!!)d!!!#1!!!!M`!
+!!*!!!!!!-J!!!!F!!!!)!!!!#3!!!!S!!!!&!!!!"J!!!!X!!!!-!!!!$3!!!!3
+!!!!h!!!!!3!!!"J!!!!#!!!!1!!!!$-!!!!j!!!!1J!!!$X!!!!m!!!!0!!!!!i
+!!!!2!!!!%!!!!"%!!!!5!!!!%`!!!"3!!!!9!!!!!`#3"aB!!!!A!!!!23!!!$i
+!!!!r!!!!3!!!!%%!!!!J!!!!)3!!!#)!!!!M!!!!(J!!!"m!!!!N!!!!*3!!!#B
+!!!!G!!!!3J!!!"S!!!!a!!!!'`!!!%-!!!!e!!!!4!!!!%8!!!"'!!!!4`!!!$B
+!!!!R!!!!+!!!!#N!!!!U!!!!+`!!!#`!!!!Y!!!!,J!!!"`!!!!C!!!!,`!!!$!
+!!!")!!!!53!!!%S!!!",!!!!6!#323%!!!!#8Np29!#3$!*(8P93!*!(!3G6Eh9
+bBf9c!!!!!dC*6%8#!!!(4NP-43)!!!K'58a&!J!!#8G599!!N!F##8aTBR*KFQP
+PF`!!!!9'58a&!J!!!dC*6%8"!!!$4NP-43)!!!C'58a&!J!!#dC*6%8#!!!+!!"
+!"V%#8!#3$!&*%A!!N#-r!!!!3!!!!dd!!!3!N!3r!#"LBA0PE'PZC5`JBQmJG+K
+[E5`!"J%!N!F"!*!*!3#3"LF!!!!S!!!!+3!!!#S!!!!F!!!!13!!!$i!!!!H!!!
+!#`!!!"-!!!!G!!!!)J!!!%!!!!!1!!!!*3!!!#X!!!!X!!!!,3!!!#%!!!!Q!!!
+!*!!!!$m!!!!Z!!!!$!!!!"3!!!!#!!!!(`!!!#!!!!!0!!!!#3!!!!8!!!!2!!!
+!&3!!!"!!!!!@!!!!%3!!!$S!!!!i!!!!1`!!!$d!!!![!!!!-!!!!")!!!!C!!!
+!-J!!!$-!!!!d!!!!03!!!$B!!!!A!!!!0`!!!"X!!!!'!!!!#J!!!$%!!!!m!!!
+!!3!!!#-!!!!B!*!("!!!!!F!!!!)!!!!'J!!!!-!N)-"!!!!!J!!!!-!!!!%!!!
+!"3!!!!B!N(B#1`!!!#S!N!B#4J!!!#X!N!B#8J!!!#`!N!B#B3!!!#d!N!B#F!!
+!!#i!N!B#G`!!!#m!N!B#K!!!!$!!N!B#P!!!!$%!N!B#T!!!!$)!N!B#X3!!!$-
+!N!B#[3!!!$3!N!B#cJ!!!$8!N!B#f3!!!$B!N!B#i3!!!$F!N!B#l3!!!$J!N!B
+#qJ!!!$N!N!B$"J!!!$S!N!B$&`!!!$X!N!B$(J!!!$`!N!B$*`!!!$d!N!B$0J!
+!!$i!N!B$2`!!!$m!N"%$!!#CQ3#3"(rr!*!%Irm!N!4rr`!!!!%"!!!"!3!"!!F
+ZP5!!N!X"!!!!!J!!!!-!!!!%!!!!"3!!!!B!N(8(!3!"!3!"!3!!!!%!!!`!N!F
+@EAGPFQYcAh"XG@GTEPpMEfjQD@FZD!#3#`%"!!%!N!i"!3%!!!%"!!%!!3%"!!!
+"!3!"!!3!N!d"!3%!N"%"!!!!!J!!!!-!!!!%!!!!"3!!!!B!N(6r!*!(!`!!QCN
+!N!4rr`#3"(rr!*!%Irm!!!!'!3%!!3%!!!!"!3%!!!!"!!!!!3#3"!F"!!%"!!%
+"!!!!!3!!$!#3"aCYGf9bDh0IF'aeCfPZAf0[EQCTCbjS!*!,!3#3%3-!!!p+BAC
+K3faKFh0PFbjUBA)!N""D59!J69GD8!#3"3%!$J#3"`%!N!3+99"*,R"bC@CTH!#
+3&J%!N!8"!!%!N!m#!!%!(!#3'33!N!d$!!!25Q&fB80XBA0cCA-ZDQ&b!*!3@NP
+3)%eA@P!!N!8"!!i!N!F"!*!%#P9355j`FQ9QDAJ!N"B"!*!&!3!"!!!!!`!!!!S
+!!!!$!!!!#,&Q2'crrjJ%!*$r!*$r!*!A!J#3$!-#!3%"!!!"!3-"!*!*"3%!!!-
+!!3#3$JJ!!!!#!!)!!!!&"!!!!`!"!!%k!*$r!*$r!!%!!!$rN!3!!!!#!!%!!6U
+3"!#3r`#3r3%!!!$rN!3!!!!%!!)!!6T0CA4bEhGPFQYc)&0dB@jNBA*N)%aTBR*
+KFRNk690-)%-k!*$r!*$H!3!!!2q3"%!!!!%!!J!"1NeKBdp6)&0eF("[FR3k!*$
+r!*$b!3!!!2q3"%!!!!)!"3%!!!%!N2m!!!!"!!!*6@9bCf8J6h9d!*!f2j!%39"
+36!!"!3!!"%4-4eKMDfPN8(*[DPG68%-!!J#3$!-#!!%"!!!"!3-"!*!*!J!!!!)
+!!J#3*`)!N#%&!3!!!`!"!*!)H(JZ3dC00MK,!&0[GA*MCA-!6'PLFQ&bD@9c!(K
+iE@pNG@aP,Q-!H(JZ3dC00MK,,V8ZCAK`!%e66#"6D%aTBP*eER4TE@9$4Ndf1%X
+Z6'PL!&"jG'K[EN0[FQ9$4Ndf1%X!H(JZF("M!(Ki,R"`Bbke,Q9iF!"08d`J8fK
+-D@*5G@jdD@eP,NaTBJ"3HA4SEfj$Eh*P8&"$!$TiH#j$4Ndf1%XZFfaL!%aTBL"
+*EA"[FR3J0MK,!%e39b"*EA"[FR3J0MK,!%*KE'a[EfiJ5'9XF!"09b"$,d-V+b!
+f1%X!69FJ8'&cBf&X)$Bi5`"09b"5CAS!8%9')%PYF'pbG#!f1'X!1RKi,R"`Bbj
+cE')!6'PL)%PYF'pbG#"38%-!69FJ3bp$+bXJ8&"$!%eA)&"KFf0KE#"38%-!8&"
+$3A0Y!&K$6dC')%PYF'pbG#"38%-!8%9')%PYF'pbG#"38%-!H(JZF(*U,Q9iF!"
+3HA4SEfj$Eh*P!$T0Ef4eE'9c1RKiE@pNG@aP,Q-!1RKi,R"bDLjPH(!!1P"jG'K
+[EN0[FQ8!6@&M6e-J0MK,)%aTEQYPFJ"0B@028b"38%-J6'PZDf9b!%0eFh4[E5"
+,CAPhEh*NF`""Bf0PFh-J8'&dD(-!9'&bCf9d)&0PG(4TEQGc!%CTE'8J6@&`F'P
+ZCh-!3R9TE'3J4AKdFQ&c!%4PBR9RCf9b)&4KFQGPG!!f1%XJ3fpNC8GPEJ!f1%X
+J4'PcBA0cC@eLE'9b!$Bi5b"-D@jVCA)!0MK,)&"bEfTPBh3!3bp$+bXJ3fpYF'P
+XCA)!3bp$+bXJ9f&bEQPZCh-!3dC00MK,!%P5)%p`G'PYDATPFJ"3BA0MB@`J3fp
+YF'PXCA)!8'&cBf&X)&GKFQjTEQGc!&*PHL"$Efe`D@aPFJ"38%-J3fpNC8GPEJ"
+38%-J4'PcBA0cC@eLE'9b!&"33b"-D@jVCA)!8&"$)&"&4J"38%-J8(*[DQ9MG!"
+38%0"FfdJ8'&ZC@`!6e0"E5j$4Ndf1%X!1Np63@dZ3dC00MK,,R0XBJ"28d&Y,Q-
+!6e0"E5jPH(!!8f0bDA"d8R9ZEQ9b,Q-!6e0"E5j`F'-!1Np63@dZF("M,R0XBJ"
+*ER4PFQCKBf9-D@)!3A"`E'96Bh*TF(4-D@)!N*X#!!!!13%!!!)!N!N%!!%!!!!
+kX@Bm2[rrk')!N2m!N2`q!J!!!J#3#33!!3!!!$qaCM`rrrqE$`#3r`#3qJJ!!!!
+#!!)!!!!&"!!!"!!"!!%k!*$r!*$r!!%!!!$rN!3!!!!#!!%!!6U3"!#3r`#3r3%
+!!!$rN!3!!!!%!!)!!6T0CA4bEhGPFQYc)&0dB@jNBA*N)%aTBR*KFRNk690-)%-
+k!*$r!*$H!3!!!2q3"%!!!!)!!J!"1NeKBdp6)&0eF("[FR3k!*$r!*$b!3!!!2q
+3"%!!!!-!"3%!!!%!N2m!!!!*!!!!B5j[GA3!N$SrN!4"8&"-!!!"J&L!!*"#2j!
+%!*!*93'3!!%*!RX!N!i"J!#36`%!!!P0CA*RC5"2GA3!N$BrN!4"8&"-!!%"!!!
+%4%a(@'0VD@43FQpU9e033`!#!!!!!J!#!*!R!J#3)3%!N$3"!*!BC'9QD@jPC#"
+[FL"TFb!!!3%"!*!*!3%"!*!*!J!!#Nj26N&045j&@%8!N"C!!*!%"!#3"!3!!!3
+!N!3%!&8"N!!"#3*l!*!,!J!!#Nj26N&045j&@%8!N"C!!*!%"!#3"!3!!!3!N!3
+%!&8"N!!"#3*l!*!@2j!%39"36!!"!3!!"%4-4eKMDfPN8(*[DPG68%-!"3%!!!-
+!!3#3#%8"!!!'!!!!!J!"!"`!N"X$!!)!+!#3(`%!N!F+!!!!!J#3"a)!!!!$!*!
+((!!!!!3!N!FR!!!!"3#3"cF!!!!'!*!(8J!!!!F!N!GM!!!!#!#3"fS!!!!*!*!
+(G`!!!!S!N!H-!!!!#`#3"jS!!!!-!*!(U3!!!!d!N!Hi!!!!$J#3"mF!!!!2!*!
+(e!!!!"!!N!IK!!!!%3#3"qm!!!!5!*!(pJ!!!"-!N!B""3!!!"3!N!B"%3!!!"8
+!N!B")!!!!"B!N!B",3!!!"F!N!B"1`!!!"J!N!B"3J!!!"N!N!B"8`!!!"S!N!B
+"BJ!!!"X!N!B"E3!!!"`!N!B"H!!!!"d!N!B"M!!!!"i!N!B"Q!!!!"m!N!B"T!!
+!!#!!N!B"Y3!!!#%!N!B"aJ!!!#)!N!B"eJ!!!#-!N!B"i`!!!#3!N!B"m`!!!#8
+!N!B#!3!!!#B!N!B#$J!!!#F!N!B#(J!!!#J!N!B#+J!!!#N!N!B#1`!!!#S!N!B
+#4J!!!#X!N!B#8J!!!#`!N!B#B3!!!#d!N!B#F!!!!#i!N!B#G`!!!#m!N!B#K!!
+!!$!!N!B#P!!!!$%!N!B#T!!!!$)!N!B#X3!!!$-!N!B#[3!!!$3!N!B#cJ!!!$8
+!N!B#f3!!!$B!N!B#i3!!!$F!N!B#l3!!!$J!N!B#qJ!!!$N!N!B$"J!!!$S!N!B
+$&`!!!$X!N!B$(J!!!$`!N!B$*`!!!$d!N!B$0J!!!$i!N!B$2`!!!$m!N!B$63!
+!!%!!N!B$@J!!!%%!N2m!N)N"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!
+"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!%!*!C"`!!6@&M6e-
+J0MK,)%aTEQYPFJ#3r`#3r`#3mNp63@dZ3dC00MK,!*$f!3!"1J#3r`#3r`#3"J%
+!!3#3r`#3r`#3"`N!"!p28d&Y,N0'66Bi5bjcE')!N$"3HA4SFfKXBJ#35$q3"!#
+3#98"N!!"#3*l!*!8!3#35J3!!3#3$J%!)!#3r`!!AepTEQPdD@&XDATP!*!eAh0
+dBA*d!*!jAepdCA*YD@jKG'8!N$J"!!%!N2m!N2m!N2m!N#`9!3%!N!8$!*$r!*!
+,!3#3"!J!N2m!N2m!N!4%4Na8$dePG(*[Gf9bDh-J5Q&fB3#3-%PZG'9bEQ9d)%9
+iF'a[FQ9b!*$r!*$d4%C-9!#3r`!!"`%"!*!%!3#31fPZDA4iD@jTG(Ki!*"f#!!
+"!*!)-XJ!!$,)!!!bb!CcG'4hD@i!N2`(!!"0B@028b"38%-J6'PZDf9b!*$r!*$
+r!*$b6e0"E5j`F'-!N2N"!!%k!*$r!*$r!*!F!J'3"3!"!*!&690*43#3r`#3r`!
+!D(4dF$S[,fTKGQ%ZFh9Z,Q0[E5p`FQpNG@0dFbpUC'X[-5ia,f4[Bh-[BA"T,`#
+3d`8!!3aiH'e[C(9XC5jcE')!N"03@94)FfKXBJ#3F3%rN!3!N!F#!&!!!3!"!!%
+!!3#3r`!8*d024%8R)#G%394"*b!R8%P$9#F!N1`%!!%!N%%#!!3!N%J"!!%!!!-
+!!!!'!J%!N!8"!!)$!*!-!30Z!*!'!3!!"J!!!"`#!3#3"3%!!3-!N!`"!*!)!3!
+!"`!!!$X#!3#3"3%!!3%!N!`"!*!)!3!!#!!!!$`#!3#3"3%!!3%!N!`"!*!)!3!
+!#3!!!$d#!3#3"3%!!3%!N!`"!*!)!3!!#J!!!%!#!3#3"3%!!3-!N!`"!*!)!3!
+!#`!!!%%#!3#3"3%!!3-!N!`"!*!3!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!
+%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$
+rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%
+!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!
+"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#
+3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!
+%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N"Mrr`#3)!%"!!$rN!3!N#!"!3!!rj!%!*!
+C!3!"!*$r!*$r!*!9!3#3'3)!!!T16dj"688Z49K&!*!@3!#3"!3!N!3%!!!%!*!
+%"!"9!C!!!3N#H`#3$3)!!!!J!!!!)3!#!!C0B@028b"38%-J6'PZDf9b!*!4'N&
+38%`!N%"J!!!!3A"`E!#33'!!!!"068a#!*!J6'PL)%PYF'pbG#"38%-!N"C08%a
+'!*!J6'PL)%PYF'pbG#"38%-!N"C09d0%!*"!B!!!!&*68N-!N%"J!!!!9%9B9#j
+LD!"MbUY3!!-`b!!8VG!!!!&q!FUV8!!8CF!!!!,@3Q&XE'p[EL")C@a`!*!'(33
+"bUZ!!"4P`!'(PY3!N!4849K8,Q-!N"j09b"$,d-V+b"38%-!N"K849K8,Q-V+`#
+3(%eA)%-[3bXV)&"33`#3'&4&@&3ZBf-!N"e09b"$,d-V+b"38%-!N"K849K8,Q0
+`!*!G69FJ3bp$+bXJ8&"$!*!B9%9B9#jMF(!!N"a09b"$,d-V+b"38%-!N"K849K
+8,Q9iF!#33&4&@&3ZD!#3(NeA)%-[3bXV)&"33`#3&"!!!!"849K8,R!!N"j09b"
+3BA0MB@`J8&"$!*!A9%9B9#j`BA-!N"a09b"3BA0MB@`J8&"$!*!A9%9B9#j`BfJ
+!N"a09b"$,d-V+b"38%-!N"5!!!!!9%9B9#j`BfJV+`#3'NeA)%-[3bXV)&"33`#
+3&)!!!!"849K8,R)!N"j09b"5CAS!N"j849K8,R-!D'2+Ue!!!c$)!"5Yd!!!!Ai
+"bUY3!"4P`!!!!YC38%0"Ffd!EL")C@`!N!BG"!(+Ui!!&'A!!BH@e!#3"&K$6dB
+!N#"B3dp'4L"*EA"[FR3J8&"$!*!8C'pMG3#33'!!!!"bFh*M!*"!B!!!!(0SE')
+!N#"348BJ5@e`Eh*d)&"33`#3&R0dG@)!N#"348BJ5@e`Eh*d)&"33`#3'LjNEf-
+!N$a3!!!!6@&M6e-J0MK,)%aTEQYPFJ#3%4T"8&"-!*"!B!!!!%&`F'`!N%"J!!!
+!68e-3J#3)%aTBL"*EA"[FR3J0MK,!*!@69"-4J#3)%aTBL"*EA"[FR3J0MK,!*!
+@69G$4!#33'!!!!"23NSJ!*!J69"A)%PYF'pbG#!f1%X!N"C58e*$!*"!B!!!!&4
+&@&3ZBQJ!BmUV8!!$--J!&+h3!!!"IJ(+Ue!!&'A!!!!#eN*KE'a[EfiJ5'9XF!#
+3"Kd%!FUVJ!!8CF!"KjE8!*!%9%9B9#jM!*!H69FJ3bp$+bXJ0MK,!*!B9%9B9#j
+M+bX!N"a09b"$,d-V+b!f1%X!N"K849K8,Q0M!*!G69FJ3bp$+bXJ0MK,!*!B9%9
+B9#jMF!#3(8eA)%-[3bXV)$Bi5`#3'&4&@&3ZBh"`!*!F69FJ3bp$+bXJ0MK,!*!
+B9%9B9#jPH(!!bUY3!!-`b!!8VG!!!!&q!FUV8!!8CF!!!!,@!-FUG!aiUi!"bUj
+%!"199!!!(33"bUZ!!"4P`!'(SM`!N!4849K8,QJ!N"j09b"$,d-V+b!f1%X!N"3
+3!!!!9%9B9#j`!*!H69FJ8'&cBf&X)$Bi5`#3&e4&@&3ZF'&c!*!F69FJ8'&cBf&
+X)$Bi5`#3&e4&@&3ZF'0S!*!F69FJ3bp$+bXJ0MK,!*!8J!!!!&4&@&3ZF'0S+bX
+!N"T09b"$,d-V+b!f1%X!N"5!!!!!9%9B9#jb!*!H69FJ8Q9k!*!H9%9B9#jcC@F
+!bUY3!!-`b!!8VG!!!!&q!FUV8!!8CF!!!!,@!-FUG!aiUi!"bUj%!"199!!!(33
+"bUZ!!"4P`!'(SM`!N!4NEf0e!*"!B!!!!(*cFQ-!N%"J!!!!FfKXBJ#3)&"&4L"
+*EA"[FR3J0MKV!*!@Fh4eBJ#3)&"&4L"*EA"[FR3J0MKV!*!D,Q4[B`#32&!!!!"
+AD@ic-L"i1$BJ6'PZDf9b!*!4#94&@&3ZB`#3(NeA)%-[3bXV)(Ji0J#3'&4&@&3
+ZBbXV!*!F69FJ3bp$+bXJH$Jf!*!B9%9B9#jMF!#3(8eA)%-[3bXV)(Ji0J#3'&4
+&@&3ZBh"`!*!F69FJ3bp$+bXJH$Jf!*!B9%9B9#j`BfJ!N"a09b"$,d-V+b"i1$B
+!N"5!!!!!9%9B9#j`BfJV+`#3'NeA)%-[3bXV)(Ji0J#3&)!!!!"849K8,R*M!*!
+G69FJ9fPZ8N-!N#!ZE'PL!*!F6'PL)%PYF'pbG#"i1$B!N"SZEf*U!*!F6f*U)%P
+YF'pbG#"i1$B!N"C03b"-D@jVCA)!N"J)68e$5!#34&4&@&3ZB`#3(Ne$)%-[3bX
+V!*!F9%9B9#jME(-!N"a03b"$E'&cFb"$Efe`D@aPFJ#3$i!!!!"849K8,Q4PCJ#
+33&4&@&3ZC'pM!*!m%!!!!&4&@&3ZD!#32K!!!!"849K8,R"MD!#3(%e$)%-[3bX
+V!*!BJ!!!!&4&@&3ZG(-!N%&1EfjP!*!G!8e08()!N%"!!!!!6@&M6e-J6@9bCf8
+!N"B(39"36!#33'!!!!""F("X!*"!B!!!!&*68N-!N%"J!!!!9%9B9#jLD!#3(8*
+KE'a[EfiJ5'9XF!#3'&4&@&3ZFJ#3(P*PHJ#3)A*cFQ-!N%"J!!!!FfKXBJ#3433
+!N"!"!*$r!*"%AepcG'&bG!#3I!%!!3#3r`#3r`#3r`#3,"8"!3#3"3-!N2m!N!X
+"!*!%#!#3r`#3r`#3"%4'6&326@9dFQphCA*VFb"+BACK!*!`5@jdCA*ZCA3J4AK
+`E'pbCA)!N2m!N24%4Na8!*$r!!!#!C!&!!%!N!908dP&!*$r!*$r!!"SG(4`1Lm
+[DQ&fB5jcG@iZBfpY,h"bEf4eBh4c,fTNDbma,M%[C'pMFbpKF'N[!*$6"`%"!*!
+%!9pID@jTG'PKE'PkC3#3EepIG'9bAepdCA*YD@jKG'8!N$%)!!%!N!JkMJ!!1Si
+!!$U1!*$r!*!%"3!"$%p63@dZF("M,R0XBJ#3%e"jG'KcD'aL!*"a!6q3"!#3"`)
+!8!!"!!%!!3!"!*$r!"3R3dp%45FJ*d4"9%%R)#G35808*`#3l!3!!3#333)!"!#
+35!%!!J!!!`!!!!S#!3#3"3%!!3-!N!`"!fi!N!B#!!!'!!!!(!)"!*!&!3!"!`#
+3$!%!N!J#!!!(!!!!1`)"!*!&!3!"!3#3$!%!N!J#!!!)!!!!2!)"!*!&!3!"!3#
+3$!%!N!J#!!!*!!!!23)"!*!&!3!"!3#3$!%!N!J#!!!+!!!!3!)"!*!&!3!"!`#
+3$!%!N!J#!!!,!!!!33)"!*!&!3!"!`#3$!%!N"!"!3!!rj!%!*!J!3%!!2q3"!#
+3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!
+%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$
+rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%
+!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!
+"!3!!rj!%!*!J!3%!!2q3"!#3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#
+3)!%"!!$rN!3!N#!"!3!!rj!%!*!J!3%!!2q3"!#3r`#3&d4'6&3!N2m!!!)"N!8
+!!3#3"8e6588!N2m!N2m!!'KdG(!k,bpUBACK,R0eELjMEfd[F(*[C(9MG(-[DQ4
+V,c%Z-5pNEf0c,f&`D5m!N0-%!!%!N%%#!!3!N%J"!*!%&`!!!#)!!`#3"5-!#!#
+3"53!"`#3"58!!J#3"5B!"3#3"5F!!3#3"5J!"J#3"5N!!3#3"5S!"`#3"5X!#3#
+3"5`!$!#3"5d!"!#3"5i!"!#3"5m!!3#3"6!!$J#3"6%!!J#3"6)!!J#3"6-!!`#
+3"63!!3#3"68!"`#3"6B!#!#3"6F!"3#3"6J!!J!!!!)!"NeKBdp6)&"33b"-D@j
+VCA)!N"%D39"36!#33'!!!!""F("X!*"!B!!!!%e06%)!N#"-D@)J5@e`Eh*d)&"
+33`#3&Ne36%B!N#"-D@)J5@e`Eh*d)&"33`#3&NeA3d3!N%"J!!!!8P053`#33'!
+!!!"849K8,Q*S!'2&ET!!!!-`b!!8VH!!!!&j!F9ZN!!!&'A3!!!#eN*KE'a[Efi
+J5'9XF!#3"L@a!F9Z`!!8CG!"JPD8!*!%9%9B9#jM!*!H69FJ3bp$+bXJ8&"$!*!
+B9%9B9#jM+bX!N"a09b"$,d-V+b"38%-!N"K849K8,Q0M!*!G69FJ3bp$+bXJ8&"
+$!*!B9%9B9#jMF!#3(8eA)%-[3bXV)&"33`#3'&4&@&3ZBh"`!*!F69FJ3bp$+bX
+J8&"$!*!B9%9B9#jPH(!!a@k3!!!$--J!&+hJ!!!"H3(&ET!!!"4Pd!!!!YB!8Q9
+kYLKZ`!(&FB3!N!BPX3(&EX!!&'A3!B*Kr!#3"&4&@&3ZD!#3(NeA)%-[3bXV)&"
+33`#3&"!!!!"849K8,R!!N"j09b"3BA0MB@`J8&"$!*!A9%9B9#j`BA-!N"a09b"
+3BA0MB@`J8&"$!*!A9%9B9#j`BfJ!N"a09b"$,d-V+b"38%-!N"5!!!!!9%9B9#j
+`BfJV+`#3'NeA)%-[3bXV)&"33`#3&)!!!!"849K8,R)!N"j09b"5CAS!N"j849K
+8,R-!D'2&ET!!!!-`b!!8VH!!!!&j!F9ZN!!!&'A3!!!#eP"33d&cE3"Z)%KPE!#
+3"L@a!F9Z`!!8CG!"JPD8!*!%@%024J#3)&K$6dC')%PYF'pbG#"38%-!N"4NEf0
+e!*"!B!!!!(*cFQ-!N%"J!!!!FfKXBJ#3)&"&4L"*EA"[FR3J8&"$!*!@Fh4eBJ#
+3)&"&4L"*EA"[FR3J8&"$!*!D,Q4[B`#32&!!!!"0B@028b!f1%XJ6'PZDf9b!*!
+4'N&38%`!N%"J!!!!3A"`E!#33'!!!!"068a#!*!J6'PL)%PYF'pbG#!f1%X!N"C
+08%a'!*!J6'PL)%PYF'pbG#!f1%X!N"C09d0%!*"!B!!!!%p#5L!!N#"08&FJ5@e
+`Eh*d)$Bi5`#3&P*68N-!N%"J!!!!9%9B9#jLD!"MhJ!#&,a!J*S+!80Uj3%j9'm
+!!!!"!*!%!80#B@aXEfpZ)%KPE(!!bJ&U!)J"194Z!80Uj!!j!@K-FJ#3"&4&@&3
+ZB`#3(NeA)%-[3bXV)$Bi5`#3'&4&@&3ZBbXV!*!F69FJ3bp$+bXJ0MK,!*!B9%9
+B9#jMB`#3(8eA)%-[3bXV)$Bi5`#3'&4&@&3ZBh!!N"e09b"$,d-V+b!f1%X!N"K
+849K8,Q0`F!#3(%eA)%-[3bXV)$Bi5`#3'&4&@&3ZCAK`!,a!J*S+!6PAl`&$Bpm
+!N!J"3f2H)!3!1J%k,S!"1&!L!3!!!!&$Bpi"19IZ!Hi!N!B4!*!&9%9B9#jS!*!
+H69FJ3bp$+bXJ0MK,!*!8%!!!!&4&@&3ZF!#3(NeA)&"KFf0KE#!f1%X!N"G849K
+8,R"KF`#3(%eA)&"KFf0KE#!f1%X!N"G849K8,R"MD!#3(%eA)%-[3bXV)$Bi5`#
+3&)!!!!"849K8,R"MD#XV!*!D69FJ3bp$+bXJ0MK,!*!8J!!!!&4&@&3ZFJ#3(Ne
+A)&*PHJ#3(P4&@&3ZFf9R!,a!J*S+!6PAl`&$Bpm!N!J"3f2H)!3!1J%k,S!"1&!
+L!3!!!!&$Bpi"19IZ!Hi!N!B4!*!&C'pMG3#33'!!!!"bFh*M!*"!B!!!!(0SE')
+!N#"348BJ5@e`Eh*d)$BiD`#3&R0dG@)!N#"348BJ5@e`Eh*d)$BiD`#3'LjNEf-
+!N$a3!!!!9fPZ-c)JH$Jf)%aTEQYPFJ#3%3P849K8,Q-!N"j09b"$,d-V+b"i1$B
+!N"K849K8,Q-V+`#3(%eA)%-[3bXV)(Ji0J#3'&4&@&3ZBh!!N"e09b"$,d-V+b"
+i1$B!N"K849K8,Q0`F!#3(%eA)%-[3bXV)(Ji0J#3'&4&@&3ZF'0S!*!F69FJ3bp
+$+bXJH$Jf!*!8J!!!!&4&@&3ZF'0S+bX!N"T09b"$,d-V+b"i1$B!N"5!!!!!9%9
+B9#jbB`#3(8eA)&GTEP*$!*!J,QaTBJ#3(%aTBL"*EA"[FR3JH$Jf!*!D,QpLDJ#
+3(%pLDL"*EA"[FR3JH$Jf!*!@68-J6'PZDf9b!*!B#%e03dJ!N%4849K8,Q-!N"j
+03b"$,d-V+`#3(&4&@&3ZBfac!*!F68-J3faKFh-J3fpYF'PXCA)!N!q!!!!!9%9
+B9#jNC@B!N%"849K8,Q4[B`#32"!!!!"849K8,QJ!N$i3!!!!9%9B9#j`BfJ!N"a
+03b"$,d-V+`#3')!!!!"849K8,R4c!*""6QpZC3#3(3&069"b!*"!3!!!!%eKBdp
+6)%ePFQGP!*!@"d&38%`!N%"J!!!!3A"`E!#33'!!!!"58e*$!*"!B!!!!&4&@&3
+ZBQJ!N"e#B@aXEfpZ)%KPE(!!N"K849K8,R)!N"j5CAS!N#&bFh*M!*"!B!!!!(0
+SE')!N%B$[`!!%!"YFh4b!*!1%lm!!!H!EA0dE!#3$KXr!!!#J'ecG'i!N!i"`!!
+!!#KYFh4T!*!1-GB!!!3!EA0dFJ!!!qJ!N!T'S3!!")"YFh4X!!!$k!#3#Kkr!!!
+"J'ecG'i!!!2S!*!+!bF!!!!+F(*PCJ#Ja-S!!!!"!*!'!c%!!!!`F(*PCJ#J[K3
+!!!!#!*!'!f%!!!"+F(*PCJ#J,r`!!!!$!*!'!kX!!!!8F(*PCJ#JMdd!!!!%!*!
+'4Q%!!!"!EA4cE!!!!!%!N!T[(3!!"D"YG("X!!!!!3#3#J(S!!!!('edE'm!!!!
+"!*!+!J3!!!!3EA4`D3!!!!%!N!S"+!!!!!T`FQ9Q!+$U+`!!!"S!N!B"-J!!!$"
+`FQ9Q!+!%S3!!!"X!N!B"BJ!!!%T`FQ9Q!+!K$!!!!"`!N!B"V!!!!"4`FQ9Q!+$
+k[J!!!"d!N!BNSJ!!!#"YG(0X!!!!!J#3#U(&!!!&S'edF'`!!!!#!*!+!K3!!!!
+FEA4XE`!!!!)!N!S#-!!!!""YG("T!!!!!J#3#MA@!!!%0'edCf`!!!2S!*!+*6S
+!!!)XEA"cD3!!!qJ!N!SG[`!!!-"36(0d!+!$I!!!!$-!N!B#3!!!!#KYFh4T!!!
+$k!#3#J*S!!!!N!"YG("c!!!!!3#3#L!r!!!!N!"YG("c!!!!!J#3#RHK!!!!$'e
+KE'`!N!kY#`!!!,aYBA"X!*!1)l!!!!!DF(*PCJ!rkbJ!!!"1!*!'*j`!!!K3F(*
+PCJ"!$`-!!!"2!*!'6%%!!!B-F(*PCJ"!#r!!!!"3!*!'VFF!!"CiF(*PCJ"!2@%
+!!!"4!*!',q`!!!%(F(*PCJ"!0B!!!!"5!*!'8Nd!!!))F(*PCJ!rk"i!!!"6!*!
+')mS!!!!BF(*PCJ!rMGB!!!"8!*!'!a!!!!!+F(*PCJ!r@[m!!!"9!*!')q)!!!!
+1F(*PCJ!rQAX!!!"@!*!'9&8!!!%'F(*PCJ!rJFX!!!"A!*!')r!!!!!mF(*PCJ!
+r8%J!!!"B!*!'*-)!!!!1F(*PCJ!rcC)!!!"C!*!'99X!!!(DF(*PCJ!r9+8!!!"
+D!*!'9c8!!!-bF(*PCJ!rA'`!!!"E!*!'!aS!!!!-F(*PCJ!rm0N!!!"F!*!'@QF
+!!!%3F(*PCJ!rK!J!!!"G!*!'*0!!!!!bF(*PCJ"!3BS!!!"H!*!'@hF!!!93F(*
+PCJ"!'Zi!!!"I!*!'D-8!!!-5F(*PCJ"!,N`!!!"J!*!'-2-!!!"LF(*PCJ!rZ@S
+!!!"K!*!'*3)!!!!iF(*PCJ"!(Z)!!!"L!*!'-98!!!!0F(*PCJ!rY68!!!"M!*!
+'-@)!!!!8F(*PCJ!rrHB!!!"N!*!')[-!!!!+F(*PCJ"!*4X!!!"P!*!'B-F!!!$
+%F(*PCJ"!6f!!!!"Q!*!'BBX!!!%BF(*PCJ!r8CN!!!"R!*!'DpF!!!#SF(*PCJ"
+!5ZS!!!"S!*!'-AB!!!!ZF(*PCJ!rCL!!!!"T!*!'E(m!!!)-F(*PCJ!rdYd!!!"
+U!*!'-D3!!!!LF(*PCJ!rffm!!!"V!*!'-FB!!!!3F(*PCJ!rIMJ!!!"X!*!'48i
+!!!!DF(*PCJ!re$F!!!"Y!*!'ESX!!!#5F(*PCJ!rT`#3"'i!N!C&MJ!!!%T`FQ9
+Q!%!PP!!!!'m!N!BKi`!!!"T`FQ9Q!$q4R`!!!(!!N!Bk#J!!#&"`FQ9Q!%!PI`!
+!!(%!N!CLS`!!"Ja`FQ9Q!$p[*`!!!()!N!ChV3!!&RK`FQ9Q!%!NAJ!!!(-!N!C
+#@J!!!3G`FQ9Q!$ppZJ!!!(3!N!Ce*`!!!JK`FQ9Q!%!$%!!!!(8!N!BHT`!!!"K
+`FQ9Q!$qq5`!!!(B!N!BKr3!!!!T`FQ9Q!%!9T3!!!(F!N!BLR`!!!!j`FQ9Q!$r
+CV3!!!(J!N!C$B3!!!3C`FQ9Q!$r8CJ!!!(N!N!BLV3!!!$a`FQ9Q!%!MP!!!!(S
+!N!BLr3!!!!j`FQ9Q!$qhFJ!!!(X!N!D1*3!!!GT`FQ9Q!$pd93!!!(`!N!D2r`!
+!!c*`FQ9Q!%"41`!!!(d!N!BM#`!!!!a`FQ9Q!$r@)!!!!(i!N!D6-3!!!4"`FQ9
+Q!$qC@!!!!(m!N!BN,!!!!$*`FQ9Q!%!DXJ!!!)!!N!D833!!"9"`FQ9Q!%"IJ3!
+!!)%!N!DCN3!!!a*`FQ9Q!$r)Z3!!!))!N!C%C`!!!'*`FQ9Q!$qkI!!!!)-!N!B
+NAJ!!!$K`FQ9Q!$qX'`!!!)3!N!BRCJ!!!!e`FQ9Q!$qk(J!!!)8!N!BRF`!!!"4
+`FQ9Q!$qEi3!!!)B!N!BLk3!!!!T`FQ9Q!%"(#3!!!)F!N!DFS`!!!-4`FQ9Q!%!
+Vh`!!!)J!N!DGC`!!!4K`FQ9Q!$rP`!!!!)N!N!DHI`!!!+K`FQ9Q!%!`-J!!!)S
+!N!C%b3!!!#j`FQ9Q!$qiXJ!!!)X!N!DI*`!!!Ja`FQ9Q!%!Y3!!!!)`!N!C%p`!
+!!#*`FQ9Q!%!r(J!!!)d!N!BRK`!!!""`FQ9Q!$pS)J!!!)i!N!C&'3!!!"T`FQ9
+Q!%!J1`!!!)m!N!DK-`!!!**`FQ9Q!$paGJ!!!*!!!*!'4GJ!!!"+F(*PCJ!rGJ8
+!!!#4!*!%H3N!!!:
diff --git a/Mac/Contrib/osam/ScriptRunner.c b/Mac/Contrib/osam/ScriptRunner.c
new file mode 100644
index 0000000..7fd68f6
--- /dev/null
+++ b/Mac/Contrib/osam/ScriptRunner.c
@@ -0,0 +1,289 @@
+/*
+ *
+ * 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 <Resources.h>
+#include <Files.h>
+#include <OSA.h>
+#include <string.h>
+#include "ScriptRunner.h"
+#include <script.h>
+#include <resources.h>
+
+
+
+OSAError LoadScriptingComponent (ComponentInstance * scriptingComponent);
+
+
+/*
+ * store the script as a compile script so that OSA
+ * components may load and execute the script easily
+ */
+OSAError
+CompileAndSave (const char *text,
+ const char *outfile,
+ OSAActiveUPP proc,
+ AEDesc * result)
+{
+
+ OSAError err2 = 0;
+ AEDesc theScript;
+ OSAID compiledScriptID = 0;
+ ComponentInstance scriptingComponent;
+ FSSpec outfilespec;
+ AEDesc theCompiledScript;
+ OSAID scriptid = kOSANullScript;
+ short saveres = 0;
+
+
+
+ /* Initialize theScript here because it is a struct */
+ theScript.dataHandle = NULL;
+ theCompiledScript.dataHandle = NULL;
+
+
+ /* open the component manager */
+ err2 = LoadScriptingComponent (&scriptingComponent);
+ if (err2)
+ return err2; /* <<< Fail quietly?? */
+
+
+ /* construct the AppleEvent Descriptor to contain the text of script */
+ AECreateDesc ('TEXT', text, strlen (text), &theScript);
+
+ err2 = OSACompile (scriptingComponent,
+ &theScript,
+ kOSAModeCompileIntoContext,
+ &scriptid);
+ if (err2)
+ {
+ OSAScriptError (scriptingComponent, kOSAErrorMessage, 'TEXT', result);
+ goto CleanUp;
+ }
+
+
+ err2 = OSAStore (scriptingComponent,
+ scriptid,
+ typeOSAGenericStorage,
+ kOSAModeCompileIntoContext,
+ &theCompiledScript);
+ if (err2)
+ {
+ OSAScriptError (scriptingComponent, kOSAErrorMessage, 'TEXT', result);
+ goto CleanUp;
+ }
+
+
+ c2pstr (outfile);
+ FSMakeFSSpec (0, 0, (StringPtr) outfile, &outfilespec);
+ p2cstr ((StringPtr) outfile);
+
+ FSpDelete (&outfilespec);
+
+ FSpCreateResFile (&outfilespec, 'ToyS', 'osas', smRoman);
+
+ saveres = CurResFile ();
+
+ if (saveres)
+ {
+ short myres = 0;
+ myres = FSpOpenResFile (&outfilespec, fsWrPerm);
+
+ UseResFile (myres);
+ AddResource (theCompiledScript.dataHandle, 'scpt', 128, "\p");
+ CloseResFile (myres);
+ UseResFile (saveres);
+ }
+
+
+CleanUp:
+
+ if (theScript.dataHandle)
+ AEDisposeDesc (&theScript);
+
+ if (theCompiledScript.dataHandle)
+ AEDisposeDesc (&theCompiledScript);
+
+ if (scriptid)
+ OSADispose (scriptingComponent, scriptid);
+
+ if (scriptingComponent != 0)
+ CloseComponent (scriptingComponent);
+
+
+ return err2;
+}
+
+
+OSAError
+CompileAndExecute (const char *text,
+ AEDesc * result,
+ OSAActiveUPP proc)
+{
+ OSAError err2 = 0;
+ AEDesc theScript;
+ OSAID compiledScriptID = 0;
+ ComponentInstance scriptingComponent;
+
+
+ /* initialize theScript here because it is a struct */
+ theScript.dataHandle = NULL;
+
+ /* Open the component manager */
+ err2 = LoadScriptingComponent (&scriptingComponent);
+ if (err2)
+ return err2; /* <<< Fail quietly?? */
+
+
+ /* construct the AppleEvent Descriptor to contain the text of script */
+ AECreateDesc ('TEXT', text, strlen (text), &theScript);
+
+
+ err2 = OSASetActiveProc (scriptingComponent, proc, NULL);
+ if (err2)
+ goto CleanUp;
+
+
+ err2 = OSADoScript (scriptingComponent, &theScript, kOSANullScript, 'TEXT', 0, result);
+ if (err2)
+ {
+ OSAScriptError (scriptingComponent, kOSAErrorMessage, 'TEXT', result);
+ goto CleanUp;
+ }
+
+
+CleanUp:
+
+ if (theScript.dataHandle)
+ AEDisposeDesc (&theScript);
+
+ if (scriptingComponent != 0)
+ CloseComponent (scriptingComponent);
+
+
+ return err2;
+}
+
+
+/*
+ * This routine reads in a saved script file and executes
+ * the script contained within (from a 'scpt' resource.)
+ */
+OSAError
+ExecuteScriptFile (const char *theFilePath,
+ OSAActiveUPP proc,
+ AEDesc * result)
+{
+ OSAError err2;
+ short resRefCon;
+ AEDesc theScript;
+ OSAID compiledScriptID, scriptResultID;
+ ComponentInstance scriptingComponent;
+ FSSpec theFile;
+
+
+ c2pstr (theFilePath);
+ FSMakeFSSpec (0, 0, (StringPtr) theFilePath, &theFile);
+ p2cstr ((StringPtr) theFilePath);
+
+
+ /* open a connection to the OSA */
+ err2 = LoadScriptingComponent (&scriptingComponent);
+ if (err2)
+ return err2; /* <<< Fail quietly?? */
+
+
+ err2 = OSASetActiveProc (scriptingComponent, proc, NULL);
+ if (err2)
+ goto error;
+
+
+ /* now, try and read in the script
+ * Open the script file and get the resource
+ */
+ resRefCon = FSpOpenResFile (&theFile, fsRdPerm);
+ if (resRefCon == -1)
+ return ResError ();
+
+ theScript.dataHandle = Get1IndResource (typeOSAGenericStorage, 1);
+
+ if ((err2 = ResError ()) || (err2 = resNotFound, theScript.dataHandle == NULL))
+ {
+ CloseResFile (resRefCon);
+ return err2;
+ }
+
+ theScript.descriptorType = typeOSAGenericStorage;
+ DetachResource (theScript.dataHandle);
+ CloseResFile (resRefCon);
+ err2 = noErr;
+
+
+ /* give a copy of the script to AppleScript */
+ err2 = OSALoad (scriptingComponent,
+ &theScript,
+ 0L,
+ &compiledScriptID);
+ if (err2)
+ goto error;
+
+ AEDisposeDesc (&theScript);
+ theScript.dataHandle = NULL;
+
+
+ err2 = OSAExecute (scriptingComponent,
+ compiledScriptID,
+ kOSANullScript,
+ 0,
+ &scriptResultID);
+
+ if (compiledScriptID)
+ OSAScriptError (scriptingComponent, kOSAErrorMessage, 'TEXT', result);
+
+ if (err2)
+ goto error;
+
+ /* If there was an error, return it. If there was a result, return it. */
+ (void) OSADispose (scriptingComponent, compiledScriptID);
+
+ if (err2)
+ goto error;
+ else
+ goto done;
+
+error:
+ if (theScript.dataHandle)
+ AEDisposeDesc (&theScript);
+
+
+done:
+
+
+ return err2;
+}
+
+
+OSAError
+LoadScriptingComponent (ComponentInstance * scriptingComponent)
+{
+ OSAError err2;
+
+ /* Open a connection to the Open Scripting Architecture */
+ *scriptingComponent = OpenDefaultComponent (kOSAComponentType,
+ kOSAGenericScriptingComponentSubtype);
+
+ err2 = GetComponentInstanceError (*scriptingComponent);
+
+ return err2;
+}
diff --git a/Mac/Contrib/osam/ScriptRunner.h b/Mac/Contrib/osam/ScriptRunner.h
new file mode 100644
index 0000000..dda7bbb
--- /dev/null
+++ b/Mac/Contrib/osam/ScriptRunner.h
@@ -0,0 +1,30 @@
+/*
+ *
+ * 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>
+ *
+ *
+ */
+#pragma once
+
+#include <OSA.h>
+
+OSAError CompileAndExecute (const char *text,
+ AEDesc *result,
+ OSAActiveUPP proc);
+
+OSAError CompileAndSave (const char *text,
+ const char *outfile,
+ OSAActiveUPP proc,
+ AEDesc *result);
+
+OSAError ExecuteScriptFile (const char *theFile,
+ OSAActiveUPP proc,
+ AEDesc *result);