#define RES13 			reserved, reserved, reserved, reserved, reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved
#define RES12				reserved, reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved
#define RES11				reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved,	reserved
#define SINGLE_REP	replyrequired, singleItem, notEnumerated, RES13
#define NO_REPLY		noReply, "", replyoptional, singleItem, notEnumerated, RES13
#define CONSTANT_DO	directParamrequired, singleItem, notEnumerated, doesntChangeState, RES12
#define CHANGES_DO	directParamrequired, singleItem, notEnumerated, changesState, RES12
#define NO_DO				noParams, "", directParamoptional, singleItem, notEnumerated, reserved, RES12
#define SINGLE_PARM	required,singleItem,notEnumerated,RES13
#define OPTION_PARM	optional,singleItem,notEnumerated,RES13
#define RO_PROPERTY	reserved, singleItem, notEnumerated, readOnly, RES12
#define RW_PROPERTY	reserved, singleItem, notEnumerated, readWrite, RES12
#define PL_PROPERTY	reserved, singleItem, notEnumerated, readOnly, RES11, plural
#include "appleevent.h"

resource 'aete' (0, "Eudora's Suites")
{
	0x02,0x10, /* version numbers */
	english, roman,	/* them furriners is on they own */
	{

		"Required Suite",
			"Events that every application should support",
			kAERequiredSuite, 1, 1,
		{},
		{},
		{},
		{},

		"Standard Suite",
			"Common terms for most applications",
			'CoRe', 1, 1,
			{	/* events */
		
				"close", "Close an object",
					'core', 'clos',
					NO_REPLY,
					'obj ', "the object to close", CHANGES_DO,
					{ /* other parameters */ },

				"count", "Return the number of elements of a particular class within an object", 'core', 'cnte',
					'long', "the number of elements", SINGLE_REP,
					'obj ', "the object whose elements are to be counted", CONSTANT_DO,
					{	/* other parameters */
						"each", 'kocl', 'type', "the class of the elements to be counted. Keyword \'each\' is optional in AppleScript", SINGLE_PARM,
					},

				"delete", "Delete an element from an object",
					'core', 'delo',
					NO_REPLY,
					'obj ', "the element to delete", CHANGES_DO,
					{ /* other parameters */ },
					
				"exists", "Verify if an object exists", 'core', 'doex',
					'bool', "true if it exists, false if not", SINGLE_REP,
					'obj ', "the object in question", CONSTANT_DO,
					{ /* other parameters */ },
					
				"get", "Get the data for an object", 'core', 'getd',
					'****', "the data from the object", SINGLE_REP,
					'obj ', "the object whose data is to be returned", CONSTANT_DO,
					{ /* other parameters */ },

				"make", "Make a new element", 'core', 'crel',
					'obj ', "to the new object", SINGLE_REP,
					NO_DO,
					{	/* other parameters */
						"new", 'kocl', 'type', "the class of the new element. Keyword \'new\' is optional in AppleScript",SINGLE_PARM,
						"at", 'insh', 'insl', "the location at which to insert the element",SINGLE_PARM,
						"invisible", keyEuInvisible, 'bool', "true to make a new message invisible", OPTION_PARM,
						"with data", keyAEData, '****', "the initial data for the element",OPTION_PARM,
					},

				"move", "Move object to a new location", 'core', 'move',
					'obj ', "to the object after they have been moved",SINGLE_REP,
					'obj ', "the object to move", CHANGES_DO,
					{	/* other parameters */
						"to", 'insh', 'insl', "the new location for the object",SINGLE_PARM,
					},
					
				"duplicate", "Make a duplicate object", 'core', 'clon',
					'obj ', "to the object after they have been moved",SINGLE_REP,
					'obj ', "the object to move", CHANGES_DO,
					{	/* other parameters */
						"to", 'insh', 'insl', "the new location for the object",SINGLE_PARM,
					},

				"open", "Open the specified object", 'aevt', 'odoc',
					NO_REPLY,
					'obj ', "list of objects to open",CHANGES_DO,
					{ /* other params */ },

				"print", "Print the specified message", 'aevt', 'pdoc',
					NO_REPLY,
					'obj ', "the message to print",CONSTANT_DO,
					{ /* other params */ },

				"save", "Save an object", 'core', 'save',
					NO_REPLY,
					'obj ', "the composition message to save",CHANGES_DO,
					{
					},

				"set", "Set an object\'s data", 'core', 'setd',
					NO_REPLY,
					'obj ', "the object to change",CHANGES_DO,
					{
						"to", 'data', '****', "the new value",SINGLE_PARM
					}
				},
			{ /* classes */
					"application", 'capp', "An application program",
					{
						"version", 'vers', 'itxt', "the version number", RO_PROPERTY,
						"selected text", pEuSelectedText, 'TEXT', "the text of the userÕs current selection", RW_PROPERTY,
					},
					{
						cWindow, {formAbsolutePosition,formName,formUniqueID},
						cEuMailfolder, {formAbsolutePosition,formName},
						cEuPreference, {formAbsolutePosition},
						cEuPersonality, {formAbsolutePosition,formUniqueID},
					},
					"window", cWindow, "A window",
					{
						"bounds", pBounds, typeQDRectangle, "the boundary rectangle for the window", RW_PROPERTY,
						"closeable", pHasCloseBox, 'bool', "Does the window have a close box?", RO_PROPERTY,
						"resizeable", pIsResizable, 'bool', "Is the window resizeable?", RO_PROPERTY,
						"zoomable", pIsZoomable, 'bool', "Does the window have a zoom box?", RO_PROPERTY,
						"zoomed", pIsZoomed, 'bool', "Is the window zoomed?", RW_PROPERTY,
						"name", pName, 'itxt', "the title of the window", RO_PROPERTY,
						"index", pIndex, 'long', "the number of the window", RW_PROPERTY,
						"id", formUniqueID, 'long', "the window's id", RO_PROPERTY,
						"modified", pIsModified, 'bool', "has the window been modified since the last save?", RO_PROPERTY,
						"position", 'ppos', typeQDPoint, "upper left coordinates of the window", RW_PROPERTY,
						"selected text", pEuSelectedText, 'TEXT', "the text of the userÕs current selection", RW_PROPERTY,
					},
					{
					},
			},
			{ /* comparisons */ },
			{ /* enums */ },

		"Eudora Suite",
			"Terms specific to Eudora",
			kEudoraSuite, 1, 1,
			{/* events */

				"connect", "Connect to the mail server and transfer mail", kEudoraSuite,kEuConnect,
					NO_REPLY,
					NO_DO,
					{
						"sending", keyEuSend, 'bool', "true to make eudora send queued messages", OPTION_PARM,
						"checking", keyEuCheck, 'bool', "true to make eudora check for mail", OPTION_PARM,
						"waiting", keyEuOnIdle, 'bool', "true to make eudora wait for idle time before checking", OPTION_PARM,
					},
				
				"reply", "Reply to a message", kEudoraSuite, kEuReply,
					'obj ', "to the reply message", SINGLE_REP,
					'obj ', "the message to reply to", CONSTANT_DO,
					{
						"quoting", keyEuQuoteText, 'bool', "true if you want to quote the original text in the reply", OPTION_PARM,
						"everyone", keyEuReplyAll, 'bool', "true if you want the reply to go to everyone who got the original", OPTION_PARM,
						"self", keyEuIncludeSelf, 'bool', "true if you want the reply to go to yourself, too", OPTION_PARM,
						"using stationery", keyEuStationeryName, 'TEXT', "the name of the stationery to use for the reply", OPTION_PARM,
					},
				
				"forward", "Forward a message", kEudoraSuite, kEuForward,
					'obj ', "to the forwarded message", SINGLE_REP,
					'obj ', "the message to forward", CONSTANT_DO,
					{},
				
				"redirect", "Redirect a message", kEudoraSuite, kEuRedirect,
					'obj ', "to the redirected message", SINGLE_REP,
					'obj ', "the message to redirect", CONSTANT_DO,
					{},
			
				"send again", "Send a message again", kEudoraSuite, kEuSalvage,
					'obj ', "to the message sent again", SINGLE_REP,
					'obj ', "the message to send again", CONSTANT_DO,
					{},
				
				"queue", "Queue a message to be sent", kEudoraSuite, kEuQueue,
					NO_REPLY,
					'obj ', "the message to queue", CHANGES_DO,
					{
						"for", keyEuWhen, 'ldt ', "date & time to send the message", OPTION_PARM,
					},

				"unqueue", "Remove a message from the queue, so it wonÕt be sent", kEudoraSuite, kEuUnQueue,
					NO_REPLY,
					'obj ', "the message to unqueue", CHANGES_DO,
					{
					},
				
				"attach to", "Attach documents to a message", kEudoraSuite, kEuAttach,
					NO_REPLY,
					'obj ', "the message to attach the documents to", CHANGES_DO,
					{
						"documents",keyEuDocumentList,'alis',"list of documents to attach", required,listOfItems,notEnumerated,RES13,
						"spooling", keyEuSpool, 'bool', "True to make Eudora copy the document and attach the copy, and delete the copy when the message is deleted.", OPTION_PARM,
					},
				
				"start notifying", "Notify an application of things that happen", kEudoraSuite, kEuInstallNotify,
					NO_REPLY,
					'obj ', "an application to notify", CONSTANT_DO,
					{
						"when", keyEuWhatHappened, 'eNot', "what to notify the application of", OPTION_PARM,
					},

				"stop notifying", "Stop notifying applications of things that are happening", kEudoraSuite, kEuRemoveNotify,
					NO_REPLY,
					'obj ', "an application currently being notified, or omit for all", directParamoptional, singleItem, notEnumerated, doesntChangeState, RES12,
					{
						"when", keyEuWhatHappened, 'eNot', "the things no longer to notify it of", OPTION_PARM,
					},
				"notice", "Eudora sends this event to notify an application that something happened", kEudoraSuite, kEuNotify,
					NO_REPLY,
					NO_DO,
					{
						"occurrence", keyEuWhatHappened, 'eNot', "what happened", optional,singleItem,enumerated,RES13,
						"messages", keyEuMessList, 'list', "of the messages involved", OPTION_PARM,
					},
				"compact", "Compact all mailboxes or specified list of mailboxes", kEudoraSuite, kEuCompact,
					NO_REPLY,
					NO_DO,
					{
						"mailboxes", keyEuMailboxList, 'euMB', "list of mailboxes to compact", optional,listOfItems,notEnumerated,RES13,
					},
#ifdef NEVER
				"notice", "Eudora sends this event to notify an application that something happened", kEudoraSuite, kEuNotify,
					NO_REPLY,
					NO_DO,
					{
						"occurrence", keyEuWhatHappened, 'long', "what happened (1 arrives, 2 sent, 3 will connect, 4 has connected)",OPTION_PARM,
						"messages", keyEuMessList, 'list', "of the messages involved", OPTION_PARM,
					},
#endif
			},
			
			{/* classes */
				"mail folder", cEuMailfolder, "A folder containing mailboxes or other mail folders.",
					{
						"name", pName, 'itxt', "the name", RO_PROPERTY,
					},
					{
						cEuMailbox, {formAbsolutePosition,formName},
						cEuMailfolder, {formAbsolutePosition,formName},
						cEuNickFile, {formAbsolutePosition,formName},
					},
				"mail folders", cEuMailfolder, "Every mail folder",
					{
						"class attributes", kAESpecialClassProperties, cType, "", PL_PROPERTY,
					},
					{
					},
					
				"mailbox", 'euMB', "A mailbox.",
					{
						"name", pName, 'itxt', "the name of the mail folder", RO_PROPERTY,
						"space wasted", pEuWasteSpace, 'long', "the amount of waste space in the mailbox", RO_PROPERTY,
						"total unread", pEuMailboxUnread, 'long', "the total number of unread messages in the mailbox", RO_PROPERTY,
						"recent unread", pEuMailboxRecentUnread, 'long', "the number of recent messages that are unread in the mailbox", RO_PROPERTY,
						"space required", pEuNeededSpace, 'long', "the minimum amount of space required to hold the mailbox", RO_PROPERTY,
						"location", pEuFSS, 'fss ', "the file the mailbox is stored in", RO_PROPERTY,
						"toc location", pEuTOCFSS, 'fss ', "the file the table of contents is stored in", RO_PROPERTY,
						"window", cWindow, typeObjectSpecifier, "the mailbox's window, if any", RO_PROPERTY,
					},
					{
						cEuMessage, {formAbsolutePosition,formUniqueID},
					},
				"mailboxes", 'euMB', "Every mailbox",
					{
						"class attributes", kAESpecialClassProperties, cType, "", PL_PROPERTY,
					},
					{
					},
					
				"message", cEuMessage, "A message",
					{
						"id", formUniqueID, 'long', "unique id of the message", RO_PROPERTY,
						"body", pEuBody, 'TEXT', "the body of the message", RW_PROPERTY,
						"whole text", pEuWholeText, 'TEXT', "all the text of the message", RW_PROPERTY,
						"priority", pEuPriority, 'long', "the priority", RW_PROPERTY,
						"label", pEuLabel, 'long', "the index of the label", RW_PROPERTY,
						"status", pEuStatus, 'eSta', "the message status", reserved, singleItem, enumerated, readWrite, RES12,
						"sender", pEuSender, 'itxt', "the sender as appearing in the message summary", RW_PROPERTY,
						"message date", pEuDate, 'itxt', "the date as appearing in the message summary", RO_PROPERTY,
						"universal seconds", pEuGMTSecs, 'ldt ', "the number of seconds since 1904, in UT (GMT)", RO_PROPERTY,
						"local seconds", pEuLocalSecs, 'ldt ', "the number of seconds since 1904, in local time", RO_PROPERTY,
						"subject", pEuSubject, 'itxt', "the subject as appearing in the message summary", RW_PROPERTY,
						"size", pEuSize, 'long', "the size of the message", RO_PROPERTY,
						"outgoing", pEuOutgoing, 'bool', "is the message is outgoing?", RO_PROPERTY,
						"signature", pEuSignature, 'eSig', "which signature the message should have", reserved, singleItem, enumerated, readWrite, RES12,
						"QP", pEuMayQP, 'bool', "is Eudora allowed to encode text?", RW_PROPERTY,
						"return receipt", pEuReturnReceipt, 'bool', "is a return receipt is requested?", RW_PROPERTY,
						"wrap", pEuWrap, 'bool', "should the text be wrapped when sent?", RW_PROPERTY,
						"tab expansion", pEuFakeTabs, 'bool', "should tabs get expanded to spaces?", RW_PROPERTY,
						"keep copy", pEuKeepCopy, 'bool', "should a copy should be kept after message is sent?", RW_PROPERTY,
						"preserve macintosh info", pEuHqxText, 'bool', "should Macintosh information always be sent with attachments?", RW_PROPERTY,
						"attachment encoding", pEuAttachType, 'eAty', "the type of encoding to use for attachments", reserved, singleItem, enumerated, readWrite, RES12,
						"show all headers", pEuShowAll, 'bool', "should all headers be visible?", RW_PROPERTY,
						"editable", pEuPencil, 'bool', "should the message be editable?", RW_PROPERTY,
						"transliteration table", pEuTableId, 'long', "the resource id of the transliteration table", RW_PROPERTY,
						"is on server", pEuOnServer, 'bool', "is the message still on the mail server?", RO_PROPERTY,
						"will be fetched", pEuWillFetch, 'bool', "will the message be [re]fetched on next check?", RW_PROPERTY,
						"will be deleted", pEuWillDelete, 'bool', "will the message be deleted from server on next check?", RW_PROPERTY,
						"destroy attachments", pEuAttDel, 'bool', "will attachments be trashed after the message is sent?", RW_PROPERTY,
						"window", cWindow, typeObjectSpecifier, "the message's window, if any", RO_PROPERTY,
						"mailbox", cEuMailbox, typeObjectSpecifier, "the message's mailbox of origin", RO_PROPERTY,
						"personality", cEuPersonality, typeObjectSpecifier, "the message's personality", RW_PROPERTY,
					},
					{
						cEuField, {formName},
						cEuAttachment, {formAbsolutePosition,formName},
					},
				"messages", cEuMessage, "Every message",
					{
						"class attributes", kAESpecialClassProperties, cType, "", PL_PROPERTY,
					},
					{
					},
					
				"nickname file", cEuNickfile, "A file full of nicknames",
					{
						"file", pEuFSS, 'fss ', "the filespec of the file", RO_PROPERTY,
					},
					{
						cEuNickname, {formName,formAbsolutePosition},
					},
				"nickname files", cEuNickfile, "Every nickname file",
					{
						"class attributes", kAESpecialClassProperties, cType, "", PL_PROPERTY,
					},
					{
					},
					
				"nickname", cEuNickname, "A nickname for a user.",
					{
						"nickname", pEuNickNick, 'TEXT', "the nickname itself", RW_PROPERTY,
						"addresses", pEuNickAddrNew, 'TEXT', "the addresses to which the nickname expands", RW_PROPERTY,
						"notes", pEuNickNotes, 'TEXT', "the notes associated with this nickname, after fields have been removed", RW_PROPERTY,
						"expansion", pEuNickExpansion, 'TEXT', "the full expansion of the nickname", RO_PROPERTY,
						"recipient", pEuIsRecip, 'bool', "is the nickname on the Quick Recipients list?", RW_PROPERTY,
						"raw notes", pEuNickRawNotes, 'TEXT', "the notes associated with this nickname, including encoded fields", RO_PROPERTY,
						"name", pName, 'TEXT', "the name of the file the nickname comes from", RO_PROPERTY,
					},
					{
						cEuField, {formName},
					},
				"nicknames", cEuNickname, "Every nickname",
					{
						"class attributes", kAESpecialClassProperties, cType, "", PL_PROPERTY,
					},
					{
					},
				
				"field", cEuField, "An RFC 822 header field in a message (field named \"\" is the body) or a named part of a nickname.",
					{
					},
					{
					},
				
				"attachment", cEuAttachment, "A file attached to a message",
					{
					},
					{
					},
				
				"attachments", cEuAttachment, "Every attachment",
					{
						"class attributes", kAESpecialClassProperties, cType, "", PL_PROPERTY,
					},
					{
					},
					
				"personality", cEuPersonality, "A personality",
					{
						"name", pName, 'itxt', "the name of the personality", RW_PROPERTY,
						"id", formUniqueID, 'long', "unique id of the personality", RO_PROPERTY,
					},
					{
						cEuPreference, {formAbsolutePosition},
					},
				"personalities", cEuPersonality, "Every personality",
					{
						"class attributes", kAESpecialClassProperties, cType, "", PL_PROPERTY,
					},
					{
					},
				
				
				"URL helper", cEuHelper, "URL helper application",
					{
						"name", pName, 'itxt', "the name of the url type the helper is for (eg, http)", RW_PROPERTY,
						"application", cApplication, 'fss ', "the application to use to handle the url", RW_PROPERTY,
					},
					{
					},
				"URL helpers", cEuHelper, "Every URL helper application",
					{
						"class attributes", kAESpecialClassProperties, cType, "", PL_PROPERTY,
					},
					{
					},
				
				"setting", cEuPreference, "Eudora\'s settings",
					{
					},
					{
					},
				"settings", cEuPreference, "Every setting",
					{
						"class attributes", kAESpecialClassProperties, cType, "", PL_PROPERTY,
					},
					{
					},
			},
			{/* comparisons */},
			{/* enums */
				'eSta',
				{
					"unread",'euS\001', "has not been read",
					"already read", 'euS\002', "has been read",
					"replied", 'euS\003', "has been replied to",
					"forwarded", 'euS\010', "has been forwarded",
					"redirected", 'euS\004', "has been redirected",
					"not sendable", 'euS\005', "cannot be sent",
					"sendable", 'euS\006', "can be sent",
					"queued", 'euS\007', "queued for delivery",
					"sent", 'euS\011', "has been sent",
					"never sent", 'euS\012', "never was sent",
				},
				
				'eSig',
				{
					"none", 'sig\000', "no signature",
					"standard", 'sig\001', "standard signature file",
					"alternate", 'sig\002', "alternate signature file",
				},
				
				'eAty',
				{
					"AppleDouble",'atc\000', "AppleDouble format",
					"AppleSingle", 'atc\001', "AppleSingle format",
					"BinHex", 'atc\002', "BinHex format",
					"uuencode", 'atc\003', "uuencode format",
				},
				
				'eNot',
				{
					"mail arrives",eMailArrive,"mail arrival",
					"mail sent",eMailSent,"mail has been sent",
					"will connect",eWillConnect,"eudora is about to connect to a mail server",
					"has connected",eHasConnected,"eudora has finished talking to a mail server",
					"has manually filtered",eManFilter,"eudora has finished manually filtering messages",
				},
				
#ifdef NEVER
				eEuConjunction,
				{
					"ignore", 'cj-\001', "ignore the second term",
					"and", 'cj-\002', "both terms must match",
					"or", 'cj-\003', "one or both terms can match",
					"unless", 'cj-\004', "the first term must match, the second term must not",
				},

				eEuFilterVerb,
				{
					"contains", 'vb-\001', "the header contains the specified value",
					"does not contain", 'vb-\002', "the header does not contain the specified value",
					"is", 'vb-\003', "the header (sans the header name) is exactly the specified value",
					"is not", 'vb-\004', "the header is not exactly the specified value",
					"starts with", 'vb-\005', "the header starts with the specified value",
					"ends with", 'vb-\006', "the header ends with the specified value",
					"appears", 'vb-\007', "the header appears in the message; its value does not matter",
					"does not appear", 'vb-\010', "the header does not appear in the message",
					"intersects", 'vb-\011', "the header contains an address that is also in the nickname specified by the value",
				},
#endif

			},

		"URL Suite",
			"Open URLÕs with Eudora; supports ph, finger, mailto, and passes through",
			kURLSuite, 1, 1,
		{
			"geturl", "Display the contents of a URL.",
				kURLSuite,kURLGet,
				NO_REPLY,
				'itxt', "the URL to display (finger/ph/mailto)", CONSTANT_DO,
				{
						"attaching",'Atch','alis',"list of documents to attach", optional,listOfItems,notEnumerated,RES13,
						"spooling", keyEuSpool, 'bool', "True to make Eudora copy the document and attach the copy, and delete the copy when the message is deleted.", OPTION_PARM,
				},

			"fetchurl", "Return the contents of a URL.",
				kURLSuite,kURLFetch,
				'itxt', "to the contents of the URL",SINGLE_REP,
				'itxt', "the URL to fetch (finger/ph/mailto)", CONSTANT_DO,
				{ /* other parameters */ },
		},
		{},
		{},
		{},
	},

};
