mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-16 10:59:58 +02:00
304 lines
11 KiB
ObjectPascal
304 lines
11 KiB
ObjectPascal
{****************************************************************************
|
|
|
|
$Id$
|
|
|
|
Common types, and definitions
|
|
|
|
Copyright (c) 1997 Balazs Scheidler (bazsi@balabit.hu)
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
|
|
This library 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. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public
|
|
License along with this library; if not, write to the Free
|
|
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
****************************************************************************
|
|
$Id$
|
|
****************************************************************************
|
|
|
|
Changelog:
|
|
|
|
Common version 0.2.6
|
|
|
|
Date Version Who Comments
|
|
07/12/97 0.1 Bazsi Initial implementation (bazsi)
|
|
07/18/97 0.2 Bazsi Linux specific error codes added
|
|
07/18/97 0.2.1 Bazsi Some syntactical errors removed...
|
|
07/28/97 0.2.2 Bazsi Base error code for Video registered
|
|
07/29/97 0.2.3 Bazsi Some basic types added (PByte, PWord etc)
|
|
08/08/97 0.2.4 Bazsi Finalized error handling code (Brad's code added)
|
|
08/27/97 0.2.5 Bazsi BP doesn't like function types as return-values
|
|
for functions, returning Pointer instead
|
|
09/06/97 0.2.6 Bazsi Added base error code for Keyboard
|
|
11/06/97 0.2.7 Bazsi Added base error code for FileCtrl
|
|
|
|
Todo:
|
|
|
|
* Some types found in the DOS unit should be included here (TextRec maybe
|
|
renamed to TTextRec, FileRec etc.)
|
|
* Other platform specific error codes.
|
|
|
|
****************************************************************************}
|
|
unit ApiComm;
|
|
|
|
interface
|
|
|
|
{$i platform.inc}
|
|
|
|
const
|
|
{ Error codes }
|
|
errOk = 0;
|
|
errVioBase = 1000;
|
|
errKbdBase = 1010;
|
|
errFileCtrlBase = 1020;
|
|
errMouseBase = 1030;
|
|
{ The following ranges have been defined for error codes:
|
|
0 - 1000 OS dependent codes
|
|
1000 - 10000 API reserved codes
|
|
10000 - Add-on unit errors
|
|
Before anyone adding a unit, contact bazsi@tas.vein.hu to assign a base
|
|
error code, to avoid collisions.
|
|
|
|
The symbolic names of error codes should be defined in the unit which uses
|
|
those error codes, except for OS dependent ones, which should be defined here
|
|
enclosed in IFDEFs. (The reason is that not always you can't always decide
|
|
which error-code belongs to one unit or the other) }
|
|
|
|
{$IFDEF OS_Linux}
|
|
{ for a more complete description of each error check /usr/include/asm/errno.h }
|
|
errNotPermitted = 1;
|
|
errFileNotFound = 2;
|
|
errNoSuchProcess = 3;
|
|
errInterruptedCall = 4;
|
|
errIOError = 5;
|
|
errNoDevAddr = 6;
|
|
errTooManyArguments = 7;
|
|
errExecError = 8;
|
|
errBadFileHandle = 9;
|
|
errNoChild = 10;
|
|
errTryAgain = 11;
|
|
errWouldBlock = errTryAgain;
|
|
errOutOfMemory = 12;
|
|
errNoPermission = 13;
|
|
errInvalidAddress = 14; { Invalid pointer passed to kernel }
|
|
errNotBlockDev = 15;
|
|
errDeviceBusy = 16;
|
|
errFileExists = 17;
|
|
errCrossDevice = 18;
|
|
errNoSuchDev = 19;
|
|
errNotDirectory = 20;
|
|
errIsDirectory = 21;
|
|
errInvalidArgument = 22;
|
|
errFileTableOverflow = 23;
|
|
errTooManyOpenFiles = 24;
|
|
errNotATTY = 25;
|
|
errTextBusy = 26;
|
|
errFileTooLarge = 27;
|
|
errDiskFull = 28;
|
|
errIllegalSeek = 29;
|
|
errReadOnlyFS = 30;
|
|
errTooManyLinks = 31;
|
|
errBrokenPipe = 32;
|
|
errMathDomain = 33; { Math domain error, what does this mean? }
|
|
errMathRange = 34; { Math result out of range }
|
|
errDeadLock = 35;
|
|
errFileNameTooLong = 36;
|
|
errNoLock = 37; { No record locks available }
|
|
errNotImplemented = 38; { Kernel function not implemented }
|
|
errDirNotEmpty = 39;
|
|
errSymlinkLoop = 40;
|
|
errNoMessage = 41; { ??? maybe the IPC getmsg call returns this }
|
|
{ Here are some errors that are too cryptic for me, I think they are not used
|
|
under Linux, only on some mainframes (channel errors etc) }
|
|
errBadFont = 59;
|
|
errNotStream = 60;
|
|
errNoData = 61;
|
|
errTimeOut = 62;
|
|
errNoMoreStreams = 63;
|
|
errNoNetwork = 64;
|
|
errPackageNotInstalled = 65; { ??? }
|
|
errRemote = 66;
|
|
errSevereLink = 67;
|
|
errAdvertise = 68; { Advertise error??? }
|
|
errSrMount = 69;
|
|
errCommunication = 70; { Communication error on send? }
|
|
errProtocol = 71; { Protocol error }
|
|
errMuiltiHop = 72;
|
|
errDotDot = 73; { RFS specific error ???}
|
|
errBadMessage = 74; { Not a data message }
|
|
errOverflow = 75;
|
|
errNotUnique = 76; { Network name not unique }
|
|
errBadFileHandleState = 77;
|
|
errRemoteChange = 78; { Remote address changed }
|
|
errLibAccess = 79; { Cannot access the needed shared lib }
|
|
errLibCorrupt = 80; { Shared library corrupted }
|
|
errLibScn = 81;
|
|
errLibTooMany = 82; { Too many shared libraries }
|
|
errLibExec = 83; { Attempting to execute a shared lib }
|
|
errIllegalSequence = 84; { Illegal byte sequence ??? }
|
|
errRestart = 85; { interrupted system call should be restarted }
|
|
errStreamPipe = 86;
|
|
errTooManyUsers = 87;
|
|
errNotSocket = 88;
|
|
errDestAddrRequired = 89;
|
|
errMessageTooLong = 90;
|
|
errProtocolType = 91;
|
|
errNoSuchProtocol = 92;
|
|
errProtocolNotSupported = 93;
|
|
errSocketTypeNotSupported = 94;
|
|
errOperationNotSupported= 95;
|
|
errPFamilyNotSupported = 96; { Protocol family not supported }
|
|
errAFamilyNotSupported = 97; { Address family not supported }
|
|
errAddressInUse = 98;
|
|
errAddressNotAvailable = 99;
|
|
errNetDown = 100;
|
|
errNetUnreachable = 101;
|
|
errNetReset = 102;
|
|
errConnAborted = 103;
|
|
errConnReset = 104;
|
|
errNoBufs = 105;
|
|
errAlreadyConn = 106;
|
|
errNotConn = 107;
|
|
errShutdown = 108;
|
|
errTooManyRefs = 109;
|
|
errConnTimeOut = 110;
|
|
errConnRefused = 111;
|
|
errHostDown = 112;
|
|
errNoRoute = 113; { No route to host }
|
|
errOperationProgress = 114; { Operation already in progress }
|
|
errStaleNFSHandle = 115;
|
|
errStrucClean = 116; { Structure needs cleaning ? }
|
|
{ Xenix specific codes left out }
|
|
errRemoteIO = 121;
|
|
errQuotaExceeded = 122;
|
|
{$ENDIF}
|
|
{$IFDEF OS_DOS}
|
|
{ DOS specific error-codes to be added }
|
|
{$ENDIF}
|
|
|
|
|
|
|
|
type
|
|
{$IFDEF BIT_32}
|
|
CPUWord = Longint;
|
|
CPUInt = Longint;
|
|
{$ELSE}
|
|
CPUWord = Word;
|
|
CPUInt = Integer;
|
|
{$ENDIF}
|
|
|
|
PByte = ^Byte;
|
|
PWord = ^Word;
|
|
PLongint = ^Longint;
|
|
|
|
{ This code is taken from Brad Williams code, with some modifications }
|
|
type
|
|
TErrorHandlerReturnValue = (errRetry, errAbort, errContinue);
|
|
{ errRetry = retry the operation,
|
|
errAbort = abort, return error code,
|
|
errContinue = abort, without returning errorcode }
|
|
|
|
TErrorHandler = function (Code: Longint; Info: Pointer): TErrorHandlerReturnValue;
|
|
{ ErrorHandler is the standard procedural interface for all error functions.
|
|
Info may contain any data type specific to the error code passed to the
|
|
function. }
|
|
|
|
function GetErrorCode: Longint;
|
|
{ Returns the last error code, and resets it to 0 (errOK) }
|
|
function GetErrorInfo: Pointer;
|
|
{ Returns the info assigned to the previous error, doesn't reset the value to nil }
|
|
{$IFDEF PPC_BP}
|
|
function SetErrorHandler(AErrorHandler: TErrorHandler): Pointer;
|
|
{$ELSE}
|
|
function SetErrorHandler(AErrorHandler: TErrorHandler): TErrorHandler;
|
|
{$ENDIF}
|
|
{ Sets ErrorHandler to AErrorHandler, and returns the old one }
|
|
function DefaultErrorHandler(AErrorCode: Longint; AErrorInfo: Pointer): TErrorHandlerReturnValue;
|
|
{ Default error handler, simply sets error code, and returns errContinue }
|
|
|
|
const
|
|
ErrorCode: Longint = errOk;
|
|
ErrorInfo: Pointer = nil;
|
|
ErrorHandler: TErrorHandler = DefaultErrorHandler;
|
|
|
|
implementation
|
|
|
|
function GetErrorCode: Longint;
|
|
begin
|
|
GetErrorCode := ErrorCode;
|
|
ErrorCode := 0;
|
|
end;
|
|
|
|
function GetErrorInfo: Pointer;
|
|
begin
|
|
GetErrorInfo := ErrorInfo;
|
|
end;
|
|
|
|
{$IFDEF PPC_BP}
|
|
function SetErrorHandler(AErrorHandler: TErrorHandler): Pointer;
|
|
begin
|
|
SetErrorHandler := @ErrorHandler;
|
|
ErrorHandler := AErrorHandler;
|
|
end;
|
|
{$ELSE}
|
|
function SetErrorHandler(AErrorHandler: TErrorHandler): TErrorHandler;
|
|
begin
|
|
SetErrorHandler := ErrorHandler;
|
|
ErrorHandler := AErrorHandler;
|
|
end;
|
|
{$ENDIF}
|
|
|
|
function DefaultErrorHandler(AErrorCode: Longint; AErrorInfo: Pointer): TErrorHandlerReturnValue;
|
|
begin
|
|
ErrorCode := AErrorCode;
|
|
ErrorInfo := AErrorInfo;
|
|
DefaultErrorHandler := errAbort; { return error code }
|
|
end;
|
|
|
|
end.
|
|
{
|
|
$Log$
|
|
Revision 1.1 2000-02-29 11:43:16 pierre
|
|
Common renamed APIComm to avoid problems with free vision
|
|
|
|
Revision 1.1 2000/01/06 01:20:31 peter
|
|
* moved out of packages/ back to topdir
|
|
|
|
Revision 1.1 1999/12/23 19:36:47 peter
|
|
* place unitfiles in target dirs
|
|
|
|
Revision 1.1 1999/11/24 23:36:37 peter
|
|
* moved to packages dir
|
|
|
|
Revision 1.1 1998/12/04 12:48:24 peter
|
|
* moved some dirs
|
|
|
|
Revision 1.5 1998/10/28 00:02:05 peter
|
|
+ mouse
|
|
+ video.clearscreen, video.videobufsize
|
|
|
|
Revision 1.4 1998/10/26 11:22:48 peter
|
|
* updates
|
|
|
|
|
|
Date Version Who Comments
|
|
07/12/97 0.1 Bazsi Initial implementation (bazsi)
|
|
07/18/97 0.2 Bazsi Linux specific error codes added
|
|
07/18/97 0.2.1 Bazsi Some syntactical errors removed...
|
|
07/28/97 0.2.2 Bazsi Base error code for Video registered
|
|
07/29/97 0.2.3 Bazsi Some basic types added (PByte, PWord etc)
|
|
08/08/97 0.2.4 Bazsi Finalized error handling code (Brad's code added)
|
|
08/27/97 0.2.5 Bazsi BP doesn't like function types as return-values
|
|
for functions, returning Pointer instead
|
|
09/06/97 0.2.6 Bazsi Added base error code for Keyboard
|
|
11/06/97 0.2.7 Bazsi Added base error code for FileCtrl
|
|
} |