File: doscript.m

package info (click to toggle)
pypy3 7.3.20%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 212,340 kB
  • sloc: python: 2,100,989; ansic: 540,684; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (59 lines) | stat: -rw-r--r-- 1,748 bytes parent folder | download | duplicates (13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
 *  doscript.c
 *  PythonLauncher
 *
 *  Created by Jack Jansen on Wed Jul 31 2002.
 *  Copyright (c) 2002 __MyCompanyName__. All rights reserved.
 *
 */

#import <Cocoa/Cocoa.h>
#import <ApplicationServices/ApplicationServices.h>
#import "doscript.h"

extern int
doscript(const char *command)
{
    char *bundleID = "com.apple.Terminal";
    AppleEvent evt, res;
    AEDesc desc;
    OSStatus err;

    [[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Utilities/Terminal.app/"];

    // Build event
    err = AEBuildAppleEvent(kAECoreSuite, kAEDoScript,
                             typeApplicationBundleID,
                             bundleID, strlen(bundleID),
                             kAutoGenerateReturnID,
                             kAnyTransactionID,
                             &evt, NULL,
                             "'----':utf8(@)", strlen(command),
                             command);
    if (err) {
        NSLog(@"AEBuildAppleEvent failed: %ld\n", (long)err);
        return err;
    }

    // Send event and check for any Apple Event Manager errors
    err = AESendMessage(&evt, &res, kAEWaitReply, kAEDefaultTimeout);
    AEDisposeDesc(&evt);
    if (err) {
        NSLog(@"AESendMessage failed: %ld\n", (long)err);
        return err;
    }
    // Check for any application errors
    err = AEGetParamDesc(&res, keyErrorNumber, typeSInt32, &desc);
    AEDisposeDesc(&res);
    if (!err) {
        AEGetDescData(&desc, &err, sizeof(err));
        NSLog(@"Terminal returned an error: %ld", (long)err);
        AEDisposeDesc(&desc);
    } else if (err == errAEDescNotFound) {
        err = noErr;
    } else {
        NSLog(@"AEGetPArmDesc returned an error: %ld", (long)err);
    }

    return err;
}