| 1 | /*
|
|---|
| 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 |
|
|---|
| 14 | extern int
|
|---|
| 15 | doscript(const char *command)
|
|---|
| 16 | {
|
|---|
| 17 | char *bundleID = "com.apple.Terminal";
|
|---|
| 18 | AppleEvent evt, res;
|
|---|
| 19 | AEDesc desc;
|
|---|
| 20 | OSStatus err;
|
|---|
| 21 |
|
|---|
| 22 | [[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Utilities/Terminal.app/"];
|
|---|
| 23 |
|
|---|
| 24 | // 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 | }
|
|---|
| 37 |
|
|---|
| 38 | // 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 | }
|
|---|
| 57 |
|
|---|
| 58 | return err;
|
|---|
| 59 | }
|
|---|