mirror of https://github.com/python/cpython
113 lines
3.5 KiB
Python
113 lines
3.5 KiB
Python
# 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 ..."
|