completed aete decoded now that I have the docs
diff --git a/Mac/Lib/test/aete.py b/Mac/Lib/test/aete.py
index 5a91d89..205fbdb 100644
--- a/Mac/Lib/test/aete.py
+++ b/Mac/Lib/test/aete.py
@@ -25,14 +25,16 @@
 		if f: f.close()
 
 def realmain():
+	#list('C:System Folder:Extensions:AppleScript\252')
 	#list('C:Tao AppleScript:Finder Liaison:Finder Liaison 1.0')
+	#list('C:Tao AppleScript:Scriptable Text Editor')
 	#list('C:Internet:Eudora 1.4.2:Eudora1.4.2')
-	list('E:Excel 4.0:Microsoft Excel')
+	#list('E:Excel 4.0:Microsoft Excel')
 	#list('C:Internet:Netscape 1.0N:Netscape 1.0N')
 	#find('C:')
-	#find('D:')
-	#find('E:')
-	#find('F:')
+	find('D:')
+	find('E:')
+	find('F:')
 
 def find(dir, maxlevel = 5):
 	hits = []
@@ -52,7 +54,7 @@
 				hits = hits + find(fullname, maxlevel-1)
 		else:
 			ctor, type = MacOS.GetCreatorAndType(fullname)
-			if type == 'APPL':
+			if type in ('APPL', 'FNDR', 'zsys', 'INIT', 'scri', 'cdev'):
 				sys.stderr.write("    %s\n" % `fullname`)
 				try:
 					rf = OpenRFPerm(fullname, 0, '\1')
@@ -82,13 +84,14 @@
 		for i in range(Count1Resources('aeut')):
 			res = Get1IndResource('aeut', 1+i)
 			resources.append(res)
-		print "\nLISTING aete+aeut RESOURCE IN", `fullname`
+		print "\nLISTING aete+aeut RESOURCES IN", `fullname`
 		for res in resources:
-			print res.GetResInfo()
+			print "decoding", res.GetResInfo(), "..."
 			data = res.data
 			try:
 				aete = decode(data)
 				showaete(aete)
+				print "Checking putaete..."
 				f = StringIO.StringIO()
 				putaete(f, aete)
 				newdata = f.getvalue()
@@ -139,6 +142,12 @@
 # It is presented bottom-up instead of top-down because there are  direct
 # references to the lower-level part-decoders from the high-level part-decoders.
 
+def getbyte(f, *args):
+	c = f.read(1)
+	if not c:
+		raise EOFError, 'in getbyte' + str(args)
+	return ord(c)
+
 def getword(f, *args):
 	getalign(f)
 	s = f.read(2)
@@ -181,8 +190,8 @@
 	count = getword(f)
 	list = []
 	for i in range(count):
-		getalign(f)
 		list.append(generic(getitem, f))
+		getalign(f)
 	return list
 
 def alt_generic(what, f, *args):
@@ -202,49 +211,100 @@
 		return record
 	return "BAD GENERIC ARGS: %s" % `what`
 
