# 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 ..."
