sys7.1-doc-wip/Interfaces/PInterfaces/OSUtils.p
2019-07-27 22:37:48 +08:00

539 lines
14 KiB
OpenEdge ABL

{
Created: Saturday, July 27, 1991 at 10:15 PM
OSUtils.p
Pascal Interface to the Macintosh Libraries
Copyright Apple Computer, Inc. 1985-1992
All rights reserved
Dont use:
-SetUpA5
-RestoreA5
Instead:
SetUpA5 --> myA5 := SetCurrentA5
RestoreA5 --> oldA5 := SetA5(myA5)
Change History (most recent first):
<21> 6/26/92 DCL Miner Formatting Changes. Digging deep for things to do. Getting
the file ready for ETO 8.
<20> 5/29/92 DCL Moved DateTime stuff from TextUtils to OSUtils.
<19> 5/7/92 DCL NIIM: Movin date & time Stuff back from DateTime to OSUtils.
<17> 4/16/92 DCL For New Inside Mac: Moved Read&WriteLocation from Script to
OSUtils.
<16> 3/26/92 DCL For New Inside Mac: Moved all of the Date & Time stuff to the
newly created DateTime include file. Removed inclusion of
TextUtils to remove the circular dependancies.. #1025005
<15> 3/12/92 DCL For New Inside Mac Text volume: Moved KeyTrans, EqualString,
RelString, Compare String, UprString, UpperString to the new
TextUtils.[ph]
<14> 3/10/92 DCL For New Improved Inside Mac: Added Call names without Abbrevs.:
SecsToDate (Secs2Date) and DateToSecs (Date2Secs). Affected
Files: OSUtils.[ph], SysEqu.a, Traps.[aph].
<13> 7/30/91 JL Updated Copyright.
<12> 1/27/91 LN Checked in Database generate file from DSG. Changed parameter
names from s to secs in DatetoSecs and SecstoDate to match .h
file.
<11> 11/4/90 dba get rid of SetUpA5 and RestoreA5; add GetOSTrapAddress,
SetOSTrapAddress, GetToolboxTrapAddress, SetToolboxTrapAddress,
GetToolTrapAddress, and SetToolTrapAddress
<10> 10/10/90 JL Fixing Inline for GETSYSPPTR
<9> 10/3/90 JAL Removed Restart, Added Inline for GetSysPPtr, added envMacIIfx.
<8> 8/29/90 dnf Change AltAccessParam to ForeignPrivParam
<7> 5/18/90 JAL Added sIQType into QTypes set and updated curSysEnvVers.
<6> 4/13/90 dnf Remove DTParam
<5> 3/16/90 dnf Add AltAccessParam
<4> 3/07/90 JAL Added Deferred Task support.
** 1.3 CCH 12/15/1989 Updated SysEnvirons equates.
** 1.2 EKN 07/31/1989 Added FIDParam
** 1.1 ngk 05/31/1989 Added env68030, envMacIIx, useMIDI, and useExtClk
** 1.0 CCH 11/17/1988 Adding to EASE.
}
{$IFC UNDEFINED UsingIncludes}
{$SETC UsingIncludes := 0}
{$ENDC}
{$IFC NOT UsingIncludes}
UNIT OSUtils;
INTERFACE
{$ENDC}
{$IFC UNDEFINED UsingOSUtils}
{$SETC UsingOSUtils := 1}
{$I+}
{$SETC OSUtilsIncludes := UsingIncludes}
{$SETC UsingIncludes := 1}
{$IFC UNDEFINED UsingTypes}
{$I $$Shell(PInterfaces)Types.p}
{$ENDC}
{$SETC UsingIncludes := OSUtilsIncludes}
CONST
useFree = 0;
useATalk = 1;
useAsync = 2;
useExtClk = 3; {Externally clocked}
useMIDI = 4;
{*** Environs Equates ***}
curSysEnvVers = 2; {Updated to equal latest SysEnvirons version}
{ Machine Types }
envMac = -1;
envXL = -2;
envMachUnknown = 0;
env512KE = 1;
envMacPlus = 2;
envSE = 3;
envMacII = 4;
envMacIIx = 5;
envMacIIcx = 6;
envSE30 = 7;
envPortable = 8;
envMacIIci = 9;
envMacIIfx = 11;
{ CPU types }
envCPUUnknown = 0;
env68000 = 1;
env68010 = 2;
env68020 = 3;
env68030 = 4;
env68040 = 5;
{ Keyboard types }
envUnknownKbd = 0;
envMacKbd = 1;
envMacAndPad = 2;
envMacPlusKbd = 3;
envAExtendKbd = 4;
envStandADBKbd = 5;
envPrtblADBKbd = 6;
envPrtblISOKbd = 7;
envStdISOADBKbd = 8;
envExtISOADBKbd = 9;
false32b = 0; {24 bit addressing error}
true32b = 1; {32 bit addressing error}
{ result types for RelString Call }
sortsBefore = -1; {first string < second string}
sortsEqual = 0; {first string = second string}
sortsAfter = 1; {first string > second string}
{ Toggle results }
toggleUndefined = 0;
toggleOK = 1;
toggleBadField = 2;
toggleBadDelta = 3;
toggleBadChar = 4;
toggleUnknown = 5;
toggleBadNum = 6;
toggleOutOfRange = 7; {synonym for toggleErr3}
toggleErr3 = 7;
toggleErr4 = 8;
toggleErr5 = 9;
{ Date equates }
smallDateBit = 31; {Restrict valid date/time to range of Time global}
togChar12HourBit = 30; {If toggling hour by char, accept hours 1..12 only}
togCharZCycleBit = 29; {Modifier for togChar12HourBit: accept hours 0..11 only}
togDelta12HourBit = 28; {If toggling hour up/down, restrict to 12-hour range (am/pm)}
genCdevRangeBit = 27; {Restrict date/time to range used by genl CDEV}
validDateFields = -1;
maxDateField = 10;
eraMask = $0001;
yearMask = $0002;
monthMask = $0004;
dayMask = $0008;
hourMask = $0010;
minuteMask = $0020;
secondMask = $0040;
dayOfWeekMask = $0080;
dayOfYearMask = $0100;
weekOfYearMask = $0200;
pmMask = $0400;
dateStdMask = $007F; {default for ValidDate flags and ToggleDate TogglePB.togFlags}
TYPE
LongDateField = (eraField,yearField,monthField,dayField,hourField,minuteField,
secondField,dayOfWeekField,dayOfYearField,weekOfYearField,pmField,res1Field,
res2Field,res3Field);
QTypes = (dummyType,vType,ioQType,drvQType,evType,fsQType,sIQType,dtQType);
TrapType = (OSTrap,ToolTrap);
ParamBlkType = (IOParam,FileParam,VolumeParam,CntrlParam,SlotDevParam,MultiDevParam,
AccessParam,ObjParam,CopyParam,WDParam,FIDParam,CSParam,ForeignPrivParam);
SysPPtr = ^SysParmType;
SysParmType = PACKED RECORD
valid: Byte;
aTalkA: Byte;
aTalkB: Byte;
config: Byte;
portA: INTEGER;
portB: INTEGER;
alarm: LONGINT;
font: INTEGER;
kbdPrint: INTEGER;
volClik: INTEGER;
misc: INTEGER;
END;
{QElemPtr = ^QElem;}
QElemPtr = ^QElem;
FInfo = RECORD
fdType: OSType; {the type of the file}
fdCreator: OSType; {file's creator}
fdFlags: INTEGER; {flags ex. hasbundle,invisible,locked, etc.}
fdLocation: Point; {file's location in folder}
fdFldr: INTEGER; {folder containing file}
END;
VCB = RECORD
qLink: QElemPtr;
qType: INTEGER;
vcbFlags: INTEGER;
vcbSigWord: INTEGER;
vcbCrDate: LONGINT;
vcbLsMod: LONGINT;
vcbAtrb: INTEGER;
vcbNmFls: INTEGER;
vcbVBMSt: INTEGER;
vcbAllocPtr: INTEGER;
vcbNmAlBlks: INTEGER;
vcbAlBlkSiz: LONGINT;
vcbClpSiz: LONGINT;
vcbAlBlSt: INTEGER;
vcbNxtCNID: LONGINT;
vcbFreeBks: INTEGER;
vcbVN: Str27;
vcbDrvNum: INTEGER;
vcbDRefNum: INTEGER;
vcbFSID: INTEGER;
vcbVRefNum: INTEGER;
vcbMAdr: Ptr;
vcbBufAdr: Ptr;
vcbMLen: INTEGER;
vcbDirIndex: INTEGER;
vcbDirBlk: INTEGER;
vcbVolBkUp: LONGINT;
vcbVSeqNum: INTEGER;
vcbWrCnt: LONGINT;
vcbXTClpSiz: LONGINT;
vcbCTClpSiz: LONGINT;
vcbNmRtDirs: INTEGER;
vcbFilCnt: LONGINT;
vcbDirCnt: LONGINT;
vcbFndrInfo: ARRAY [1..8] OF LONGINT;
vcbVCSize: INTEGER;
vcbVBMCSiz: INTEGER;
vcbCtlCSiz: INTEGER;
vcbXTAlBlks: INTEGER;
vcbCTAlBlks: INTEGER;
vcbXTRef: INTEGER;
vcbCTRef: INTEGER;
vcbCtlBuf: Ptr;
vcbDirIDM: LONGINT;
vcbOffsM: INTEGER;
END;
DrvQElPtr = ^DrvQEl;
DrvQEl = RECORD
qLink: QElemPtr;
qType: INTEGER;
dQDrive: INTEGER;
dQRefNum: INTEGER;
dQFSID: INTEGER;
dQDrvSz: INTEGER;
dQDrvSz2: INTEGER;
END;
ParmBlkPtr = ^ParamBlockRec;
ParamBlockRec = RECORD
qLink: QElemPtr;
qType: INTEGER;
ioTrap: INTEGER;
ioCmdAddr: Ptr;
ioCompletion: ProcPtr;
ioResult: OSErr;
ioNamePtr: StringPtr;
ioVRefNum: INTEGER;
CASE ParamBlkType OF
IOParam:
(ioRefNum: INTEGER;
ioVersNum: SignedByte;
ioPermssn: SignedByte;
ioMisc: Ptr;
ioBuffer: Ptr;
ioReqCount: LONGINT;
ioActCount: LONGINT;
ioPosMode: INTEGER;
ioPosOffset: LONGINT);
FileParam:
(ioFRefNum: INTEGER;
ioFVersNum: SignedByte;
filler1: SignedByte;
ioFDirIndex: INTEGER;
ioFlAttrib: SignedByte;
ioFlVersNum: SignedByte;
ioFlFndrInfo: FInfo;
ioFlNum: LONGINT;
ioFlStBlk: INTEGER;
ioFlLgLen: LONGINT;
ioFlPyLen: LONGINT;
ioFlRStBlk: INTEGER;
ioFlRLgLen: LONGINT;
ioFlRPyLen: LONGINT;
ioFlCrDat: LONGINT;
ioFlMdDat: LONGINT);
VolumeParam:
(filler2: LONGINT;
ioVolIndex: INTEGER;
ioVCrDate: LONGINT;
ioVLsBkUp: LONGINT;
ioVAtrb: INTEGER;
ioVNmFls: INTEGER;
ioVDirSt: INTEGER;
ioVBlLn: INTEGER;
ioVNmAlBlks: INTEGER;
ioVAlBlkSiz: LONGINT;
ioVClpSiz: LONGINT;
ioAlBlSt: INTEGER;
ioVNxtFNum: LONGINT;
ioVFrBlk: INTEGER);
CntrlParam:
(ioCRefNum: INTEGER;
csCode: INTEGER;
csParam: ARRAY [0..10] OF INTEGER);
SlotDevParam:
(filler3: LONGINT;
ioMix: Ptr;
ioFlags: INTEGER;
ioSlot: SignedByte;
ioID: SignedByte);
MultiDevParam:
(filler4: LONGINT;
ioMMix: Ptr;
ioMFlags: INTEGER;
ioSEBlkPtr: Ptr);
END;
EvQElPtr = ^EvQEl;
EvQEl = RECORD
qLink: QElemPtr;
qType: INTEGER;
evtQWhat: INTEGER; {this part is identical to the EventRecord as...}
evtQMessage: LONGINT; {defined in ToolIntf}
evtQWhen: LONGINT;
evtQWhere: Point;
evtQModifiers: INTEGER;
END;
VBLTask = RECORD
qLink: QElemPtr;
qType: INTEGER;
vblAddr: ProcPtr;
vblCount: INTEGER;
vblPhase: INTEGER;
END;
DeferredTask = RECORD
qLink: QElemPtr; {next queue entry}
qType: INTEGER; {queue type}
dtFlags: INTEGER; {reserved}
dtAddr: ProcPtr; {pointer to task}
dtParm: LONGINT; {optional parameter}
dtReserved: LONGINT; {reserved--should be 0}
END;
QElem = RECORD
CASE QTypes OF
dtQType:
(dtQElem: DeferredTask); {deferred}
vType:
(vblQElem: VBLTask); {vertical blanking}
ioQType:
(ioQElem: ParamBlockRec); {I/O parameter block}
drvQType:
(drvQElem: DrvQEl); {drive}
evType:
(evQElem: EvQEl); {event}
fsQType:
(vcbQElem: VCB); {volume control block}
END;
QHdrPtr = ^QHdr;
QHdr = RECORD
qFlags: INTEGER;
qHead: QElemPtr;
qTail: QElemPtr;
END;
SysEnvRec = RECORD
environsVersion: INTEGER;
machineType: INTEGER;
systemVersion: INTEGER;
processor: INTEGER;
hasFPU: BOOLEAN;
hasColorQD: BOOLEAN;
keyBoardType: INTEGER;
atDrvrVersNum: INTEGER;
sysVRefNum: INTEGER;
END;
MachineLocation = RECORD
latitude: Fract;
longitude: Fract;
CASE INTEGER OF
0:
(dlsDelta: SignedByte); {signed byte; daylight savings delta}
1:
(gmtDelta: LONGINT); {must mask - see documentation}
END;
DateTimeRec = RECORD
year: INTEGER;
month: INTEGER;
day: INTEGER;
hour: INTEGER;
minute: INTEGER;
second: INTEGER;
dayOfWeek: INTEGER;
END;
LongDateTime = comp;
LongDateCvt = RECORD
CASE INTEGER OF
0:
(c: Comp);
1:
(lHigh: LONGINT;
lLow: LONGINT);
END;
LongDateRec = RECORD
CASE INTEGER OF
0:
(era: INTEGER;
year: INTEGER;
month: INTEGER;
day: INTEGER;
hour: INTEGER;
minute: INTEGER;
second: INTEGER;
dayOfWeek: INTEGER;
dayOfYear: INTEGER;
weekOfYear: INTEGER;
pm: INTEGER;
res1: INTEGER;
res2: INTEGER;
res3: INTEGER);
1:
(list: ARRAY [0..13] OF INTEGER); {Index by LongDateField!}
2:
(eraAlt: INTEGER;
oldDate: DateTimeRec);
END;
DateDelta = SignedByte;
TogglePB = RECORD
togFlags: LONGINT; {caller normally sets low word to dateStdMask=$7F}
amChars: ResType; {from 'itl0', but uppercased}
pmChars: ResType; {from 'itl0', but uppercased}
reserved: ARRAY [0..3] OF LONGINT;
END;
ToggleResults = INTEGER;
PROCEDURE LongDateToSeconds(lDate: LongDateRec;VAR lSecs: LongDateTime);
INLINE $2F3C,$8008,$FFF2,$A8B5;
PROCEDURE LongDate2Secs(lDate: LongDateRec;VAR lSecs: LongDateTime);
INLINE $2F3C,$8008,$FFF2,$A8B5;
PROCEDURE LongSecondsToDate(VAR lSecs: LongDateTime;VAR lDate: LongDateRec);
INLINE $2F3C,$8008,$FFF0,$A8B5;
PROCEDURE LongSecs2Date(VAR lSecs: LongDateTime;VAR lDate: LongDateRec);
INLINE $2F3C,$8008,$FFF0,$A8B5;
FUNCTION ToggleDate(VAR lSecs: LongDateTime;field: LongDateField;delta: DateDelta;
ch: INTEGER;params: TogglePB): ToggleResults;
INLINE $2F3C,$820E,$FFEE,$A8B5;
FUNCTION ValidDate(vDate: LongDateRec;flags: LONGINT;VAR newSecs: LongDateTime): INTEGER;
INLINE $2F3C,$820C,$FFE4,$A8B5;
FUNCTION IsMetric: BOOLEAN;
INLINE $3F3C,$0004,$A9ED;
FUNCTION IUMetric: BOOLEAN;
INLINE $3F3C,$0004,$A9ED;
FUNCTION ReadDateTime(VAR time: LONGINT): OSErr;
PROCEDURE GetDateTime(VAR secs: LONGINT);
FUNCTION SetDateTime(time: LONGINT): OSErr;
PROCEDURE SetTime(d: DateTimeRec);
PROCEDURE GetTime(VAR d: DateTimeRec);
PROCEDURE DateToSeconds(d: DateTimeRec;VAR secs: LONGINT);
PROCEDURE Date2Secs(d: DateTimeRec;VAR secs: LONGINT);
PROCEDURE SecondsToDate(secs: LONGINT;VAR d: DateTimeRec);
PROCEDURE Secs2Date(secs: LONGINT;VAR d: DateTimeRec);
FUNCTION GetSysPPtr: SysPPtr;
INLINE $2EBC,$0000,$01F8;
PROCEDURE SysBeep(duration: INTEGER);
INLINE $A9C8;
FUNCTION DTInstall(dtTaskPtr: QElemPtr): OSErr;
FUNCTION GetMMUMode: SignedByte;
PROCEDURE SwapMMUMode(VAR mode: SignedByte);
FUNCTION SysEnvirons(versionRequested: INTEGER;VAR theWorld: SysEnvRec): OSErr;
PROCEDURE Delay(numTicks: LONGINT;VAR finalTicks: LONGINT);
FUNCTION GetTrapAddress(trapNum: INTEGER): LONGINT;
PROCEDURE SetTrapAddress(trapAddr: LONGINT;trapNum: INTEGER);
FUNCTION NGetTrapAddress(trapNum: INTEGER;tTyp: TrapType): LONGINT;
PROCEDURE NSetTrapAddress(trapAddr: LONGINT;trapNum: INTEGER;tTyp: TrapType);
FUNCTION GetOSTrapAddress(trapNum: INTEGER): LONGINT;
PROCEDURE SetOSTrapAddress(trapAddr: LONGINT;trapNum: INTEGER);
FUNCTION GetToolTrapAddress(trapNum: INTEGER): LONGINT;
PROCEDURE SetToolTrapAddress(trapAddr: LONGINT;trapNum: INTEGER);
FUNCTION GetToolboxTrapAddress(trapNum: INTEGER): LONGINT;
PROCEDURE SetToolboxTrapAddress(trapAddr: LONGINT;trapNum: INTEGER);
FUNCTION WriteParam: OSErr;
PROCEDURE Enqueue(qElement: QElemPtr;qHeader: QHdrPtr);
FUNCTION Dequeue(qElement: QElemPtr;qHeader: QHdrPtr): OSErr;
FUNCTION SetCurrentA5: LONGINT;
INLINE $2E8D,$2A78,$0904;
FUNCTION SetA5(newA5: LONGINT): LONGINT;
INLINE $2F4D,$0004,$2A5F;
PROCEDURE Environs(VAR rom: INTEGER;VAR machine: INTEGER);
FUNCTION HandToHand(VAR theHndl: Handle): OSErr;
FUNCTION PtrToXHand(srcPtr: Ptr;dstHndl: Handle;size: LONGINT): OSErr;
FUNCTION PtrToHand(srcPtr: Ptr;VAR dstHndl: Handle;size: LONGINT): OSErr;
FUNCTION HandAndHand(hand1: Handle;hand2: Handle): OSErr;
FUNCTION PtrAndHand(ptr1: Ptr;hand2: Handle;size: LONGINT): OSErr;
FUNCTION InitUtil: OSErr;
INLINE $A03F,$3E80;
FUNCTION SwapInstructionCache(cacheEnable: BOOLEAN): BOOLEAN;
PROCEDURE FlushInstructionCache;
FUNCTION SwapDataCache(cacheEnable: BOOLEAN): BOOLEAN;
PROCEDURE FlushDataCache;
PROCEDURE ReadLocation(VAR loc: MachineLocation);
INLINE $205F,$203C,$000C,$00E4,$A051;
PROCEDURE WriteLocation(loc: MachineLocation);
INLINE $205F,$203C,$000C,$00E4,$A052;
{$ENDC} { UsingOSUtils }
{$IFC NOT UsingIncludes}
END.
{$ENDC}