-getdata = [(getostype, "type"), (getpstr, "description"), (getword, "flags")]
-getoptarg = [(getpstr, "name"), (getostype, "keyword"), (getdata, "what")]
-getcommand = [(getpstr, "name"), (getpstr, "description"),
-	(getostype, "suite code"), (getostype, "command code"),
+getdata = [
+	(getostype, "type"),
+	(getpstr, "description"),
+	(getword, "flags")
+	]
+getargument = [
+	(getpstr, "name"),
+	(getostype, "keyword"),
+	(getdata, "what")
+	]
+getevent = [
+	(getpstr, "name"),
+	(getpstr, "description"),
+	(getostype, "suite code"),
+	(getostype, "event code"),
 	(getdata, "returns"),
 	(getdata, "accepts"),
-	(getlist, "optional arguments", getoptarg)]
-getprop = [(getpstr, "name"), (getostype, "code"), (getdata, "what")]
-getelem = [(getostype, "type"), (getlist, "accessibility", getostype)]
-getclass = [(getpstr, "name"), (getostype, "class code"), (getpstr, "description"),
-	(getlist, "properties", getprop), (getlist, "elements", getelem)]
-getenumitem = [(getpstr, "name"), (getostype, "value"), (getpstr, "description")]
-getenum = [(getostype, "enumtype"), (getlist, "enumitem", getenumitem)]
-getsuite = [(getpstr, "name"), (getpstr, "description"), (getostype, "code"),
-	(getword, "flags1"), (getword, "flags2"),
-	(getlist, "commands", getcommand),
+	(getlist, "optional arguments", getargument)
+	]
+getproperty = [
+	(getpstr, "name"),
+	(getostype, "code"),
+	(getdata, "what")
+	]
+getelement = [
+	(getostype, "type"),
+	(getlist, "keyform", getostype)
+	]
+getclass = [
+	(getpstr, "name"),
+	(getostype, "class code"),
+	(getpstr, "description"),
+	(getlist, "properties", getproperty),
+	(getlist, "elements", getelement)
+	]
+getcomparison = [
+	(getpstr, "operator name"),
+	(getostype, "operator ID"),
+	(getpstr, "operator comment"),
+	]
+getenumerator = [
+	(getpstr, "enumerator name"),
+	(getostype, "enumerator ID"),
+	(getpstr, "enumerator comment")
+	]
+getenumeration = [
+	(getostype, "enumeration ID"),
+	(getlist, "enumerator", getenumerator)
+	]
+getsuite = [
+	(getpstr, "suite name"),
+	(getpstr, "suite description"),
+	(getostype, "suite ID"),
+	(getword, "suite level"),
+	(getword, "suite version"),
+	(getlist, "events", getevent),
 	(getlist, "classes", getclass),
-	(getword, "count???"), (getlist, "enums", getenum)]
-getaete = [(getword, "skip1"), (getword, "skip2"), (getword, "skip3"),
-	(getlist, "suites", getsuite)]
+	(getlist, "comparisons", getcomparison),
+	(getlist, "enumerations", getenumeration)
+	]
+getaete = [
+	(getword, "major/minor version in BCD"),
+	(getword, "language code"),
+	(getword, "script code"),
+	(getlist, "suites", getsuite)
+	]
 
 
 # Display 'aete' resources in a friendly manner.
 # This one's done top-down again...
 
 def showaete(aete):
-	[flags1, flags2, flags3, suites] = aete
-	print "\nGlobal flags: x%x, x%x, x%x\n" % (flags1, flags2, flags3)
+	[version, language, script, suites] = aete
+	major, minor = divmod(version, 256)
+	print "\nVersion %d/%d, language %d, script %d" % \
+		(major, minor, language, script)
 	for suite in suites:
 		showsuite(suite)
 
 def showsuite(suite):
-	[name, desc, code, flags1, flags2, commands, classes, skip1, enums] = suite
+	[name, desc, code, level, version, events, classes, comps, enums] = suite
 	print "\nSuite %s -- %s (%s)" % (`name`, `desc`, `code`)
-	for command in commands:
-		showcommand(command)
-	for classe in classes:
-		showclass(classe)
+	print "Level %d, version %d" % (level, version)
+	for event in events:
+		showevent(event)
+	for cls in classes:
+		showclass(cls)
+	for comp in comps:
+		showcomparison(comp)
 	for enum in enums:
-		showenum(enum)
+		showenumeration(enum)
 
-def showcommand(command):
-	[name, desc, code, subcode, returns, accepts, arguments] = command
+def showevent(event):
+	[name, desc, code, subcode, returns, accepts, arguments] = event
 	print "\n    Command %s -- %s (%s, %s)" % (`name`, `desc`, `code`, `subcode`)
 	print "        returns", showdata(returns)
 	print "        accepts", showdata(accepts)
@@ -255,8 +315,8 @@
 	[name, keyword, what] = arg
 	print "        %s (%s)" % (name, `keyword`), showdata(what)
 
-def showclass(classe):
-	[name, code, desc, properties, elements] = classe
+def showclass(cls):
+	[name, code, desc, properties, elements] = cls
 	print "\n    Class %s (%s) -- %s" % (`name`, `code`, `desc`)
 	for prop in properties:
 		showproperty(prop)
@@ -265,19 +325,23 @@
 
 def showproperty(prop):
 	[name, code, what] = prop
-	print "        property %s (%s)" % (name, code), showdata(what)
+	print "        property %s (%s)" % (`name`, `code`), showdata(what)
 
 def showelement(elem):
