view Mac/PythonLauncher/doscript.m @ 51749:1408feec0084 3.0

Merged revisions 69798 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r69798 | benjamin.peterson | 2009-02-19 22:02:38 -0600 (Thu, 19 Feb 2009) | 13 lines Merged revisions 69769,69776 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r69769 | georg.brandl | 2009-02-19 02:30:06 -0600 (Thu, 19 Feb 2009) | 1 line #5310, #3558: fix operator precedence table. ........ r69776 | georg.brandl | 2009-02-19 10:34:51 -0600 (Thu, 19 Feb 2009) | 2 lines #5317: update IronPython URL. ........ ................
author Benjamin Peterson <benjamin@python.org>
date Fri, 20 Feb 2009 04:05:32 +0000
parents 031dfe455585
children 738cba2bf849
line wrap: on
line source

/*
 *  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: %d\n", 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: %d\n", 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: %d", err);
		AEDisposeDesc(&desc);
	} else if (err == errAEDescNotFound) {
		err = noErr;
	} else {
		NSLog(@"AEGetPArmDesc returned an error: %d", err);
	}

	return err;
}