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 @@ + + +Installation notes for EPICS on Mac OS X (Darwin) + + + + +

Building EPICS base

+ + +

Building EPICS extensions

+

+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. + +

Objective-C and AppleScript

+

+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$ + +