123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125 |
- {
- This file contains the OS independent declarations of the system unit
- This file is part of the Free Pascal Run time library.
- Copyright (c) 1999-2005 by the Free Pascal development team
- 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.
- **********************************************************************}
- {****************************************************************************
- Needed switches
- ****************************************************************************}
- {$I-,Q-,H-,R-,V-}
- {$mode objfpc}
- { At least 2.0.0 is required }
- {$if defined(VER1) or defined(VER2_0) or defined(VER2_2_0) }
- {$fatal You need at least FPC 2.2.2 to build this version of FPC}
- {$endif}
- { Using inlining for small system functions/wrappers }
- {$inline on}
- {$define SYSTEMINLINE}
- { don't use FPU registervariables on the i386 }
- {$ifdef CPUI386}
- {$maxfpuregisters 0}
- {$endif CPUI386}
- { the assembler helpers need this}
- {$ifdef CPUPOWERPC}
- {$goto+}
- {$endif CPUPOWERPC}
- {$ifdef CPUAVR}
- {$goto+}
- {$endif CPUAVR}
- { needed for insert,delete,readln }
- {$P+}
- { stack checking always disabled
- for system unit. This is because
- the startup code might not
- have been called yet when we
- get a stack error, this will
- cause big crashes
- }
- {$S-}
- {$ifndef FPC_HAS_FEATURE_SUPPORT}
- {$define FPC_HAS_FEATURE_HEAP}
- {$define FPC_HAS_FEATURE_INITFINAL}
- {$define FPC_HAS_FEATURE_RTTI}
- {$define FPC_HAS_FEATURE_CLASSES}
- {$define FPC_HAS_FEATURE_EXCEPTIONS}
- {$define FPC_HAS_FEATURE_EXITCODE}
- {$define FPC_HAS_FEATURE_ANSISTRINGS}
- {$define FPC_HAS_FEATURE_WIDESTRINGS}
- {$define FPC_HAS_FEATURE_TEXTIO}
- {$define FPC_HAS_FEATURE_CONSOLEIO}
- {$define FPC_HAS_FEATURE_FILEIO}
- {$define FPC_HAS_FEATURE_RANDOM}
- {$define FPC_HAS_FEATURE_VARIANTS}
- {$define FPC_HAS_FEATURE_OBJECTS}
- {$define FPC_HAS_FEATURE_DYNARRAYS}
- {$define FPC_HAS_FEATURE_THREADING}
- {$define FPC_HAS_FEATURE_COMMANDARGS}
- {$define FPC_HAS_FEATURE_PROCESSES}
- {$define FPC_HAS_FEATURE_STACKCHECK}
- {$define FPC_HAS_FEATURE_DYNLIBS}
- {$define FPC_HAS_FEATURE_OBJECTIVEC1}
- {$endif FPC_HAS_FEATURE_SUPPORT}
- {$ifndef VER2_2}
- {$ifndef FPC_HAS_UNICODESTRING}
- {$error Building trunk is only supported when using the latest release as a starting compiler}
- {$endif}
- {$endif}
- {****************************************************************************
- Global Types and Constants
- ****************************************************************************}
- Type
- { The compiler has all integer types defined internally. Here
- we define only aliases }
- DWord = LongWord;
- Cardinal = LongWord;
- Integer = SmallInt;
- UInt64 = QWord;
- { moved here from psystem.pas
- Delphi allows chose of overloaded procedure depending
- on Real <-> Double, so use type here, see also tw7425.pp (FK) }
- {$ifndef FPUNONE}
- {$ifndef VER2_0}
- Real = type Double;
- {$endif VER2_0}
- {$endif}
- {$ifdef CPUI386}
- {$define CPU32}
- {$define DEFAULT_EXTENDED}
- {$define SUPPORT_SINGLE}
- {$define SUPPORT_DOUBLE}
- {$define SUPPORT_EXTENDED}
- {$define SUPPORT_COMP}
- {$ifndef FPUNONE}
- ValReal = Extended;
- {$endif}
- {$endif CPUI386}
- {$ifdef CPUX86_64}
- {$ifndef WIN64}
- { win64 doesn't support the legacy fpu }
- {$define DEFAULT_EXTENDED}
- {$define SUPPORT_EXTENDED}
- {$define SUPPORT_COMP}
- {$ifndef FPUNONE}
- ValReal = Extended;
- {$endif}
- {$else WIN64}
- {$define DEFAULT_DOUBLE}
- {$ifndef FPUNONE}
- ValReal = Double;
- {$endif}
- { map comp to int64, but this doesn't mean we compile the comp support in! }
- Comp = Int64;
- PComp = ^Comp;
- {$endif WIN64}
- {$define SUPPORT_SINGLE}
- {$define SUPPORT_DOUBLE}
- {$endif CPUX86_64}
- {$ifdef CPUM68K}
- {$define DEFAULT_DOUBLE}
- {$define SUPPORT_SINGLE}
- {$define SUPPORT_DOUBLE}
- {$ifndef FPUNONE}
- ValReal = Real;
- {$endif}
- { Comp type does not exist on fpu }
- Comp = int64;
- PComp = ^Comp;
- FarPointer = Pointer;
- {$endif CPUM68K}
- {$ifdef CPUPOWERPC}
- {$define DEFAULT_DOUBLE}
- {$ifndef FPUNONE}
- {$define SUPPORT_SINGLE}
- {$define SUPPORT_DOUBLE}
- {$define FPC_INCLUDE_SOFTWARE_INT64_TO_DOUBLE}
- ValReal = Double;
- {$endif}
- { map comp to int64, but this doesn't mean we compile the comp support in! }
- Comp = Int64;
- PComp = ^Comp;
- FarPointer = Pointer;
- {$endif CPUPOWERPC}
- {$ifdef CPUSPARC}
- {$define DEFAULT_DOUBLE}
- {$define SUPPORT_SINGLE}
- {$define SUPPORT_DOUBLE}
- {$define FPC_INCLUDE_SOFTWARE_SHIFT_INT64}
- {$ifndef FPUNONE}
- ValReal = Double;
- {$endif}
- { map comp to int64, but this doesn't mean we compile the comp support in! }
- Comp = Int64;
- PComp = ^Comp;
- FarPointer = Pointer;
- {$endif CPUSPARC}
- {$ifdef CPUARM}
- {$define DEFAULT_DOUBLE}
- {$define SUPPORT_SINGLE}
- {$define SUPPORT_DOUBLE}
- {$define FPC_INCLUDE_SOFTWARE_MOD_DIV}
- {$define FPC_INCLUDE_SOFTWARE_SHIFT_INT64}
- {$define FPC_INCLUDE_SOFTWARE_INT64_TO_DOUBLE}
- {$ifndef FPUNONE}
- ValReal = Real;
- {$endif}
- { map comp to int64, but this doesn't mean we compile the comp support in! }
- Comp = Int64;
- PComp = ^Comp;
- FarPointer = Pointer;
- {$endif CPUARM}
- {$ifdef CPUAVR}
- {$define DEFAULT_SINGLE}
- {$define FPC_INCLUDE_SOFTWARE_MOD_DIV}
- {$define FPC_INCLUDE_SOFTWARE_SHIFT_INT64}
- {$ifndef FPUNONE}
- {$define SUPPORT_SINGLE}
- {$define SUPPORT_DOUBLE}
- {$define FPC_INCLUDE_SOFTWARE_INT64_TO_DOUBLE}
- ValReal = Real;
- {$endif}
- { map comp to int64, but this doesn't mean we compile the comp support in! }
- Comp = Int64;
- PComp = ^Comp;
- FarPointer = Pointer;
- {$endif CPUARM}
- {$ifdef CPU64}
- SizeInt = Int64;
- SizeUInt = QWord;
- PtrInt = Int64;
- PtrUInt = QWord;
- ValSInt = int64;
- ValUInt = qword;
- {$endif CPU64}
- {$ifdef CPU32}
- SizeInt = Longint;
- SizeUInt = DWord;
- PtrInt = Longint;
- PtrUInt = DWord;
- ValSInt = Longint;
- ValUInt = Cardinal;
- {$endif CPU32}
- {$ifdef CPU16}
- SizeInt = Integer;
- SizeUInt = Word;
- PtrInt = Integer;
- PtrUInt = Word;
- ValSInt = Integer;
- ValUInt = Word;
- {$endif CPU16}
- { Zero - terminated strings }
- PChar = ^Char;
- PPChar = ^PChar;
- { AnsiChar is equivalent of Char, so we need
- to use type renamings }
- TAnsiChar = Char;
- AnsiChar = Char;
- PAnsiChar = PChar;
- PPAnsiChar = PPChar;
- UCS4Char = type 0..$10ffff;
- PUCS4Char = ^UCS4Char;
- {$ifdef CPU16}
- TUCS4CharArray = array[0..32767 div sizeof(UCS4Char)-1] of UCS4Char;
- {$else CPU16}
- TUCS4CharArray = array[0..$effffff] of UCS4Char;
- {$endif CPU16}
- PUCS4CharArray = ^TUCS4CharArray;
- UCS4String = array of UCS4Char;
- UTF8String = type ansistring;
- PUTF8String = ^UTF8String;
- HRESULT = type Longint;
- {$ifndef FPUNONE}
- TDateTime = type Double;
- {$endif}
- TError = type Longint;
- {$ifndef FPUNONE}
- PSingle = ^Single;
- PDouble = ^Double;
- PExtended = ^Extended;
- {$endif}
- PCurrency = ^Currency;
- {$ifdef SUPPORT_COMP}
- PComp = ^Comp;
- {$endif SUPPORT_COMP}
- PSmallInt = ^Smallint;
- PShortInt = ^Shortint;
- PInteger = ^Integer;
- PByte = ^Byte;
- PWord = ^word;
- PDWord = ^DWord;
- PLongWord = ^LongWord;
- PLongint = ^Longint;
- PCardinal = ^Cardinal;
- PQWord = ^QWord;
- PInt64 = ^Int64;
- PPtrInt = ^PtrInt;
- PPtrUInt = ^PtrUInt;
- PSizeInt = ^SizeInt;
- PPointer = ^Pointer;
- PPPointer = ^PPointer;
- PBoolean = ^Boolean;
- PWordBool = ^WordBool;
- PLongBool = ^LongBool;
- PShortString = ^ShortString;
- PAnsiString = ^AnsiString;
- {$ifndef FPUNONE}
- PDate = ^TDateTime;
- PDateTime = ^TDateTime;
- {$endif}
- PError = ^TError;
- PVariant = ^Variant;
- POleVariant = ^OleVariant;
- PWideChar = ^WideChar;
- PPWideChar = ^PWideChar;
- WChar = Widechar;
- UCS2Char = WideChar;
- PUCS2Char = PWideChar;
- PWideString = ^WideString;
- UnicodeChar = WideChar;
- PUnicodeChar = ^UnicodeChar;
- {$ifdef VER2_2}
- { this is only to avoid too much ifdefs in the code }
- UnicodeString = type WideString;
- {$endif VER2_2}
- PUnicodeString = ^UnicodeString;
- { Needed for fpc_get_output }
- PText = ^Text;
- TTextLineBreakStyle = (tlbsLF,tlbsCRLF,tlbsCR);
- { procedure type }
- TProcedure = Procedure;
- { platform dependent types }
- {$i sysosh.inc}
- type
- TEntryInformation = record
- InitFinalTable : Pointer;
- ThreadvarTablesTable : Pointer;
- asm_exit : Procedure;stdcall;
- PascalMain : Procedure;stdcall;
- valgrind_used : boolean;
- end;
- const
- { Maximum value of the biggest signed and unsigned integer type available}
- MaxSIntValue = High(ValSInt);
- MaxUIntValue = High(ValUInt);
- { max. values for longint and int}
- maxLongint = $7fffffff;
- maxSmallint = 32767;
- maxint = maxsmallint;
- type
- {$ifdef CPU16}
- IntegerArray = array[0..maxSmallint div sizeof(Integer)-1] of Integer;
- {$else CPU16}
- IntegerArray = array[0..$effffff] of Integer;
- {$endif CPU16}
- PIntegerArray = ^IntegerArray;
- {$ifdef CPU16}
- PointerArray = array [0..32767 div sizeof(Pointer)-1] of Pointer;
- {$else CPU16}
- PointerArray = array [0..512*1024*1024-2] of Pointer;
- {$endif CPU16}
- PPointerArray = ^PointerArray;
- TBoundArray = array of SizeInt;
- {$ifdef CPU16}
- TPCharArray = packed array[0..(MaxSmallint div SizeOf(PChar))-1] of PChar;
- {$else CPU16}
- TPCharArray = packed array[0..(MaxLongint div SizeOf(PChar))-1] of PChar;
- {$endif CPU16}
- PPCharArray = ^TPCharArray;
- (* CtrlBreak set to true signalizes Ctrl-Break signal, otherwise Ctrl-C. *)
- (* Return value of true means that the signal has been processed, false *)
- (* means that default handling should be used. *)
- TCtrlBreakHandler = function (CtrlBreak: boolean): boolean;
- const
- {$ifdef cpui386}
- { Always i386 or newer }
- Test8086 : byte = 2;
- { Always 387 or newer. Emulated if needed. }
- Test8087 : byte = 3;
- { will be detected at startup }
- has_sse_support : boolean = false;
- has_mmx_support : boolean = false;
- {$endif cpui386}
- {$ifdef cpum68k}
- Test68000 : byte = 0; { Must be determined at startup for both }
- Test68881 : byte = 0;
- {$endif cpum68k}
- { max level in dumping on error }
- Max_Frame_Dump : Word = 8;
- { Exit Procedure handling consts and types }
- ExitProc : pointer = nil;
- Erroraddr: pointer = nil;
- Errorcode: Word = 0;
- { file input modes }
- fmClosed = $D7B0;
- fmInput = $D7B1;
- fmOutput = $D7B2;
- fmInOut = $D7B3;
- fmAppend = $D7B4;
- Filemode : byte = 2;
- (* Value should be changed during system initialization as appropriate. *)
- { assume that this program will not spawn other threads, when the
- first thread is started the following constants need to be filled }
- IsMultiThread : longbool = FALSE;
- { set to true, if a threading helper is used before a thread
- manager has been installed }
- ThreadingAlreadyUsed : boolean = FALSE;
- { Indicates if there was an error }
- StackError : boolean = FALSE;
- InitProc : Pointer = nil;
- { compatibility }
- ModuleIsLib : Boolean = FALSE;
- ModuleIsPackage : Boolean = FALSE;
- ModuleIsCpp : Boolean = FALSE;
- var
- ExitCode : Longint; public name 'operatingsystem_result';
- RandSeed : Cardinal;
- { Delphi compatibility }
- IsLibrary : boolean = false;
- IsConsole : boolean;
- { Threading support }
- fpc_threadvar_relocate_proc : pointer; public name 'FPC_THREADVAR_RELOCATE';
- {$ifndef HAS_CMDLINE}
- {Value should be changed during system initialization as appropriate.}
- var cmdline:Pchar=nil;
- {$endif}
- ThreadVar
- ThreadID : TThreadID;
- { Standard In- and Output }
- ErrOutput,
- Output,
- Input,
- StdOut,
- StdErr : Text;
- InOutRes : Word;
- { Stack checking }
- StackTop,
- StackBottom : Pointer;
- StackLength : SizeUInt;
- { Numbers for routines that have compiler magic }
- {$I innr.inc}
- {****************************************************************************
- Processor specific routines
- ****************************************************************************}
- {$ifdef FPC_USE_LIBC}
- {$ifdef SYSTEMINLINE}
- {$define INLINEGENERICS}
- {$endif}
- {$endif}
- Procedure Move(const source;var dest;count:SizeInt);
- Procedure FillChar(var x;count:SizeInt;Value:Byte);
- Procedure FillChar(var x;count:SizeInt;Value:Boolean);
- Procedure FillChar(var x;count:SizeInt;Value:Char);
- procedure FillByte(var x;count:SizeInt;value:byte);
- Procedure FillWord(var x;count:SizeInt;Value:Word);
- procedure FillDWord(var x;count:SizeInt;value:DWord);
- procedure FillQWord(var x;count:SizeInt;value:QWord);
- function IndexChar(const buf;len:SizeInt;b:char):SizeInt;
- function IndexByte(const buf;len:SizeInt;b:byte):SizeInt;
- function Indexword(const buf;len:SizeInt;b:word):SizeInt;
- function IndexDWord(const buf;len:SizeInt;b:DWord):SizeInt;
- function IndexQWord(const buf;len:SizeInt;b:QWord):SizeInt;
- function CompareChar(const buf1,buf2;len:SizeInt):SizeInt;
- function CompareByte(const buf1,buf2;len:SizeInt):SizeInt;
- function CompareWord(const buf1,buf2;len:SizeInt):SizeInt;
- function CompareDWord(const buf1,buf2;len:SizeInt):SizeInt;
- procedure MoveChar0(const buf1;var buf2;len:SizeInt);
- function IndexChar0(const buf;len:SizeInt;b:char):SizeInt;
- function CompareChar0(const buf1,buf2;len:SizeInt):SizeInt;
- procedure prefetch(const mem);[internproc:fpc_in_prefetch_var];
- procedure ReadBarrier;
- procedure ReadDependencyBarrier;
- procedure ReadWriteBarrier;
- procedure WriteBarrier;
- {****************************************************************************
- Math Routines
- ****************************************************************************}
- Function lo(B: Byte):Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
- Function hi(b : Byte) : Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
- Function lo(i : Integer) : byte; [INTERNPROC: fpc_in_lo_Word];
- Function lo(w : Word) : byte; [INTERNPROC: fpc_in_lo_Word];
- Function lo(l : Longint) : Word; [INTERNPROC: fpc_in_lo_long];
- Function lo(l : DWord) : Word; [INTERNPROC: fpc_in_lo_long];
- Function lo(i : Int64) : DWord; [INTERNPROC: fpc_in_lo_qword];
- Function lo(q : QWord) : DWord; [INTERNPROC: fpc_in_lo_qword];
- Function hi(i : Integer) : byte; [INTERNPROC: fpc_in_hi_Word];
- Function hi(w : Word) : byte; [INTERNPROC: fpc_in_hi_Word];
- Function hi(l : Longint) : Word; [INTERNPROC: fpc_in_hi_long];
- Function hi(l : DWord) : Word; [INTERNPROC: fpc_in_hi_long];
- Function hi(i : Int64) : DWord; [INTERNPROC: fpc_in_hi_qword];
- Function hi(q : QWord) : DWord; [INTERNPROC: fpc_in_hi_qword];
- Function swap (X : Word) : Word;{$ifdef SYSTEMINLINE}inline;{$endif}[internconst:fpc_in_const_swap_word];
- Function Swap (X : Integer) : Integer;{$ifdef SYSTEMINLINE}inline;{$endif}[internconst:fpc_in_const_swap_word];
- Function swap (X : Longint) : Longint;{$ifdef SYSTEMINLINE}inline;{$endif}[internconst:fpc_in_const_swap_long];
- Function Swap (X : Cardinal) : Cardinal;{$ifdef SYSTEMINLINE}inline;{$endif}[internconst:fpc_in_const_swap_long];
- Function Swap (X : QWord) : QWord;{$ifdef SYSTEMINLINE}inline;{$endif}[internconst:fpc_in_const_swap_qword];
- Function swap (X : Int64) : Int64;{$ifdef SYSTEMINLINE}inline;{$endif}[internconst:fpc_in_const_swap_qword];
- Function Align (Addr : PtrUInt; Alignment : PtrUInt) : PtrUInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- Function Align (Addr : Pointer; Alignment : PtrUInt) : Pointer;{$ifdef SYSTEMINLINE}inline;{$endif}
- {$ifdef FPC_HAS_FEATURE_RANDOM}
- Function Random(l:longint):longint;
- Function Random(l:int64):int64;
- {$ifndef FPUNONE}
- Function Random: extended;
- {$endif}
- Procedure Randomize;
- {$endif FPC_HAS_FEATURE_RANDOM}
- {$ifdef FPC_HAS_INTERNAL_ABS_LONG and (defined(cpui386) or defined(cpux86_64) or defined(cpupowerpc))}
- {$define FPC_SYSTEM_HAS_ABS_LONGINT}
- Function abs(l:longint):longint;[internproc:fpc_in_abs_long];
- {$else FPC_HAS_INTERNAL_ABS_LONG}
- Function abs(l:Longint):Longint;[internconst:fpc_in_const_abs];{$ifdef SYSTEMINLINE}inline;{$endif}
- {$endif FPC_HAS_INTERNAL_ABS_LONG}
- Function abs(l:Int64):Int64;[internconst:fpc_in_const_abs];{$ifdef SYSTEMINLINE}inline;{$endif}
- Function sqr(l:Longint):Longint;[internconst:fpc_in_const_sqr];{$ifdef SYSTEMINLINE}inline;{$endif}
- Function sqr(l:Int64):Int64;[internconst:fpc_in_const_sqr];{$ifdef SYSTEMINLINE}inline;{$endif}
- Function sqr(l:QWord):QWord;[internconst:fpc_in_const_sqr];{$ifdef SYSTEMINLINE}inline;{$endif}
- Function odd(l:Longint):Boolean;[internconst:fpc_in_const_odd];{$ifdef SYSTEMINLINE}inline;{$endif}
- Function odd(l:Longword):Boolean;[internconst:fpc_in_const_odd];{$ifdef SYSTEMINLINE}inline;{$endif}
- Function odd(l:Int64):Boolean;[internconst:fpc_in_const_odd];{$ifdef SYSTEMINLINE}inline;{$endif}
- Function odd(l:QWord):Boolean;[internconst:fpc_in_const_odd];{$ifdef SYSTEMINLINE}inline;{$endif}
- function SwapEndian(const AValue: SmallInt): SmallInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- function SwapEndian(const AValue: Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- function SwapEndian(const AValue: LongInt): LongInt;
- function SwapEndian(const AValue: DWord): DWord;
- function SwapEndian(const AValue: Int64): Int64;
- function SwapEndian(const AValue: QWord): QWord;
- function BEtoN(const AValue: SmallInt): SmallInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- function BEtoN(const AValue: Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- function BEtoN(const AValue: LongInt): LongInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- function BEtoN(const AValue: DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function BEtoN(const AValue: Int64): Int64;{$ifdef SYSTEMINLINE}inline;{$endif}
- function BEtoN(const AValue: QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function LEtoN(const AValue: SmallInt): SmallInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- function LEtoN(const AValue: Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- function LEtoN(const AValue: LongInt): LongInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- function LEtoN(const AValue: DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function LEtoN(const AValue: Int64): Int64;{$ifdef SYSTEMINLINE}inline;{$endif}
- function LEtoN(const AValue: QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoBE(const AValue: SmallInt): SmallInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoBE(const AValue: Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoBE(const AValue: LongInt): LongInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoBE(const AValue: DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoBE(const AValue: Int64): Int64;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoBE(const AValue: QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoLE(const AValue: SmallInt): SmallInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoLE(const AValue: Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoLE(const AValue: LongInt): LongInt;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoLE(const AValue: DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoLE(const AValue: Int64): Int64;{$ifdef SYSTEMINLINE}inline;{$endif}
- function NtoLE(const AValue: QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- {$ifdef FPC_HAS_INTERNAL_ROX}
- {$if defined(cpux86_64) or defined(cpui386)}
- {$define FPC_HAS_INTERNAL_ROX_BYTE}
- {$define FPC_HAS_INTERNAL_ROX_WORD}
- {$endif defined(cpux86_64) or defined(cpui386)}
- {$if defined(cpux86_64) or defined(cpui386) or defined(arm) or defined(powerpc) or defined(powerpc64)}
- {$define FPC_HAS_INTERNAL_ROX_DWORD}
- {$endif defined(cpux86_64) or defined(cpui386) or defined(arm) or defined(powerpc) or defined(powerpc64)}
- {$if defined(cpux86_64) or defined(powerpc64)}
- {$define FPC_HAS_INTERNAL_ROX_QWORD}
- {$endif defined(cpux86_64) or defined(powerpc64)}
- {$endif FPC_HAS_INTERNAL_ROX}
- {$ifdef FPC_HAS_INTERNAL_ROX_BYTE}
- function RorByte(Const AValue : Byte): Byte;[internproc:fpc_in_ror_x];
- function RorByte(Const AValue : Byte;Dist : Byte): Byte;[internproc:fpc_in_ror_x_x];
- function RolByte(Const AValue : Byte): Byte;[internproc:fpc_in_rol_x];
- function RolByte(Const AValue : Byte;Dist : Byte): Byte;[internproc:fpc_in_rol_x_x];
- {$else FPC_HAS_INTERNAL_ROX_BYTE}
- function RorByte(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RorByte(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RolByte(Const AValue : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RolByte(Const AValue : Byte;Dist : Byte): Byte;{$ifdef SYSTEMINLINE}inline;{$endif}
- {$endif FPC_HAS_INTERNAL_ROX_BYTE}
- {$ifdef FPC_HAS_INTERNAL_ROX_WORD}
- function RorWord(Const AValue : Word): Word;[internproc:fpc_in_ror_x];
- function RorWord(Const AValue : Word;Dist : Byte): Word;[internproc:fpc_in_ror_x_x];
- function RolWord(Const AValue : Word): Word;[internproc:fpc_in_rol_x];
- function RolWord(Const AValue : Word;Dist : Byte): Word;[internproc:fpc_in_rol_x_x];
- {$else FPC_HAS_INTERNAL_ROX_WORD}
- function RorWord(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RorWord(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RolWord(Const AValue : Word): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RolWord(Const AValue : Word;Dist : Byte): Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- {$endif FPC_HAS_INTERNAL_ROX_WORD}
- {$ifdef FPC_HAS_INTERNAL_ROX_DWORD}
- function RorDWord(Const AValue : DWord): DWord;[internproc:fpc_in_ror_x];
- function RorDWord(Const AValue : DWord;Dist : Byte): DWord;[internproc:fpc_in_ror_x_x];
- function RolDWord(Const AValue : DWord): DWord;[internproc:fpc_in_rol_x];
- function RolDWord(Const AValue : DWord;Dist : Byte): DWord;[internproc:fpc_in_rol_x_x];
- {$else FPC_HAS_INTERNAL_ROX_DWORD}
- function RorDWord(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RorDWord(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RolDWord(Const AValue : DWord): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RolDWord(Const AValue : DWord;Dist : Byte): DWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- {$endif FPC_HAS_INTERNAL_ROX_DWORD}
- {$ifdef FPC_HAS_INTERNAL_ROX_QWORD}
- function RorQWord(Const AValue : QWord): QWord;[internproc:fpc_in_ror_x];
- function RorQWord(Const AValue : QWord;Dist : Byte): QWord;[internproc:fpc_in_ror_x_x];
- function RolQWord(Const AValue : QWord): QWord;[internproc:fpc_in_rol_x];
- function RolQWord(Const AValue : QWord;Dist : Byte): QWord;[internproc:fpc_in_rol_x_x];
- {$else FPC_HAS_INTERNAL_ROX_QWORD}
- function RorQWord(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RorQWord(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RolQWord(Const AValue : QWord): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- function RolQWord(Const AValue : QWord;Dist : Byte): QWord;{$ifdef SYSTEMINLINE}inline;{$endif}
- {$endif FPC_HAS_INTERNAL_ROX_QWORD}
- {$ifndef FPUNONE}
- { float math routines }
- {$I mathh.inc}
- {$endif}
- { currency math routines }
- {$I currh.inc}
- {****************************************************************************
- Addr/Pointer Handling
- ****************************************************************************}
- Function ptr(sel,off:Longint):farpointer;[internconst:fpc_in_const_ptr];{$ifdef SYSTEMINLINE}inline;{$endif}
- Function Cseg:Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- Function Dseg:Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- Function Sseg:Word;{$ifdef SYSTEMINLINE}inline;{$endif}
- {****************************************************************************
- PChar and String Handling
- ****************************************************************************}
- function strpas(p:pchar):shortstring;{$ifdef SYSTEMINLINE}inline;{$endif}
- function strlen(p:pchar):longint;external name 'FPC_PCHAR_LENGTH';
- { Shortstring functions }
- Procedure Delete(var s:shortstring;index:SizeInt;count:SizeInt);
- Procedure Insert(const source:shortstring;var s:shortstring;index:SizeInt);
- Procedure Insert(source:Char;var s:shortstring;index:SizeInt);
- Function Pos(const substr:shortstring;const s:shortstring):SizeInt;
- Function Pos(C:Char;const s:shortstring):SizeInt;
- {$ifdef FPC_HAS_FEATURE_ANSISTRINGS}
- Function Pos (const Substr : ShortString; const Source : AnsiString) : SizeInt;
- Procedure SetString (out S : AnsiString; Buf : PChar; Len : SizeInt);
- {$endif FPC_HAS_FEATURE_ANSISTRINGS}
- Procedure SetString (out S : Shortstring; Buf : PChar; Len : SizeInt);
- function ShortCompareText(const S1, S2: shortstring): SizeInt;
- Function upCase(const s:shortstring):shortstring;
- Function lowerCase(const s:shortstring):shortstring; overload;
- Function Space(b:byte):shortstring;
- Function hexStr(Val:Longint;cnt:byte):shortstring;
- Function OctStr(Val:Longint;cnt:byte):shortstring;
- Function binStr(Val:Longint;cnt:byte):shortstring;
- Function hexStr(Val:int64;cnt:byte):shortstring;
- Function OctStr(Val:int64;cnt:byte):shortstring;
- Function binStr(Val:int64;cnt:byte):shortstring;
- Function hexStr(Val:qword;cnt:byte):shortstring;
- Function OctStr(Val:qword;cnt:byte):shortstring;
- Function binStr(Val:qword;cnt:byte):shortstring;
- Function hexStr(Val:Pointer):shortstring;
- { Char functions }
- Function chr(b : byte) : Char; [INTERNPROC: fpc_in_chr_byte];
- Function upCase(c:Char):Char;
- Function lowerCase(c:Char):Char; overload;
- function pos(const substr : shortstring;c:char): SizeInt;
- {****************************************************************************
- AnsiString Handling
- ****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_ANSISTRINGS}
- Procedure UniqueString(var S : AnsiString);external name 'FPC_ANSISTR_UNIQUE';
- Function Pos (const Substr : AnsiString; const Source : AnsiString) : SizeInt;
- Function Pos (c : Char; const s : AnsiString) : SizeInt;
- Procedure Insert (const Source : AnsiString; var S : AnsiString; Index : SizeInt);
- Procedure Delete (var S : AnsiString; Index,Size: SizeInt);
- Function StringOfChar(c : char;l : SizeInt) : AnsiString;
- function upcase(const s : ansistring) : ansistring;
- function lowercase(const s : ansistring) : ansistring;
- {$endif FPC_HAS_FEATURE_ANSISTRINGS}
- {****************************************************************************
- WideString Handling
- ****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_WIDESTRINGS}
- {$ifdef VER2_2}
- {$i wstring22h.inc}
- {$else VER2_2}
- {$i ustringh.inc}
- {$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
- {$i wstringh.inc}
- {$endif FPC_WIDESTRING_EQUAL_UNICODESTRING}
- {$endif VER2_2}
- {$endif FPC_HAS_FEATURE_WIDESTRINGS}
- {****************************************************************************
- Untyped File Management
- ****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_FILEIO}
- Procedure Assign(out f:File;const Name:string);
- Procedure Assign(out f:File;p:pchar);
- Procedure Assign(out f:File;c:char);
- Procedure Rewrite(var f:File;l:Longint);
- Procedure Rewrite(var f:File);
- Procedure Reset(var f:File;l:Longint);
- Procedure Reset(var f:File);
- Procedure Close(var f:File);
- Procedure BlockWrite(var f:File;const Buf;Count:Int64;var Result:Int64);
- Procedure BlockWrite(var f:File;const Buf;Count:Longint;var Result:Longint);
- Procedure BlockWrite(var f:File;const Buf;Count:Cardinal;var Result:Cardinal);
- Procedure BlockWrite(var f:File;const Buf;Count:Word;var Result:Word);
- Procedure BlockWrite(var f:File;const Buf;Count:Word;var Result:Integer);
- Procedure BlockWrite(var f:File;const Buf;Count:Longint);
- Procedure BlockRead(var f:File;var Buf;count:Int64;var Result:Int64);
- Procedure BlockRead(var f:File;var Buf;count:Longint;var Result:Longint);
- Procedure BlockRead(var f:File;var Buf;count:Cardinal;var Result:Cardinal);
- Procedure BlockRead(var f:File;var Buf;count:Word;var Result:Word);
- Procedure BlockRead(var f:File;var Buf;count:Word;var Result:Integer);
- Procedure BlockRead(var f:File;var Buf;count:Int64);
- Function FilePos(var f:File):Int64;
- Function FileSize(var f:File):Int64;
- Procedure Seek(var f:File;Pos:Int64);
- Function EOF(var f:File):Boolean;
- Procedure Erase(var f:File);
- Procedure Rename(var f:File;const s:string);
- Procedure Rename(var f:File;p:pchar);
- Procedure Rename(var f:File;c:char);
- Procedure Truncate (var F:File);
- {$endif FPC_HAS_FEATURE_FILEIO}
- {****************************************************************************
- Typed File Management
- ****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_FILEIO}
- Procedure Assign(out f:TypedFile;const Name:string);
- Procedure Assign(out f:TypedFile;p:pchar);
- Procedure Assign(out f:TypedFile;c:char);
- Procedure Reset(var f : TypedFile); [INTERNPROC: fpc_in_Reset_TypedFile];
- Procedure Rewrite(var f : TypedFile); [INTERNPROC: fpc_in_Rewrite_TypedFile];
- {$endif FPC_HAS_FEATURE_FILEIO}
- {****************************************************************************
- Text File Management
- ****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_TEXTIO}
- Procedure Assign(out t:Text;const s:string);
- Procedure Assign(out t:Text;p:pchar);
- Procedure Assign(out t:Text;c:char);
- Procedure Close(var t:Text);
- Procedure Rewrite(var t:Text);
- Procedure Reset(var t:Text);
- Procedure Append(var t:Text);
- Procedure Flush(var t:Text);
- Procedure Erase(var t:Text);
- Procedure Rename(var t:Text;const s:string);
- Procedure Rename(var t:Text;p:pchar);
- Procedure Rename(var t:Text;c:char);
- Function EOF(var t:Text):Boolean;
- Function EOF:Boolean;
- Function EOLn(var t:Text):Boolean;
- Function EOLn:Boolean;
- Function SeekEOLn (var t:Text):Boolean;
- Function SeekEOF (var t:Text):Boolean;
- Function SeekEOLn:Boolean;
- Function SeekEOF:Boolean;
- Procedure SetTextBuf(var f:Text; var Buf);[INTERNPROC:fpc_in_settextbuf_file_x];
- Procedure SetTextBuf(var f:Text; var Buf; Size:SizeInt);
- Procedure SetTextLineEnding(var f:Text; Ending:string);
- {$endif FPC_HAS_FEATURE_TEXTIO}
- {****************************************************************************
- Directory Management
- ****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_FILEIO}
- Procedure chdir(const s:string);
- Procedure mkdir(const s:string);
- Procedure rmdir(const s:string);
- Procedure getdir(drivenr:byte;var dir:shortstring);
- {$ifdef FPC_HAS_FEATURE_ANSISTRINGS}
- Procedure getdir(drivenr:byte;var dir:ansistring);
- {$endif FPC_HAS_FEATURE_ANSISTRINGS}
- {$endif FPC_HAS_FEATURE_FILEIO}
- {*****************************************************************************
- Miscellaneous
- *****************************************************************************}
- { os independent calls to allow backtraces }
- {$IFDEF INTERNAL_BACKTRACE}
- // inserted in compiler/psystem.pas
- //function get_frame:pointer;[INTERNPROC:fpc_in_get_frame];
- (*
- // still defined externally
- function get_caller_addr(framebp:pointer):pointer;[INTERNPROC:fpc_in_get_caller_addr];
- function get_caller_frame(framebp:pointer):pointer;[INTERNPROC:fpc_in_get_caller_frame];
- *)
- {$ELSE}
- function get_frame:pointer;{$ifdef SYSTEMINLINE}inline;{$endif}
- {$ENDIF}
- function get_caller_addr(framebp:pointer):pointer;
- function get_caller_frame(framebp:pointer):pointer;
- Function IOResult:Word;
- Function Sptr:Pointer;[internconst:fpc_in_const_ptr];
- {$ifdef FPC_HAS_FEATURE_PROCESSES}
- Function GetProcessID:SizeUInt;
- Function GetThreadID:TThreadID;{$ifdef SYSTEMINLINE}inline;{$endif}
- {$endif FPC_HAS_FEATURE_PROCESSES}
- function InterLockedIncrement (var Target: longint) : longint; public name 'FPC_INTERLOCKEDINCREMENT';
- function InterLockedDecrement (var Target: longint) : longint; public name 'FPC_INTERLOCKEDDECREMENT';
- function InterLockedExchange (var Target: longint;Source : longint) : longint; public name 'FPC_INTERLOCKEDEXCHANGE';
- function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; public name 'FPC_INTERLOCKEDEXCHANGEADD';
- function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; public name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
- {$ifdef cpu64}
- function InterLockedIncrement64 (var Target: int64) : int64; public name 'FPC_INTERLOCKEDINCREMENT64';
- function InterLockedDecrement64 (var Target: int64) : int64; public name 'FPC_INTERLOCKEDDECREMENT64';
- function InterLockedExchange64 (var Target: int64;Source : int64) : int64; public name 'FPC_INTERLOCKEDEXCHANGE64';
- function InterLockedExchangeAdd64 (var Target: int64;Source : int64) : int64; public name 'FPC_INTERLOCKEDEXCHANGEADD64';
- function InterlockedCompareExchange64(var Target: int64; NewValue: int64; Comperand: int64): int64; public name 'FPC_INTERLOCKEDCOMPAREEXCHANGE64';
- {$endif cpu64}
- { Pointer overloads }
- {$ifdef cpu64}
- function InterLockedIncrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDINCREMENT64';
- function InterLockedDecrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDDECREMENT64';
- function InterLockedExchange (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGE64';
- function InterLockedExchangeAdd (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGEADD64';
- function InterlockedCompareExchange(var Target: Pointer; NewValue: Pointer; Comperand: Pointer): Pointer; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE64';
- {$else cpu64}
- function InterLockedIncrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDINCREMENT';
- function InterLockedDecrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDDECREMENT';
- function InterLockedExchange (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGE';
- function InterLockedExchangeAdd (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGEADD';
- function InterlockedCompareExchange(var Target: Pointer; NewValue: Pointer; Comperand: Pointer): Pointer; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
- {$endif cpu64}
- { unsigned overloads }
- function InterLockedIncrement (var Target: cardinal) : cardinal; external name 'FPC_INTERLOCKEDINCREMENT';
- function InterLockedDecrement (var Target: cardinal) : cardinal; external name 'FPC_INTERLOCKEDDECREMENT';
- function InterLockedExchange (var Target: cardinal;Source : cardinal) : cardinal; external name 'FPC_INTERLOCKEDEXCHANGE';
- function InterLockedExchangeAdd (var Target: cardinal;Source : cardinal) : cardinal; external name 'FPC_INTERLOCKEDEXCHANGEADD';
- function InterlockedCompareExchange(var Target: cardinal; NewValue: cardinal; Comperand: cardinal): cardinal; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
- {$ifdef cpu64}
- function InterLockedIncrement64 (var Target: qword) : qword; external name 'FPC_INTERLOCKEDINCREMENT64';
- function InterLockedDecrement64 (var Target: qword) : qword; external name 'FPC_INTERLOCKEDDECREMENT64';
- function InterLockedExchange64 (var Target: qword;Source : qword) : qword; external name 'FPC_INTERLOCKEDEXCHANGE64';
- function InterLockedExchangeAdd64 (var Target: qword;Source : qword) : qword; external name 'FPC_INTERLOCKEDEXCHANGEADD64';
- function InterlockedCompareExchange64(var Target: qword; NewValue: qword; Comperand: qword): int64; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE64';
- {$endif cpu64}
- {*****************************************************************************
- Init / Exit / ExitProc
- *****************************************************************************}
- type
- TRuntimeError =
- (reNone, reOutOfMemory, reInvalidPtr, reDivByZero, reRangeError,
- reIntOverflow, reInvalidOp, reZeroDivide, reOverflow, reUnderflow,
- reInvalidCast, reAccessViolation, rePrivInstruction, reControlBreak,
- reStackOverflow, reVarTypeCast, reVarInvalidOp, reVarDispatch,
- reVarArrayCreate, reVarNotArray, reVarArrayBounds, reAssertionFailed,
- reExternalException, reIntfCastError, reSafeCallError, reQuit,
- reCodesetConversion);
- Const
- // Please keep locations corresponding to location in array above
- RuntimeErrorExitCodes : Array[TRuntimeError] of Byte = (
- 0 , 203, 204, 200, 201,
- 215, 207, 200, 205, 206,
- 219, 216, 218, 217,
- 202, 220, 221, 222,
- 223, 224, 225, 227,
- 212, 228, 229, 233,
- 234);
- Procedure Error(RunTimeError : TRunTimeError);
- {$ifdef FPC_HAS_FEATURE_COMMANDARGS}
- Function Paramcount:Longint;
- Function ParamStr(l:Longint):string;
- {$endif FPC_HAS_FEATURE_COMMANDARGS}
- {$ifdef FPC_HAS_FEATURE_CONSOLEIO}
- Procedure Dump_Stack(var f : text;bp:pointer);
- {$ifdef FPC_HAS_FEATURE_EXCEPTIONS}
- procedure DumpExceptionBackTrace(var f:text);
- {$endif FPC_HAS_FEATURE_EXCEPTIONS}
- {$endif FPC_HAS_FEATURE_CONSOLEIO}
- Procedure RunError(w:Word);
- Procedure RunError;{$ifdef SYSTEMINLINE}inline;{$endif}
- Procedure halt(errnum:byte);
- {$ifdef FPC_HAS_FEATURE_HEAP}
- Procedure AddExitProc(Proc:TProcedure);
- {$endif FPC_HAS_FEATURE_HEAP}
- Procedure halt;{$ifdef SYSTEMINLINE}inline;{$endif}
- { Need to be exported for threads unit }
- {$ifdef FPC_HAS_FEATURE_EXCEPTIONS}
- Procedure SysInitExceptions;
- {$endif FPC_HAS_FEATURE_EXCEPTIONS}
- {$ifdef FPC_HAS_FEATURE_CONSOLEIO}
- procedure SysInitStdIO;
- {$endif FPC_HAS_FEATURE_CONSOLEIO}
- {$ifndef FPUNONE}
- Procedure SysResetFPU;
- Procedure SysInitFPU;
- {$endif}
- {*****************************************************************************
- Abstract/Assert/Error Handling
- *****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_HEAP}
- {$ifdef FPC_HAS_FEATURE_ANSISTRINGS}
- function ArrayStringToPPchar(const S:Array of AnsiString;reserveentries:Longint):ppchar; // const ?
- Function StringToPPChar(var S:AnsiString;ReserveEntries:integer):ppchar;
- {$endif FPC_HAS_FEATURE_ANSISTRINGS}
- Function StringToPPChar(S: PChar;ReserveEntries:integer):ppchar;
- {$endif FPC_HAS_FEATURE_HEAP}
- procedure AbstractError;external name 'FPC_ABSTRACTERROR';
- Function SysBackTraceStr(Addr:Pointer): ShortString;
- Procedure SysAssert(const Msg,FName:ShortString;LineNo:Longint;ErrorAddr:Pointer);
- (* Supposed to return address of previous CtrlBreakHandler *)
- (* (may be nil), returned value of pointer (-1) means that *)
- (* attempt to setup CtrlBreakHandler wasn't successful. *)
- function SysSetCtrlBreakHandler (Handler: TCtrlBreakHandler): TCtrlBreakHandler;
- { Error handlers }
- Type
- TBackTraceStrFunc = Function (Addr: Pointer): ShortString;
- TErrorProc = Procedure (ErrNo : Longint; Address,Frame : Pointer);
- TAbstractErrorProc = Procedure;
- TAssertErrorProc = Procedure(const msg,fname:ShortString;lineno:longint;erroraddr:pointer);
- TSafeCallErrorProc = Procedure(error : HResult;addr : pointer);
- const
- BackTraceStrFunc : TBackTraceStrFunc = @SysBackTraceStr;
- ErrorProc : TErrorProc = nil;
- AbstractErrorProc : TAbstractErrorProc = nil;
- AssertErrorProc : TAssertErrorProc = @SysAssert;
- SafeCallErrorProc : TSafeCallErrorProc = nil;
- {*****************************************************************************
- SetJmp/LongJmp
- *****************************************************************************}
- {$i setjumph.inc}
- {*****************************************************************************
- Object Pascal support
- *****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_CLASSES}
- {$i objpash.inc}
- {$endif FPC_HAS_FEATURE_CLASSES}
- {*****************************************************************************
- Objective-C support
- *****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_OBJECTIVEC1}
- {$i objc1h.inc}
- {$endif FPC_HAS_FEATURE_OBJECTIVEC1}
- {*****************************************************************************
- Variant support
- *****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_VARIANTS}
- {$i varianth.inc}
- {$endif FPC_HAS_FEATURE_VARIANTS}
- {*****************************************************************************
- Internal helper routines support
- *****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_DYNARRAYS}
- {$i dynarrh.inc}
- {$endif FPC_HAS_FEATURE_DYNARRAYS}
- { documenting compiler proc. is useless, they shouldn't be used by the user anyways }
- {$ifndef fpdocsystem}
- {$i compproc.inc}
- {$endif fpdocsystem}
- {*****************************************************************************
- Heap
- *****************************************************************************}
- {$ifdef FPC_HAS_FEATURE_HEAP}
- {$i heaph.inc}
- {$endif FPC_HAS_FEATURE_HEAP}
- {*****************************************************************************
- Thread support
- *****************************************************************************}
- { Generic threadmanager }
- {$ifdef FPC_HAS_FEATURE_THREADING}
- {$i threadh.inc}
- {$endif FPC_HAS_FEATURE_THREADING}
- {*****************************************************************************
- Resources support
- *****************************************************************************}
- {$i resh.inc}
- {*****************************************************************************
- FPDoc phony declarations.
- *****************************************************************************}
- {$ifdef fpdocsystem}
- {$i system.fpd}
- {$endif}
|