2 * Launch the PythonSlave.py script.
3 * This works exactly as if you'd double clicked on the file in the Finder, which
4 * not surprisingly is how its implemented (via the AppleEvents route of course).
6 * Largely based on code submitted by Mark Roseman <roseman@cpsc.ucalgary.ca>
12 pascal Boolean
MyFileFilter(CInfoPBPtr PB
);
13 FileFilterUPP gMyFileFilterUPP
= NULL
;
15 Boolean
GetPythonSlaveSpec(FSSpec
* docSpec
) {
16 StandardFileReply reply
;
21 //if (!gMyFileFilterUPP)
22 gMyFileFilterUPP
= NewFileFilterProc( MyFileFilter
);
24 StandardGetFile(gMyFileFilterUPP
, 0, typeList
, &reply
);
26 DisposePtr((Ptr
)gMyFileFilterUPP
);
29 return 0; /* user cancelled */
31 docSpec
->vRefNum
= reply
.sfFile
.vRefNum
;
32 docSpec
->parID
= reply
.sfFile
.parID
;
33 BlockMove(reply
.sfFile
.name
, docSpec
->name
, 64);
37 pascal Boolean
MyFileFilter(CInfoPBPtr PB
) {
38 OSType fType
; /* file type */
39 OSType fCreator
; /* file creator */
41 fType
=((HParmBlkPtr
)PB
)->fileParam
.ioFlFndrInfo
.fdType
;
42 fCreator
= ((HParmBlkPtr
)PB
)->fileParam
.ioFlFndrInfo
.fdCreator
;
44 if (fType
== 'TEXT' &&
50 OSErr
LaunchPythonSlave(FSSpec
* docSpec
) {
53 AEAddressDesc finderAddress
;
54 AppleEvent theEvent
, theReply
;
55 OSType finderSig
= 'MACS';
56 AliasHandle DirAlias
, FileAlias
;
58 AEDesc aeDirDesc
, listElem
;
60 err
= AECreateDesc(typeApplSignature
, (Ptr
)&finderSig
, 4, &finderAddress
);
61 if(err
!= noErr
) return err
;
63 err
= AECreateAppleEvent('FNDR', 'sope', &finderAddress
,
64 kAutoGenerateReturnID
, kAnyTransactionID
, &theEvent
);
65 if(err
!= noErr
) return err
;
67 FSMakeFSSpec(docSpec
->vRefNum
, docSpec
->parID
, NULL
, &dirSpec
);
68 NewAlias(NULL
, &dirSpec
, &DirAlias
);
69 NewAlias(NULL
, docSpec
, &FileAlias
);
70 err
= AECreateList(NULL
, 0, 0, &fileList
);
71 HLock((Handle
)DirAlias
);
72 AECreateDesc(typeAlias
, (Ptr
)*DirAlias
, GetHandleSize((Handle
)DirAlias
), &aeDirDesc
);
73 HUnlock((Handle
)DirAlias
);
74 if ((err
= AEPutParamDesc(&theEvent
, keyDirectObject
, &aeDirDesc
)) == noErr
) {
75 AEDisposeDesc(&aeDirDesc
);
76 HLock((Handle
)FileAlias
);
77 AECreateDesc(typeAlias
, (Ptr
)*FileAlias
, GetHandleSize((Handle
)FileAlias
), &listElem
);
78 HLock((Handle
)FileAlias
);
79 err
= AEPutDesc(&fileList
, 0, &listElem
);
81 AEDisposeDesc(&listElem
);
82 err
= AEPutParamDesc(&theEvent
, 'fsel', &fileList
);
83 AEDisposeDesc(&fileList
);
85 err
= AESend(&theEvent
, &theReply
, kAENoReply
+kAENeverInteract
,
86 kAENormalPriority
, kAEDefaultTimeout
, 0L, 0L);
87 if(err
!= noErr
) return err
;
89 err
= AEDisposeDesc(&theEvent
);
90 if(err
!= noErr
) return err
;
92 err
= AEDisposeDesc(&theReply
);