diff --git a/documentation/README.darwin.html b/documentation/README.darwin.html new file mode 100644 index 000000000..0efc7fdce --- /dev/null +++ b/documentation/README.darwin.html @@ -0,0 +1,159 @@ + +
+
+#
+# EPICS
+#
+EPICS_BASE="${HOME}/src/EPICS/work/epics/base"
+EPICS_EXTENSIONS="${HOME}/src/EPICS/work/epics/extensions"
+. "${EPICS_BASE}"/startup/Site.profile
+
+cd to the EPICS base top-level source directory.
+make.
++Many extensions build and run properly on OS X. To build and run medm, first +obtain the X11 run-time and developer packages from Apple and the OpenMotif3 +package from Fink. + +
+Code written in Objective-C can be included in host or IOC applications. +Here are a couple of short Objective-C examples which can be used to send +AppleScript events to other applications on the OS X machine. + +
+/*
+ * exampleAppleScriptRecord.m
+ *
+ * Simple Objective-C/AppleScript subroutine record
+ *
+ * To use this record in an application:
+ *
+ * 1) Make the following changes to the application Makefile:
+ * - Add exampleAppleScriptRecord.m to the application SRCS.
+ * - Add -framework Foundation to the application LDFLAGS.
+ * 2) Add the following line to the application database description:
+ * function(exampleAppleScriptProcess)
+ * 3) Add a record to the application database:
+ * record(sub,"setVolume")
+ * {
+ * field(SNAM,"exampleAppleScriptProcess")
+ * }
+ */
+#import <Foundation/Foundation.h>
+#include <subRecord.h>
+#include <alarm.h>
+#include <errlog.h>
+#include <recGbl.h>
+
+/*
+ * Shim between EPICS and NSAppleScript class.
+ */
+long
+exampleAppleScriptProcess(struct subRecord *psub)
+ {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSDictionary *err;
+ NSAppleScript *nsa;
+
+ nsa = [[NSAppleScript alloc] initWithSource:[NSString stringWithFormat:
+ @"tell application \"Finder\" to set volume %g\n", psub->a]];
+ if ([nsa executeAndReturnError:&err] == nil) {
+ errlogPrintf("Failed to run AppleScript: %s\n",
+ [[err objectForKey:NSAppleScriptErrorMessage] cString]);
+ recGblSetSevr(psub, SOFT_ALARM, INVALID_ALARM);
+ }
+ [nsa release];
+ [pool release];
+ return 0;
+}
+
+
+==============================================================================
+/*
+ * runAppleScript.m
+ *
+ * Simple Objective-C/AppleScript shim to allow EPICS application to
+ * send arbitrary AppleScript messages to other applications.
+ *
+ * To use this subroutine in an application make the following
+ * changes to the application Makefile:
+ * - Add runAppleScript.m to the application SRCS.
+ * - Add -framework Foundation to the application LDFLAGS.
+ */
+#import <Foundation/Foundation.h>
+#include <errlog.h>
+
+int
+runAppleScript(const char *format, ...)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSString *script;
+ NSMutableDictionary *err;
+ NSAppleScript *nsa;
+ va_list args;
+ int ret = 0;
+
+ va_start(args, format);
+ script = [[NSString alloc] initWithFormat:
+ [NSString stringWithCString:format] arguments:args];
+ va_end(args);
+ err = [NSMutableDictionary dictionaryWithCapacity:10];
+ nsa = [[NSAppleScript alloc] initWithSource:script];
+ if ([nsa executeAndReturnError:&err] == nil) {
+ errlogPrintf("Failed to run AppleScript: %s\n",
+ [[err objectForKey:NSAppleScriptErrorMessage] cString]);
+ ret = -1;
+ }
+ [script release];
+ [nsa release];
+ [pool release];
+ return ret;
+}
+
+
+$Id$
+
+