17db96d56Sopenharmony_ci/*
27db96d56Sopenharmony_ci *  doscript.c
37db96d56Sopenharmony_ci *  PythonLauncher
47db96d56Sopenharmony_ci *
57db96d56Sopenharmony_ci *  Created by Jack Jansen on Wed Jul 31 2002.
67db96d56Sopenharmony_ci *  Copyright (c) 2002 __MyCompanyName__. All rights reserved.
77db96d56Sopenharmony_ci *
87db96d56Sopenharmony_ci */
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci#import <Cocoa/Cocoa.h>
117db96d56Sopenharmony_ci#import <ApplicationServices/ApplicationServices.h>
127db96d56Sopenharmony_ci#import "doscript.h"
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciextern int
157db96d56Sopenharmony_cidoscript(const char *command)
167db96d56Sopenharmony_ci{
177db96d56Sopenharmony_ci    char *bundleID = "com.apple.Terminal";
187db96d56Sopenharmony_ci    AppleEvent evt, res;
197db96d56Sopenharmony_ci    AEDesc desc;
207db96d56Sopenharmony_ci    OSStatus err;
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci    [[NSWorkspace sharedWorkspace] launchApplication:@"Terminal.app"];
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci    // Build event
257db96d56Sopenharmony_ci    err = AEBuildAppleEvent(kAECoreSuite, kAEDoScript,
267db96d56Sopenharmony_ci                             typeApplicationBundleID,
277db96d56Sopenharmony_ci                             bundleID, strlen(bundleID),
287db96d56Sopenharmony_ci                             kAutoGenerateReturnID,
297db96d56Sopenharmony_ci                             kAnyTransactionID,
307db96d56Sopenharmony_ci                             &evt, NULL,
317db96d56Sopenharmony_ci                             "'----':utf8(@)", strlen(command),
327db96d56Sopenharmony_ci                             command);
337db96d56Sopenharmony_ci    if (err) {
347db96d56Sopenharmony_ci        NSLog(@"AEBuildAppleEvent failed: %ld\n", (long)err);
357db96d56Sopenharmony_ci        return err;
367db96d56Sopenharmony_ci    }
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci    // Send event and check for any Apple Event Manager errors
397db96d56Sopenharmony_ci    err = AESendMessage(&evt, &res, kAEWaitReply, kAEDefaultTimeout);
407db96d56Sopenharmony_ci    AEDisposeDesc(&evt);
417db96d56Sopenharmony_ci    if (err) {
427db96d56Sopenharmony_ci        NSLog(@"AESendMessage failed: %ld\n", (long)err);
437db96d56Sopenharmony_ci        return err;
447db96d56Sopenharmony_ci    }
457db96d56Sopenharmony_ci    // Check for any application errors
467db96d56Sopenharmony_ci    err = AEGetParamDesc(&res, keyErrorNumber, typeSInt32, &desc);
477db96d56Sopenharmony_ci    AEDisposeDesc(&res);
487db96d56Sopenharmony_ci    if (!err) {
497db96d56Sopenharmony_ci        AEGetDescData(&desc, &err, sizeof(err));
507db96d56Sopenharmony_ci        NSLog(@"Terminal returned an error: %ld", (long)err);
517db96d56Sopenharmony_ci        AEDisposeDesc(&desc);
527db96d56Sopenharmony_ci    } else if (err == errAEDescNotFound) {
537db96d56Sopenharmony_ci        err = noErr;
547db96d56Sopenharmony_ci    } else {
557db96d56Sopenharmony_ci        NSLog(@"AEGetPArmDesc returned an error: %ld", (long)err);
567db96d56Sopenharmony_ci    }
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci    return err;
597db96d56Sopenharmony_ci}
60