From 58bca68e6afd8bfe296ceadfbcd6a55518cc40d9 Mon Sep 17 00:00:00 2001 From: Tomas Hajny Date: Sun, 30 Sep 2007 14:14:33 +0000 Subject: [PATCH] + infrastructure for CtrlBreakHandler added git-svn-id: trunk@8691 - --- rtl/inc/system.inc | 15 +++++++++++++++ rtl/inc/systemh.inc | 9 +++++++++ 2 files changed, 24 insertions(+) diff --git a/rtl/inc/system.inc b/rtl/inc/system.inc index eccb21ff5a..9029aeb907 100644 --- a/rtl/inc/system.inc +++ b/rtl/inc/system.inc @@ -1203,3 +1203,18 @@ Function FindResource(ModuleHandle: HMODULE; ResourceName, ResourceType: AnsiStr begin Result:=FindResource(ModuleHandle,PChar(ResourceName),PChar(ResourceType)); end; + +const + CtrlBreakHandler: TCtrlBreakHandler = nil; + +{$IFNDEF FPC_HAS_SETCTRLBREAKHANDLER} +(* It is possible to provide platform specific implementation performing *) +(* special initialization; default implementation just sets the procedural *) +(* variable to make it available for use from the exception handler. *) +function SysSetCtrlBreakHandler (Handler: TCtrlBreakHandler): TCtrlBreakHandler; +begin + (* Return either nil or previous handler *) + SysSetCtrlBreakHandler := CtrlBreakHandler; + CtrlBreakHandler := Handler; +end; +{$ENDIF FPC_HAS_SETCTRLBREAKHANDLER} diff --git a/rtl/inc/systemh.inc b/rtl/inc/systemh.inc index 9105190a23..b1c566c143 100644 --- a/rtl/inc/systemh.inc +++ b/rtl/inc/systemh.inc @@ -318,6 +318,11 @@ type TPCharArray = packed array[0..(MaxLongint div SizeOf(PChar))-1] of PChar; 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 } @@ -822,6 +827,10 @@ Function StringToPPChar(S: PChar;ReserveEntries:integer):ppchar; 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