|
@@ -0,0 +1,408 @@
|
|
|
|
+{
|
|
|
|
+ $Id$
|
|
|
|
+ This file is part of the Free Pascal run time library.
|
|
|
|
+ Copyright (c) 2003 by Olle Raab
|
|
|
|
+
|
|
|
|
+ A selection of the MacOS API for FreePascal, written
|
|
|
|
+ in the Turbo Pascal dialect.
|
|
|
|
+ It is primarily for internal use in the rtl, please
|
|
|
|
+ do not expect it to remain the same over time,
|
|
|
|
+ it will be subject to changes.
|
|
|
|
+
|
|
|
|
+ See the file COPYING.FPC, included in this distribution,
|
|
|
|
+ for details about the copyright.
|
|
|
|
+
|
|
|
|
+ This program is distributed in the hope that it will be useful,
|
|
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
+
|
|
|
|
+ **********************************************************************}
|
|
|
|
+
|
|
|
|
+{Note: Types like Mac_XXX corresponds to the type XXX defined
|
|
|
|
+in MacOS Universal Headers. The prefix is to avoid name clashes
|
|
|
|
+with FPC types.}
|
|
|
|
+
|
|
|
|
+{************** from Types.p ***************}
|
|
|
|
+const
|
|
|
|
+ noErr = 0;
|
|
|
|
+
|
|
|
|
+type
|
|
|
|
+ SignedByte = shortint;
|
|
|
|
+ SInt8 = SignedByte;
|
|
|
|
+ SignedBytePtr = ^SignedByte;
|
|
|
|
+ OSErr = Integer;
|
|
|
|
+ OSType = Longint;
|
|
|
|
+ Mac_Ptr = pointer;
|
|
|
|
+ Mac_Handle = ^Mac_Ptr;
|
|
|
|
+ Str31 = string[31];
|
|
|
|
+ Str32 = string[32];
|
|
|
|
+ Str63 = string[63];
|
|
|
|
+ Str255 = string[255];
|
|
|
|
+ StringPtr = ^Str255;
|
|
|
|
+ ProcPtr = Mac_Ptr;
|
|
|
|
+ UniversalProcPtr = ProcPtr;
|
|
|
|
+
|
|
|
|
+ ScriptCode = INTEGER;
|
|
|
|
+
|
|
|
|
+ LangCode = INTEGER;
|
|
|
|
+
|
|
|
|
+ Point = record
|
|
|
|
+ case INTEGER of
|
|
|
|
+ 0: (
|
|
|
|
+ v: INTEGER;
|
|
|
|
+ h: INTEGER;
|
|
|
|
+ );
|
|
|
|
+ 1: (
|
|
|
|
+ vh: array[0..1] of INTEGER;
|
|
|
|
+ );
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ PointPtr = ^Point;
|
|
|
|
+
|
|
|
|
+ Rect = record
|
|
|
|
+ case INTEGER of
|
|
|
|
+ 0: (
|
|
|
|
+ top: INTEGER;
|
|
|
|
+ left: INTEGER;
|
|
|
|
+ bottom: INTEGER;
|
|
|
|
+ right: INTEGER;
|
|
|
|
+ );
|
|
|
|
+ 1: (
|
|
|
|
+ topLeft: Point;
|
|
|
|
+ botRight: Point;
|
|
|
|
+ );
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ RectPtr = ^Rect;
|
|
|
|
+
|
|
|
|
+procedure Debugger;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+procedure DebugStr(s: Str255);
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+{************** from Memory.p ***************}
|
|
|
|
+
|
|
|
|
+ type
|
|
|
|
+ Size = LONGINT;
|
|
|
|
+
|
|
|
|
+function NewHandle (byteCount: Size): Mac_Handle;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function NewPtr(logicalSize: Size): Mac_Ptr ;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+procedure DisposePtr (p: Mac_Ptr);
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+function GetPtrSize (p: Mac_Ptr): Size;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+procedure SetPtrSize (p: Mac_Ptr; newSize: Size);
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+procedure DisposeHandle (h: Mac_Handle);
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+procedure SetHandleSize (h: Mac_Handle; newSize: Size);
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+function GetHandleSize (h: Mac_Handle): Size;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function Mac_FreeMem: Longint;
|
|
|
|
+external 'InterfaceLib' name 'FreeMem';
|
|
|
|
+
|
|
|
|
+{************** from OSUtils.p ***************}
|
|
|
|
+
|
|
|
|
+type
|
|
|
|
+ QElemPtr = ^QElem;
|
|
|
|
+
|
|
|
|
+ QElem = record
|
|
|
|
+ qLink: QElemPtr;
|
|
|
|
+ qType: INTEGER;
|
|
|
|
+ qData: array[0..0] of INTEGER;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+{************** from Finder.p ***************}
|
|
|
|
+
|
|
|
|
+ type
|
|
|
|
+ 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;
|
|
|
|
+
|
|
|
|
+ FXInfo = record
|
|
|
|
+ fdIconID: INTEGER; {Icon ID}
|
|
|
|
+ fdUnused: array[0..2] of INTEGER; {unused but reserved 6 bytes}
|
|
|
|
+ fdScript: SInt8; {Script flag and number}
|
|
|
|
+ fdXFlags: SInt8; {More flag bits}
|
|
|
|
+ fdComment: INTEGER; {Comment ID}
|
|
|
|
+ fdPutAway: LONGINT; {Home Dir ID}
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ DInfo = record
|
|
|
|
+ frRect: Rect; {folder rect}
|
|
|
|
+ frFlags: INTEGER; {Flags}
|
|
|
|
+ frLocation: Point; {folder location}
|
|
|
|
+ frView: INTEGER; {folder view}
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ DXInfo = record
|
|
|
|
+ frScroll: Point; {scroll position}
|
|
|
|
+ frOpenChain: LONGINT; {DirID chain of open folders}
|
|
|
|
+ frScript: SInt8; {Script flag and number}
|
|
|
|
+ frXFlags: SInt8; {More flag bits}
|
|
|
|
+ frComment: INTEGER; {comment}
|
|
|
|
+ frPutAway: LONGINT; {DirID}
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+{************** from Files.p ***************}
|
|
|
|
+
|
|
|
|
+const
|
|
|
|
+ fsAtMark = 0;
|
|
|
|
+ fsCurPerm = 0;
|
|
|
|
+ fsRdPerm = 1;
|
|
|
|
+ fInvisible = 16384;
|
|
|
|
+ fsWrPerm = 2;
|
|
|
|
+ fsRdWrPerm = 3;
|
|
|
|
+ fsRdWrShPerm = 4;
|
|
|
|
+ fsFromStart = 1;
|
|
|
|
+ fsFromLEOF = 2;
|
|
|
|
+ fsFromMark = 3;
|
|
|
|
+ rdVerify = 64;
|
|
|
|
+ ioMapBuffer = 4;
|
|
|
|
+ ioModeReserved = 8;
|
|
|
|
+ ioDirFlg = 4; { see IM IV-125 }
|
|
|
|
+ ioDirMask = $10;
|
|
|
|
+ fsRtParID = 1;
|
|
|
|
+ fsRtDirID = 2;
|
|
|
|
+
|
|
|
|
+type
|
|
|
|
+ IOCompletionUPP = UniversalProcPtr;
|
|
|
|
+
|
|
|
|
+ CInfoPBRec = record
|
|
|
|
+ qLink: QElemPtr;
|
|
|
|
+ qType: INTEGER;
|
|
|
|
+ ioTrap: INTEGER;
|
|
|
|
+ ioCmdAddr: Mac_Ptr;
|
|
|
|
+ ioCompletion: IOCompletionUPP;
|
|
|
|
+ ioResult: OSErr;
|
|
|
|
+ ioNamePtr: StringPtr;
|
|
|
|
+ ioVRefNum: INTEGER;
|
|
|
|
+ ioFRefNum: INTEGER;
|
|
|
|
+ ioFVersNum: SInt8;
|
|
|
|
+ filler1: SInt8;
|
|
|
|
+ ioFDirIndex: INTEGER;
|
|
|
|
+ ioFlAttrib: SInt8;
|
|
|
|
+ ioACUser: SInt8;
|
|
|
|
+ case INTEGER of
|
|
|
|
+ 0: (
|
|
|
|
+ ioFlFndrInfo: FInfo;
|
|
|
|
+ ioDirID: LONGINT;
|
|
|
|
+ ioFlStBlk: INTEGER;
|
|
|
|
+ ioFlLgLen: LONGINT;
|
|
|
|
+ ioFlPyLen: LONGINT;
|
|
|
|
+ ioFlRStBlk: INTEGER;
|
|
|
|
+ ioFlRLgLen: LONGINT;
|
|
|
|
+ ioFlRPyLen: LONGINT;
|
|
|
|
+ ioFlCrDat: LONGINT;
|
|
|
|
+ ioFlMdDat: LONGINT;
|
|
|
|
+ ioFlBkDat: LONGINT;
|
|
|
|
+ ioFlXFndrInfo: FXInfo;
|
|
|
|
+ ioFlParID: LONGINT;
|
|
|
|
+ ioFlClpSiz: LONGINT;
|
|
|
|
+ );
|
|
|
|
+ 1: (
|
|
|
|
+ ioDrUsrWds: DInfo;
|
|
|
|
+ ioDrDirID: LONGINT;
|
|
|
|
+ ioDrNmFls: INTEGER;
|
|
|
|
+ filler3: array[1..9] of INTEGER;
|
|
|
|
+ ioDrCrDat: LONGINT;
|
|
|
|
+ ioDrMdDat: LONGINT;
|
|
|
|
+ ioDrBkDat: LONGINT;
|
|
|
|
+ ioDrFndrInfo: DXInfo;
|
|
|
|
+ ioDrParID: LONGINT;
|
|
|
|
+ );
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ CInfoPBPtr = ^CInfoPBRec;
|
|
|
|
+
|
|
|
|
+ FSSpec = record
|
|
|
|
+ vRefNum: Integer;
|
|
|
|
+ parID: Longint;
|
|
|
|
+ name: Str63;
|
|
|
|
+ end;
|
|
|
|
+ FSSpecPtr = ^FSSpec;
|
|
|
|
+
|
|
|
|
+function MemError: OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function FSpOpenDF(spec: FSSpec; permission: SignedByte;
|
|
|
|
+ var refNum: Integer): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function FSpCreate(spec: FSSpec; creator, fileType: OSType;
|
|
|
|
+ scriptTag: ScriptCode): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function FSClose(refNum: Integer): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function FSRead(refNum: Integer; var count: Longint; buffPtr: Mac_Ptr): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function FSWrite(refNum: Integer; var count: Longint; buffPtr: Mac_Ptr): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function GetFPos(refNum: Integer; var filePos: Longint): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function SetFPos(refNum: Integer; posMode: Integer; posOff: Longint): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function GetEOF(refNum: Integer; var logEOF: Longint): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function SetEOF(refNum: Integer; logEOF: Longint): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function FSMakeFSSpec (vRefNum: Integer; dirID: LongInt;
|
|
|
|
+ fileName: Str255; VAR spec: FSSpec): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function FSpDirCreate(spec: FSSpec; scriptTag: ScriptCode;
|
|
|
|
+ var createdDirID: Longint): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function FSpDelete(spec: FSSpec): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function PBGetCatInfoSync (paramBlock: CInfoPBPtr): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+{************** from Aliases.p ***************}
|
|
|
|
+
|
|
|
|
+type
|
|
|
|
+ AliasHandle = Mac_Handle;
|
|
|
|
+
|
|
|
|
+function NewAliasMinimalFromFullPath(fullPathLength: Integer;
|
|
|
|
+ fullPath: Mac_Ptr; zoneName: Str32; serverName: Str31;
|
|
|
|
+ var alias: AliasHandle):OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function ResolveAlias(fromFile: FSSpecPtr; alias: AliasHandle;
|
|
|
|
+ var target: FSSpec; var wasChanged: Boolean):OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+{************** from Processes.p ***************}
|
|
|
|
+
|
|
|
|
+type
|
|
|
|
+ ProcessSerialNumber = record
|
|
|
|
+ highLongOfPSN: LONGINT;
|
|
|
|
+ lowLongOfPSN: LONGINT;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ ProcessSerialNumberPtr = ^ProcessSerialNumber;
|
|
|
|
+ ProcessInfoRec = record
|
|
|
|
+ processInfoLength: LONGINT;
|
|
|
|
+ processName: StringPtr;
|
|
|
|
+ processNumber: ProcessSerialNumber;
|
|
|
|
+ processType: LONGINT;
|
|
|
|
+ processSignature: OSType;
|
|
|
|
+ processMode: LONGINT;
|
|
|
|
+ processLocation: Mac_Ptr;
|
|
|
|
+ processSize: LONGINT;
|
|
|
|
+ processFreeMem: LONGINT;
|
|
|
|
+ processLauncher: ProcessSerialNumber;
|
|
|
|
+ processLaunchDate: LONGINT;
|
|
|
|
+ processActiveTime: LONGINT;
|
|
|
|
+ processAppSpec: FSSpecPtr;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ ProcessInfoRecPtr = ^ProcessInfoRec;
|
|
|
|
+
|
|
|
|
+const
|
|
|
|
+{ Process identifier - Various reserved process serial numbers }
|
|
|
|
+ kNoProcess = 0;
|
|
|
|
+ kSystemProcess = 1;
|
|
|
|
+ kCurrentProcess = 2;
|
|
|
|
+
|
|
|
|
+function GetProcessInformation ({CONST} var PSN: ProcessSerialNumber;
|
|
|
|
+ var info: ProcessInfoRec): OSErr;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+{************** from Script.p ***************}
|
|
|
|
+
|
|
|
|
+const
|
|
|
|
+ smSystemScript = -1;
|
|
|
|
+
|
|
|
|
+{************** from MacErrors.p ***************}
|
|
|
|
+
|
|
|
|
+{Contains error codes for all File Manager calls, except
|
|
|
|
+for PBVolumeMount and for File ID Routines (from UI 3.4).
|
|
|
|
+And also memFullErr}
|
|
|
|
+
|
|
|
|
+const
|
|
|
|
+
|
|
|
|
+ dirFulErr = -33; { Directory full }
|
|
|
|
+ dskFulErr = -34; { disk full }
|
|
|
|
+ nsvErr = -35; { no such volume }
|
|
|
|
+ ioErr = -36; { I/O error (bummers) }
|
|
|
|
+ bdNamErr = -37; { there may be no bad names in the final system! }
|
|
|
|
+ fnOpnErr = -38; { File not open }
|
|
|
|
+ eofErr = -39; { End of file }
|
|
|
|
+ posErr = -40; { tried to position to before start of file (r/w) }
|
|
|
|
+ mFulErr = -41; { memory full (open) or file won't fit (load) }
|
|
|
|
+ tmfoErr = -42; { too many files open }
|
|
|
|
+ fnfErr = -43; { File not found }
|
|
|
|
+ wPrErr = -44; { diskette is write protected. }
|
|
|
|
+ fLckdErr = -45; { file is locked }
|
|
|
|
+
|
|
|
|
+ vLckdErr = -46; { volume is locked }
|
|
|
|
+ fBsyErr = -47; { File is busy (delete) }
|
|
|
|
+ dupFNErr = -48; { duplicate filename (rename) }
|
|
|
|
+ opWrErr = -49; { file already open with with write permission }
|
|
|
|
+ rfNumErr = -51; { refnum error }
|
|
|
|
+ gfpErr = -52; { get file position error }
|
|
|
|
+ volOffLinErr=-53; { volume not on line error (was Ejected) }
|
|
|
|
+ permErr = -54; { permissions error (on file open) }
|
|
|
|
+ volOnLinErr= -55; { drive volume already on-line at MountVol }
|
|
|
|
+ nsDrvErr = -56; { no such drive (tried to mount a bad drive num) }
|
|
|
|
+ noMacDskErr= -57; { not a mac diskette (sig bytes are wrong) }
|
|
|
|
+ extFSErr = -58; { volume in question belongs to an external fs }
|
|
|
|
+ fsRnErr = -59; { file system internal error:during rename the old entry was deleted but could not be restored. }
|
|
|
|
+ badMDBErr = -60; { bad master directory block }
|
|
|
|
+ wrPermErr = -61; { write permissions error }
|
|
|
|
+ dirNFErr = -120; { Directory not found }
|
|
|
|
+ tmwdoErr = -121; { No free WDCB available }
|
|
|
|
+ badMovErr = -122; { Move into offspring error }
|
|
|
|
+ wrgVolTypErr=-123; { Wrong volume type error [operation not supported for MFS] }
|
|
|
|
+ volGoneErr = -124; { Server volume has been disconnected. }
|
|
|
|
+ diffVolErr = -1303; { files on different volumes }
|
|
|
|
+ catChangedErr= -1304; { the catalog has been modified }
|
|
|
|
+ afpAccessDenied= -5000; { Insufficient access privileges for operation }
|
|
|
|
+ afpDenyConflict= -5006; { Specified open/deny modes conflict with current open modes }
|
|
|
|
+ afpNoMoreLocks= -5015; { Maximum lock limit reached }
|
|
|
|
+ afpRangeNotLocked= -5020; { Tried to unlock range that was not locked by user }
|
|
|
|
+ afpRangeOverlap= -5021; { Some or all of range already locked by same user }
|
|
|
|
+ afpObjectTypeErr= -5025; { File/Directory specified where Directory/File expected }
|
|
|
|
+ afpCatalogChanged= -5037;
|
|
|
|
+ afpSameObjectErr= -5038;
|
|
|
|
+
|
|
|
|
+ memFullErr = -108; { Not enough room in heap zone }
|
|
|
|
+
|
|
|
|
+{************** from others ***************}
|
|
|
|
+
|
|
|
|
+procedure ExitToShell;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+procedure SysBeep(dur: Integer);
|
|
|
|
+external 'SysBeep';
|
|
|
|
+
|
|
|
|
+function TickCount: Longint;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+function Munger (h: Mac_Handle; offset: LONGINT; ptr1: Mac_Ptr;
|
|
|
|
+ len1: LONGINT; ptr2: Mac_Ptr; len2: LONGINT): LONGINT;
|
|
|
|
+external 'InterfaceLib';
|
|
|
|
+
|
|
|
|
+
|