sys7.1-doc-wip/Toolbox/AppleEventMgr/AEUtil.p
2019-07-27 22:37:48 +08:00

309 lines
8.1 KiB
OpenEdge ABL

{
File: AEUtil.p
Copyright: © 1990, 1992 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
<6> 3/23/92 JSM OSEvents.p is obsolete, use Events.p instead.
<5> 5/21/91 gbm Stop using the "empty" units (MemTypes, etc...)
<4> 1/29/91 LN took out keySelectProc - defined in AppleEvents.p
<3> 1/11/91 Lai msgAddrTarget is union of the 4 eppc address type rather than
just TargetID
<2> 12/14/90 bbm (Lai) fix duplicate defines.
<1> 12/13/90 Lai first checked in
}
UNIT AEUtil;
INTERFACE
USES
Types, Memory, Events, Errors,
AppleEvents, AEHashTable;
CONST
{ Warning: Be sure to check that this is up to date with SysPrivateEqu.a }
kAEAppGlobalOffset = 340;
kAESysGlobalOffset = 380;
ExpandMem = $2B6;
kAskResetTimer = 1990;
kNoneOfYourBusiness = 1991;
kAevtSicnID = -5888; { id for the AppleEvent sicn }
roundUpMask = -2;
RoundUpValue = 1;
typeMeta = 'meta';
kMhdrType = 'mhdr';
kLhdrType = 'lhdr';
aeEndOfMetaDataKeyword = ';;;;';
aeRecTypeKeyword = 'type';
kInteractLevelKeyword = 'inte';
kReplyRequestedKeyword = 'repq';
kNeverInteract = 'nevi';
kCanInteract = 'cani';
kCanSwitchIfInteract = 'cans';
kAlwaysInteract = 'alwi';
kAlwaysSwitchIfInteract = 'alws';
{ event ID for reset timeout }
kAEWaitLonger = 'wait';
keyBeforeTime = 'befo';
{ the keyword for the blocking and unblocking special handler }
keyBlockingProc = 'blck';
keyUnblockProc = 'unbk';
keyDiposeTokenProc = 'xtok';
keyCmprProc = 'cmpr';
keyContProc = 'cont';
keyMkidProc = 'mkid';
keyMarkProc = 'mark';
keyAdjmProc = 'adjm';
kAERefconAttribute = 'refc';
kVersionOne = $00010001;
standardTimeOut = 3600; { this is the value of standard timeout, one day
we may change this to a function }
TYPE
AENotifyRec = RECORD
theNMRec: NMRec;
posted: Boolean;
END;
AENotifyRecPtr = ^AENotifyRec;
ListClassRec = RECORD
hintIndex: LONGINT;
hintOffset: LONGINT;
ParamBegin: LONGINT;
metaCountOrObjType: LONGINT;
END;
CommonHeader = RECORD
theKeyword: AEKeyWord;
theType: DescType;
theLength: LONGINT;
END;
CommonHeaderPointer = ^CommonHeader;
CommonHeaderHandle = ^CommonHeaderPointer;
EppcValidAddress = RECORD
CASE Integer OF
0: (asTargetID: TargetID);
1: (asPSN: ProcessSerialNumber);
2: (asSessionID: LONGINT);
3: (asSignature: OSType);
END;
MsgHdrPtr = ^MsgHdr;
MsgHdrHdl = ^MsgHdrPtr;
MsgHdr = RECORD
listClassHeader: ListClassRec;
paramCount: LONGINT;
inUse: Boolean;
inWaiting: Boolean;
waitLink: MsgHdrHdl;
accessMask: LONGINT;
switchFromPSN: ProcessSerialNumber; { switch back to this process afterwards }
notifyRecPtr: AENotifyRecPtr;
prevMsg: MsgHdrHdl; { we were processing this before this one }
userRefcon: LONGINT;
thisAEEventClass: AEEventClass;
thisAEEventID: AEEventID;
returnID: LONGINT;
msgAddrType: DescType;
msgAddrSize: LONGINT;
msgAddrTarget: EppcValidAddress;
END;
ListHdr = RECORD
listClassHeader: ListClassRec;
paramCount: LONGINT;
sizeOfPrefix: LONGINT;
END;
ListHdrPtr = ^ListHdr;
ListHdrHdl = ^ListHdrPtr;
AEMetaDesc = RECORD
aevtMarker: AEKeyWord;
version: LONGINT;
metaTerminator: AEKeyWord;
END;
AEMetaPointer = ^AEMetaDesc;
AcceptRecord = RECORD {record to send to filterProc and
GetSpecific..}
filterErr: OSErr; {any errors in getting the reply}
extraFilter: ProcPtr; {filter for extra events}
msgReturnID: Longint; {to match reply to msg}
aBufferHdl: MsgHdrHdl; {to hold the reply}
END;
AcceptRecordPtr = ^AcceptRecord;
HandlePtr = ^Handle;
ExtendedPtr = ^Extended;
DoublePtr = ^Double;
RealPtr = ^Real;
CompPtr = ^Comp;
AEKeyDescPtr = ^AEKeyDesc;
AEDescPtr = ^AEDesc;
SysGlobalRec = RECORD
aeHashTable: HHand;
coercionHashTable: HHand;
kurtHashTable: HHand;
phacProcPtr: ProcPtr;
selhProcPtr: ProcPtr;
blockingPtr: ProcPtr;
unblockingPtr: ProcPtr;
diposeTokenProcPtr: ProcPtr;
compareProcPtr: ProcPtr;
countProcPtr: ProcPtr;
getMarkIDProcPtr: ProcPtr;
MarkProcPtr: ProcPtr;
AdjustMarksProcPtr: ProcPtr;
AENonAevtHandler: ProcPtr;
GetIndexInContainer:ProcPtr;
END;
GlobalRec = RECORD
aeHashTable: HHand;
coercionHashTable: HHand;
kurtHashTable: HHand;
phacProcPtr: ProcPtr;
selhProcPtr: ProcPtr;
blockingPtr: ProcPtr;
unblockingPtr: ProcPtr;
diposeTokenProcPtr: ProcPtr;
compareProcPtr: ProcPtr;
countProcPtr: ProcPtr;
getMarkIDProcPtr: ProcPtr;
MarkProcPtr: ProcPtr;
AdjustMarksProcPtr: ProcPtr;
AENonAevtHandler: ProcPtr;
GetIndexInContainer:ProcPtr;
waitReplyList: MsgHdrHdl; { first item in linked list of reply handle waiting for event }
returnIDCounter: LONGINT;
currentMsg: MsgHdrHdl;
interactAllowance: AEInteractAllowed;
END;
GlobalRecPointer = ^GlobalRec;
GlobalRecHandle = ^GlobalRecPointer;
{ these are of offset of the field from the beginning of globalRec }
CONST
phacOffset = 12;
selhOffset = 16;
blockingoffset = 20;
unblockOffset = 24;
diposeTokenOffset = 28;
kurProc1Offset = 32;
kurProc2Offset = 36;
kurProc3Offset = 40;
kurProc4Offset = 44;
kurProc5Offset = 48;
TYPE
KeyRec = Record
secondKey: OSType;
firstKey: OSType;
END;
handlerRec = Record
theRefCon: LONGINT;
theProc: ProcPtr;
END;
DescClass = (classMeta, classAevt, classList, classReco, classEmpty, classOther);
{--------------------------------------------------------------------------------}
{ some common inlines }
PROCEDURE IgnoreOSErr(anErr: OSErr);
INLINE $548F; { addq #2,sp }
{ get the global specific to the application }
FUNCTION GetGlobalRef: GlobalRecHandle; inline $2078, $02B6, $2EA8, $0154;
{ get the global common to all applications }
FUNCTION GetSysGlobal: GlobalRecHandle; inline $2078, $02B6, $2EA8, $017C;
{--------------------------------------------------------------------------------}
{ AppleEvent Manger calls provided by this unit }
FUNCTION AE_CreateDesc(typeCode: DescType;
dataPtr: Ptr;
dataSize: LONGINT;
VAR result: AEDesc): OSErr;
FUNCTION AE_CreateList(factoringPtr: Ptr;
factoredSize: LONGINT;
isRecord: boolean;
VAR resultList: AEDesc): OSErr;
FUNCTION AE_DuplicateDesc(VAR theAEDesc: AEDesc; { VAR is for efficiency only }
VAR result: AEDesc): OSErr;
FUNCTION AE_GetInteractionAllowed(VAR level:AEInteractAllowed): OSErr;
FUNCTION AE_GetTheCurrentEvent(VAR theAppleEvent: AppleEvent): OSErr;
FUNCTION AE_SetInteractionAllowed(level:AEInteractAllowed): OSErr;
FUNCTION AE_SetTheCurrentEvent(VAR theAppleEvent: AppleEvent): OSErr;{ VAR is for efficiency only }
FUNCTION AE_SuspendTheCurrentEvent(VAR theAppleEvent: AppleEvent): OSErr;{ VAR is for efficiency only }
{--------------------------------------------------------------------------------}
{ utilty routines for other part of the AppleEvents Manager }
PROCEDURE CalculateTimeOut(VAR timeOut:longint);
FUNCTION CreateList(factoringPtr: Ptr;
factoredSize: LONGINT;
isRecord: boolean;
VAR resultList: AEDesc;
objectType: DescType): OSErr;
PROCEDURE EventSource(theMsgHdl: MsgHdrHdl;
VAR theAEEventSource:AEEventSource;
VAR fromPSN: ProcessSerialNumber);
FUNCTION GeneralWait(VAR timeOut: LONGINT;
waitingHook: ProcPtr;
filterProc: ProcPtr;
filterInfo: Ptr): OSErr;
FUNCTION MakeMeta(VAR theAevt: AppleEvent): AppleEvent; { VAR is for efficiency only }
FUNCTION MustHaveGlobal(isSysHandler: Boolean;
VAR aGlobalRef: GlobalRecHandle): OSErr;
PROCEDURE NukeIt(VAR theAEDesc: AEDesc);
PROCEDURE OffWaitList(aHandle: MsgHdrHdl);
FUNCTION TryBothProc(VAR theDesc:AEDesc; procOffset: LONGINT):OSErr;
{--------------------------------------------------------------------------------}
IMPLEMENTATION
{$I AEUtil.inc1.p}
END. { AEUtil }