blob: cbb783ba3e893d09b7395ec6c740b407da5afa74 [file] [log] [blame]
Jack Jansenb7276cd2002-07-31 13:15:59 +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 Oussoren4e327c92013-07-07 09:53:08 +020014extern int
Jack Jansenb7276cd2002-07-31 13:15:59 +000015doscript(const char *command)
16{
Ronald Oussoren4e327c92013-07-07 09:53:08 +020017 char *bundleID = "com.apple.Terminal";
18 AppleEvent evt, res;
19 AEDesc desc;
20 OSStatus err;
Jack Jansenb7276cd2002-07-31 13:15:59 +000021
Ronald Oussoren4e327c92013-07-07 09:53:08 +020022 [[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Utilities/Terminal.app/"];
Christian Heimes81ee3ef2008-05-04 22:42:01 +000023
Ronald Oussoren4e327c92013-07-07 09:53:08 +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 }
Christian Heimes81ee3ef2008-05-04 22:42:01 +000037
Ronald Oussoren4e327c92013-07-07 09:53:08 +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 }
Christian Heimes81ee3ef2008-05-04 22:42:01 +000057
Ronald Oussoren4e327c92013-07-07 09:53:08 +020058 return err;
Just van Rossum85e4c672003-01-04 16:26:26 +000059}