-	[code, accessibility] = elem
-	print "        element %s" % `code`, "as", accessibility
+	[code, keyform] = elem
+	print "        element %s" % `code`, "as", keyform
 
-def showenum(enum):
+def showcomparison(comp):
+	[name, code, comment] = comp
+	print "    comparison  %s (%s) -- %s" % (`name`, `code`, comment)
+
+def showenumeration(enum):
 	[code, items] = enum
 	print "\n    Enum %s" % `code`
 	for item in items:
-		showitem(item)
+		showenumerator(item)
 
-def showitem(item):
+def showenumerator(item):
 	[name, code, desc] = item
 	print "        %s (%s) -- %s" % (`name`, `code`, `desc`)
 
@@ -285,7 +349,7 @@
 	[type, description, flags] = data
 	return "%s -- %s %s" % (`type`, `description`, showdataflags(flags))
 
-dataflagdict = {15: "optional", 14: "list", 13: "enum", 12: "writable"}
+dataflagdict = {15: "optional", 14: "list", 13: "enum", 12: "mutable"}
 def showdataflags(flags):
 	bits = []
 	for i in range(16):
@@ -301,30 +365,30 @@
 # Closedly modelled after showaete()...
 
 def putaete(f, aete):
-	[flags1, flags2, flags3, suites] = aete
-	putword(f, flags1)
-	putword(f, flags2)
-	putword(f, flags3)
+	[version, language, script, suites] = aete
+	putword(f, version)
+	putword(f, language)
+	putword(f, script)
 	putlist(f, suites, putsuite)
 
 def putsuite(f, suite):
-	[name, desc, code, flags1, flags2, commands, classes, skip1, enums] = suite
+	[name, desc, code, level, version, events, classes, comps, enums] = suite
 	putpstr(f, name)
 	putpstr(f, desc)
 	putostype(f, code)
-	putword(f, flags1)
-	putword(f, flags2)
-	putlist(f, commands, putcommand)
+	putword(f, level)
+	putword(f, version)
+	putlist(f, events, putevent)
 	putlist(f, classes, putclass)
-	putword(f, skip1)
-	putlist(f, enums, putenum)
+	putlist(f, comps, putcomparison)
+	putlist(f, enums, putenumeration)
 
-def putcommand(f, command):
-	[name, desc, code, subcode, returns, accepts, arguments] = command
+def putevent(f, event):
+	[name, desc, eventclass, eventid, returns, accepts, arguments] = event
 	putpstr(f, name)
 	putpstr(f, desc)
-	putostype(f, code)
-	putostype(f, subcode)
+	putostype(f, eventclass)
+	putostype(f, eventid)
 	putdata(f, returns)
 	putdata(f, accepts)
 	putlist(f, arguments, putargument)
@@ -335,8 +399,8 @@
 	putostype(f, keyword)
 	putdata(f, what)
 
-def putclass(f, classe):
-	[name, code, desc, properties, elements] = classe
+def putclass(f, cls):
+	[name, code, desc, properties, elements] = cls
 	putpstr(f, name)
 	putostype(f, code)
 	putpstr(f, desc)
@@ -350,12 +414,18 @@
 	putostype(f, code)
 	putlist(f, parts, putostype)
 
-def putenum(f, enum):
+def putcomparison(f, comp):
+	[name, id, comment] = comp
+	putpstr(f, name)
+	putostype(f, id)
+	putpstr(f, comment)
+
+def putenumeration(f, enum):
 	[code, items] = enum
 	putostype(f, code)
-	putlist(f, items, putitem)
+	putlist(f, items, putenumerator)
 
-def putitem(f, item):
+def putenumerator(f, item):
 	[name, code, desc] = item
 	putpstr(f, name)
 	putostype(f, code)
@@ -370,13 +440,16 @@
 def putlist(f, list, putitem):
 	putword(f, len(list))
 	for item in list:
-		putalign(f)
 		putitem(f, item)
+		putalign(f)
 
 def putalign(f):
 	if f.tell() & 1:
 		f.write('\0')
 
+def putbyte(f, value):
+	f.write(chr(value))
+
 def putword(f, value):
 	putalign(f)
 	f.write(chr((value>>8)&0xff))