blob: cbb783ba3e893d09b7395ec6c740b407da5afa74 [file] [log] [blame]
Ronald Oussorenc629be82006-06-07 18:58:01 +00001/*
2 * doscript.c
3 * PythonLauncher
4 *
5 * Created by Jack Jansen on Wed Jul 31 2002.
6 * Copyright (c) 2002 __MyCompanyName__. All rights reserved.
7 *
8 */
9
10#import <Cocoa/Cocoa.h>
11#import <ApplicationServices/ApplicationServices.h>
12#import "doscript.h"
13
Ronald Oussorencc879a02013-07-07 09:49:23 +020014extern int
Ronald Oussorenc629be82006-06-07 18:58:01 +000015doscript(const char *command)
16{
Ronald Oussorencc879a02013-07-07 09:49:23 +020017 char *bundleID = "com.apple.Terminal";
18 AppleEvent evt, res;
19 AEDesc desc;
20 OSStatus err;
Ronald Oussorenc629be82006-06-07 18:58:01 +000021
Ronald Oussorencc879a02013-07-07 09:49:23 +020022 [[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Utilities/Terminal.app/"];
Ronald Oussorenf2ef92c2008-05-02 21:42:35 +000023
Ronald Oussorencc879a02013-07-07 09:49:23 +020024 // Build event
25 err = AEBuildAppleEvent(kAECoreSuite, kAEDoScript,
26 typeApplicationBundleID,
27 bundleID, strlen(bundleID),
28 kAutoGenerateReturnID,
29 kAnyTransactionID,
30 &evt, NULL,
31 "'----':utf8(@)", strlen(command),
32 command);
33 if (err) {
34 NSLog(@"AEBuildAppleEvent failed: %ld\n", (long)err);
35 return err;
36 }
Ronald Oussorenf2ef92c2008-05-02 21:42:35 +000037
Ronald Oussorencc879a02013-07-07 09:49:23 +020038 // Send event and check for any Apple Event Manager errors
39 err = AESendMessage(&evt, &res, kAEWaitReply, kAEDefaultTimeout);
40 AEDisposeDesc(&evt);
41 if (err) {
42 NSLog(@"AESendMessage failed: %ld\n", (long)err);
43 return err;
44 }
45 // Check for any application errors
46 err = AEGetParamDesc(&res, keyErrorNumber, typeSInt32, &desc);
47 AEDisposeDesc(&res);
48 if (!err) {
49 AEGetDescData(&desc, &err, sizeof(err));
50 NSLog(@"Terminal returned an error: %ld", (long)err);
51 AEDisposeDesc(&desc);
52 } else if (err == errAEDescNotFound) {
53 err = noErr;
54 } else {
55 NSLog(@"AEGetPArmDesc returned an error: %ld", (long)err);
56 }
Ronald Oussorenf2ef92c2008-05-02 21:42:35 +000057
Ronald Oussorencc879a02013-07-07 09:49:23 +020058 return err;
Ronald Oussorenc629be82006-06-07 18:58:01 +000059}