mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 11:24:16 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			548 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			548 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{****************************************************************************
 | 
						|
 | 
						|
   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 Common;
 | 
						|
 | 
						|
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.
 | 
						|
{
 | 
						|
   $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.
 | 
						|
 | 
						|
 ****************************************************************************
 | 
						|
 | 
						|
 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 Common;
 | 
						|
 | 
						|
interface
 | 
						|
 | 
						|
{$i platform.inc}
 | 
						|
 | 
						|
const
 | 
						|
  { Error codes }
 | 
						|
  errOk                 = 0;
 | 
						|
  errVioBase            = 1000;
 | 
						|
  errKbdBase            = 1010;
 | 
						|
  errFileCtrlBase       = 1020;
 | 
						|
  { 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-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
 | 
						|
}
 |