sys7.1-doc-wip/Internal/Pascal/AppleEventsInternal.p
2019-07-27 22:37:48 +08:00

179 lines
5.4 KiB
OpenEdge ABL

{
File: AppleEventsInternal.p
Contains: Types and Records for using standard six AppleEvents.
Written by: Nick Kledzik
Copyright: © 1990 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
<4> 2/1/91 DFH stb,WS#DFH-910131c:Added Process Mgr defined AppleEvent codes
under their old names (for compatibility for now).
<3> 2/1/91 DFH BAC,WS#DFH-910131c:Replaced aeErrorValueKeyword ('errv') with
aeErrorNumberKeyword ('errn').
<2> 9/5/90 ngk Fix auto-include name
<1> 9/5/90 ngk first checked in
<0> 9/05/90 ngk moved from [PInterfaces]AppleEvents.p to here
----------------------------------------------------
<12> DFH 16 Apr 90 Removed aeProcessParamType.
<11> DFH 16 Apr 90 Changed saeOpenDocumentMsgID to 'odoc', saePrintDocumentMsgID
to 'pdoc'. Added saeLaunchedWithoutDocs, saeAnswer,
aeErrorValueKeyword, and AppleEventReply.
<10> ngk 3/22/90 Changed AETFDescriptor AETFParameter in regular expr.
<9> ngk 3/20/90 Changed PACKED ARRAY [0..3] to [1..4]
<8> ngk 3/20/90 fix comments
<7> ngk 3/20/90 Changed for 7.0a8 AppleEvents format
<6> DFH 12 Mar 90 Removed aeDebuggerNotify
<5> ngk 3/10/90 Big change for 7.0a8 AppleEvents format
<3> ngk 2/06/90 clean up standard header records
1.1 ngk 12/01/1989 Renamed aeUnexpectedQuit to aeApplicationDied, and
refcon to amsRefcon
1.0 ngk 11/01/1989 initial EASE release
To Do:
}
{$IFC UNDEFINED UsingIncludes}
{$SETC UsingIncludes := 0}
{$ENDC}
{$IFC NOT UsingIncludes}
UNIT AppleEventsInternal;
INTERFACE
{$ENDC}
{$IFC UNDEFINED UsingAppleEventsInternal}
{$SETC UsingAppleEventsInternal := 1}
{$I+}
{$SETC AppleEventsIncludes := UsingIncludes}
{$SETC UsingIncludes := 1}
{$IFC UNDEFINED UsingTypes}
{$I Types.p}
{$ENDC}
{$SETC UsingIncludes := AppleEventsIncludes}
TYPE
MsgClass = PACKED ARRAY [1..4] OF CHAR;
MsgID = PACKED ARRAY [1..4] OF CHAR;
KeyWord = PACKED ARRAY [1..4] OF CHAR;
ParamType = ResType; { superset of resources types and new ones }
{ this template is used to extract the MsgClass and MsgID }
{ fields from a highlevel event }
HighLevelEventRecord = RECORD
what: INTEGER; { always kHighLevelEvent }
class: MsgClass;
reserved1: LONGINT;
ID: MsgID;
reserved2: INTEGER;
END;
{ standard AppleEvent Message class and IDs }
CONST
standardAppleEventMsgClass = 'aevt';
saeLaunchedWithoutDocs = 'oapp'; { no direct object }
saeNewDocumentMsgID = 'new '; { no direct object }
saeOpenDocumentMsgID = 'odoc'; { direct object is file or list of files }
saePrintDocumentMsgID = 'pdoc'; { direct object is file or list of files }
saeQuitMsgID = 'quit'; { no direct object }
saeSetUpMenusMsgID = 'mens'; { no direct object }
saeGetPropertyMsgID = 'getp';
saeAnswer = 'ansr';
aeCreatorType = 'crea';
aeQuitAll = 'quia';
aeShutDown = 'shut';
aeRestart = 'rest';
aeApplicationDied = 'obit';
aeProcessKeyword = 'psn ';
aeProcessParamType = 'psn ';
{
After receiving a high level event, you can get its message buffer by calling
AcceptHighLevelEvent. The format of the buffer as a regular expression is:
AETFHeader (AETFParameter)* aeEndOfMetaDataKeyword (AETFParameter)*
The header tells you the protocol and version. We recommend that everyone uses
the AppleEvent Transport Format (AETF) protocol. Following the header is zero
or more "meta-parameters" (For the short term, you may ignore them).
Following them is an end of metaparameters keyword (';;;;') and then zero or
more "regular parameters". The most important regular parameter is
the "direct object". It is distinguished by the keyword of '----'. It is the
object of the message (e.g. which document to open).
You will probably want to write a routine that can walk the parameters
and find a descriptor by keyword.
}
TYPE
AETFHeaderPtr = ^AETFHeader;
AETFHeader = RECORD
signature: LONGINT; { always 'aevt' }
majorVersion: INTEGER; { always 1 (for now) }
minorVersion: INTEGER; { always 1 (for now) }
END;
{ A Descriptor is chunk of data that has a type and length. }
AETFDescriptorPtr = ^AETFDescriptor;
AETFDescriptor = RECORD
dataType: ParamType;
dataLength: LONGINT;
{data: ARRAY [0..dataLength] OF Bytes;} { start of actual data }
END;
{ A Parameter is a Keyword and Descriptor. }
AETFParameterPtr = ^AETFParameter;
AETFParameter = RECORD
key: KeyWord;
descriptor: AETFDescriptor;
END;
{ standard keywords (used to distinguish Parameters) }
CONST
aeEndOfMetaDataKeyword = ';;;;';
aeDirectObjectKeyword = '----';
aeErrorNumberKeyword = 'errn';
{ standard parameter types }
CONST
aeListParamType = 'list';
aeAliasParamType = 'alis';
aeTemporaryIDParamType = 'tid ';
aeLongintParamType = 'long';
aeIntegerParamType = 'shor';
aeTextParamType = 'TEXT';
aeBooleanParamType = 'bool';
aeTrueParamType = 'true';
aeFalseParamType = 'fals';
aePropertyParamType = 'prop';
aeEnumerateParamType = 'enum';
{ Standard reply message }
TYPE
AppleEventReply = RECORD
messageHeader: AETFHeader; { == saeAnswer }
metaDataMark: KeyWord;
errorCodeHdr: AETFParameter; { == aeErrorNumberKeyword, aeLongintParamType }
errorValue: LONGINT; { sign-extended OSErr }
END;
{$ENDC} { UsingAppleEventsInternal }
{$IFC NOT UsingIncludes}
END.
{$ENDC}