Update of /cvsroot/python/python/dist/src/Mac/OSX/PythonLauncher In directory usw-pr-cvs1:/tmp/cvs-serv4089 Modified Files: FileSettings.m MyDocument.m Added Files: doscript.h doscript.m Log Message: Implemented starting Python in a terminal window. The implementation isn't optimal, especially if Terminal wasn't running yet, but it works. --- NEW FILE: doscript.h --- /* * doscript.h * PythonLauncher * * Created by Jack Jansen on Wed Jul 31 2002. * Copyright (c) 2002 __MyCompanyName__. All rights reserved. * */ #include <Carbon/Carbon.h> extern int doscript(const char *command); --- NEW FILE: doscript.m --- /* * 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" /* I assume I could pick these up from somewhere, but where... */ #define CREATOR 'trmx' #define ACTIVATE_CMD 'misc' #define ACTIVATE_SUITE 'actv' #define DOSCRIPT_CMD 'dosc' #define DOSCRIPT_SUITE 'core' #define WITHCOMMAND 'cmnd' /* ... and there's probably also a better way to do this... */ #define START_TERMINAL "/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal &" extern int doscript(const char *command) { OSErr err; AppleEvent theAEvent, theReply; AEAddressDesc terminalAddress; AEDesc commandDesc; OSType terminalCreator = CREATOR; /* set up locals */ AECreateDesc(typeNull, NULL, 0, &theAEvent); AECreateDesc(typeNull, NULL, 0, &terminalAddress); AECreateDesc(typeNull, NULL, 0, &theReply); AECreateDesc(typeNull, NULL, 0, &commandDesc); /* create the "activate" event for Terminal */ err = AECreateDesc(typeApplSignature, (Ptr) &terminalCreator, sizeof(terminalCreator), &terminalAddress); if (err != noErr) { NSLog(@"doscript: AECreateDesc: error %d\n", err); goto bail; } err = AECreateAppleEvent(ACTIVATE_SUITE, ACTIVATE_CMD, &terminalAddress, kAutoGenerateReturnID, kAnyTransactionID, &theAEvent); if (err != noErr) { NSLog(@"doscript: AECreateAppleEvent(activate): error %d\n", err); goto bail; } /* send the event */ err = AESend(&theAEvent, &theReply, kAEWaitReply, kAENormalPriority, kAEDefaultTimeout, NULL, NULL); if ( err == -600 ) { int count=10; /* If it failed with "no such process" try to start Terminal */ err = system(START_TERMINAL); if ( err ) { NSLog(@"doscript: system(): %s\n", strerror(errno)); goto bail; } do { sleep(1); /* send the event again */ err = AESend(&theAEvent, &theReply, kAEWaitReply, kAENormalPriority, kAEDefaultTimeout, NULL, NULL); } while (err == -600 && --count > 0); if ( err == -600 ) NSLog(@"doscript: Could not activate Terminal\n"); } if (err != noErr) { NSLog(@"doscript: AESend(activate): error %d\n", err); goto bail; } /* create the "doscript with command" event for Terminal */ err = AECreateAppleEvent(DOSCRIPT_SUITE, DOSCRIPT_CMD, &terminalAddress, kAutoGenerateReturnID, kAnyTransactionID, &theAEvent); if (err != noErr) { NSLog(@"doscript: AECreateAppleEvent(doscript): error %d\n", err); goto bail; } /* add the command to the apple event */ err = AECreateDesc(typeChar, command, strlen(command), &commandDesc); if (err != noErr) { NSLog(@"doscript: AECreateDesc(command): error %d\n", err); goto bail; } err = AEPutParamDesc(&theAEvent, WITHCOMMAND, &commandDesc); if (err != noErr) { NSLog(@"doscript: AEPutParamDesc: error %d\n", err); goto bail; } /* send the event to the Finder */ err = AESend(&theAEvent, &theReply, kAEWaitReply, kAENormalPriority, kAEDefaultTimeout, NULL, NULL); if (err != noErr) { NSLog(@"doscript: AESend(docommand): error %d\n", err); goto bail; } /* clean up and leave */ bail: AEDisposeDesc(&commandDesc); AEDisposeDesc(&theAEvent); AEDisposeDesc(&terminalAddress); AEDisposeDesc(&theReply); return err; } Index: FileSettings.m =================================================================== RCS file: /cvsroot/python/python/dist/src/Mac/OSX/PythonLauncher/FileSettings.m,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FileSettings.m 29 Jul 2002 21:36:35 -0000 1.1 --- FileSettings.m 31 Jul 2002 13:15:59 -0000 1.2 *************** *** 166,170 **** others, script, ! with_terminal? "" : " &"]; } --- 166,170 ---- others, script, ! with_terminal? "&& exit" : " &"]; } Index: MyDocument.m =================================================================== RCS file: /cvsroot/python/python/dist/src/Mac/OSX/PythonLauncher/MyDocument.m,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** MyDocument.m 29 Jul 2002 21:36:35 -0000 1.1 --- MyDocument.m 31 Jul 2002 13:15:59 -0000 1.2 *************** *** 9,12 **** --- 9,13 ---- #import "MyDocument.h" #import "MyAppDelegate.h" + #import "doscript.h" @implementation MyDocument *************** *** 72,81 **** int sts; ! if ([settings with_terminal]) { ! NSLog(@"Terminal not implemented yet\n"); ! return NO; } - cmdline = [[settings commandLineForScript: script] cString]; - sts = system(cmdline); if (sts) { NSLog(@"Exit status: %d\n", sts); --- 73,82 ---- int sts; ! cmdline = [[settings commandLineForScript: script] cString]; ! if ([settings with_terminal]) { ! sts = doscript(cmdline); ! } else { ! sts = system(cmdline); } if (sts) { NSLog(@"Exit status: %d\n", sts);
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4