fpc/rtl/macos/macostp.inc
2004-04-29 11:28:51 +00:00

409 lines
11 KiB
PHP

{
$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 'InterfaceLib';
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';