mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			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 ..."
							 |