/Mac/PythonLauncher/doscript.m

http://unladen-swallow.googlecode.com/ · Objective C · 59 lines · 42 code · 6 blank · 11 comment · 7 complexity · e1fc4b3987820b5f4955b8c4e8a78599 MD5 · raw file

  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. #import <Cocoa/Cocoa.h>
  10. #import <ApplicationServices/ApplicationServices.h>
  11. #import "doscript.h"
  12. extern int
  13. doscript(const char *command)
  14. {
  15. char *bundleID = "com.apple.Terminal";
  16. AppleEvent evt, res;
  17. AEDesc desc;
  18. OSStatus err;
  19. [[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Utilities/Terminal.app/"];
  20. // Build event
  21. err = AEBuildAppleEvent(kAECoreSuite, kAEDoScript,
  22. typeApplicationBundleID,
  23. bundleID, strlen(bundleID),
  24. kAutoGenerateReturnID,
  25. kAnyTransactionID,
  26. &evt, NULL,
  27. "'----':utf8(@)", strlen(command),
  28. command);
  29. if (err) {
  30. NSLog(@"AEBuildAppleEvent failed: %d\n", err);
  31. return err;
  32. }
  33. // Send event and check for any Apple Event Manager errors
  34. err = AESendMessage(&evt, &res, kAEWaitReply, kAEDefaultTimeout);
  35. AEDisposeDesc(&evt);
  36. if (err) {
  37. NSLog(@"AESendMessage failed: %d\n", err);
  38. return err;
  39. }
  40. // Check for any application errors
  41. err = AEGetParamDesc(&res, keyErrorNumber, typeSInt32, &desc);
  42. AEDisposeDesc(&res);
  43. if (!err) {
  44. AEGetDescData(&desc, &err, sizeof(err));
  45. NSLog(@"Terminal returned an error: %d", err);
  46. AEDisposeDesc(&desc);
  47. } else if (err == errAEDescNotFound) {
  48. err = noErr;
  49. } else {
  50. NSLog(@"AEGetPArmDesc returned an error: %d", err);
  51. }
  52. return err;
  53. }