mac-rom/Interfaces/PInterfaces/OSUtils.p
Elliot Nunn 4325cdcc78 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-12-26 09:52:23 +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}