diff options
Diffstat (limited to 'Mac/Lib/test/tae.py')
-rw-r--r-- | Mac/Lib/test/tae.py | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/Mac/Lib/test/tae.py b/Mac/Lib/test/tae.py new file mode 100644 index 0000000..73c36b9 --- /dev/null +++ b/Mac/Lib/test/tae.py @@ -0,0 +1,112 @@ +# The oldest AppleEvent test program. +# Its function has been overtaken by echo.py and tell.py. + +import AE +from AppleEvents import * +import Evt +from Events import * +import struct +import aetools +import macfs +import sys +import MacOS + +MacOS.EnableAppswitch(0) + +def aehandler(request, reply): + tosend = [] + print 'request:', aetools.unpackevent(request) + param = request.AEGetParamDesc(keyDirectObject, typeWildCard) + if param.type == typeAEList: + n = param.AECountItems() + print 'List has', n, 'items' + for i in range(1, 1+n): + type, item = param.AEGetNthDesc(i, typeFSS) + data = item.data + print 'item', i, ':', type, item.type, len(data), 'bytes' + vol, dir, fnlen = struct.unpack('hlb', data[:7]) + filename = data[7:7+fnlen] + print 'vol:', vol, '; dir:', dir, '; filename:', `filename` + print 'full path:', macfs.FSSpec((vol,dir,filename)).as_pathname() + tosend.append(item) + else: + pass + print 'param:', (param.type, param.data[:20]), param.data[20:] and '...' + if tosend: + passtothink(tosend) + + +def passtothink(list): + target = AE.AECreateDesc(typeApplSignature, 'KAHL') + event = AE.AECreateAppleEvent(kCoreEventClass, + kAEOpenDocuments, + target, + kAutoGenerateReturnID, + kAnyTransactionID) + aetools.packevent(event, {keyDirectObject: list}) + reply = event.AESend(kAENoReply | kAEAlwaysInteract | kAECanSwitchLayer, + kAENormalPriority, + kAEDefaultTimeout) + #print "Reply:", aetools.unpackevent(reply) + return + event = AE.AECreateAppleEvent(kCoreEventClass, + kAEOpenApplication, + target, + kAutoGenerateReturnID, + kAnyTransactionID) + reply = event.AESend(kAENoReply | kAEAlwaysInteract | kAECanSwitchLayer, + kAENormalPriority, + kAEDefaultTimeout) + +def unihandler(req, rep): + print 'unihandler' + aehandler(req, rep) + +quit = 0 +def quithandler(req, rep): + global quit + quit = 1 + +def corehandler(req, rep): + print 'core event!' + parameters, attributes = aetools.unpackevent(req) + print "event class =", attributes['evcl'] + print "event id =", attributes['evid'] + print 'parameters:', parameters + # echo the arguments, to see how Script Editor formats them + aetools.packevent(rep, parameters) + +def wildhandler(req, rep): + print 'wildcard event!' + parameters, attributes = aetools.unpackevent(req) + print "event class =", attributes['evcl'] + print "event id =", attributes['evid'] + print 'parameters:', parameters + +AE.AEInstallEventHandler(typeAppleEvent, kAEOpenApplication, aehandler) +AE.AEInstallEventHandler(typeAppleEvent, kAEOpenDocuments, aehandler) +AE.AEInstallEventHandler(typeAppleEvent, kAEPrintDocuments, aehandler) +AE.AEInstallEventHandler(typeAppleEvent, kAEQuitApplication, quithandler) +AE.AEInstallEventHandler(typeAppleEvent, typeWildCard, unihandler) +AE.AEInstallEventHandler('core', typeWildCard, corehandler) +#AE.AEInstallEventHandler(typeWildCard, typeWildCard, wildhandler) + + +def main(): + global quit + quit = 0 + while not quit: + ok, e = Evt.WaitNextEvent(-1, 60) + if ok: + print 'Event:', e + if e[0] == 23: # kHighLevelEvent + AE.AEProcessAppleEvent(e) + elif e[0] == keyDown and chr(e[1]&0xff) == '.' and e[4]&cmdKey: + raise KeyboardInterrupt, "Command-Period" + else: + MacOS.HandleEvent(e) + +if __name__ == '__main__': + main() + +print "This module is obsolete -- use echo.py or tell.py ..." |