summaryrefslogtreecommitdiff
path: root/compiler/catch.pas
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/catch.pas')
-rw-r--r--compiler/catch.pas92
1 files changed, 92 insertions, 0 deletions
diff --git a/compiler/catch.pas b/compiler/catch.pas
new file mode 100644
index 0000000000..794680de40
--- /dev/null
+++ b/compiler/catch.pas
@@ -0,0 +1,92 @@
+{
+ Copyright (c) 1998-2002 by Michael Van Canneyt
+
+ Unit to catch segmentation faults and Ctrl-C and exit gracefully
+ under linux and go32v2
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ *********************************************************************
+}
+Unit catch;
+
+{$i fpcdefs.inc}
+
+{$ifdef DEBUG}
+ {$define NOCATCH}
+{$endif DEBUG}
+
+interface
+uses
+{$ifdef unix}
+ {$ifndef beos}
+ {$define has_signal}
+ {$ifdef havelinuxrtl10}
+ Linux,
+ {$else}
+ BaseUnix,Unix,
+ {$endif}
+ {$endif}
+{$endif}
+{$ifdef go32v2}
+{$define has_signal}
+ dpmiexcp,
+{$endif}
+{$ifdef watcom}
+ {$define has_signal}
+ dpmiexcp,
+{$endif}
+ verbose;
+
+{$ifdef has_signal}
+Var
+ NewSignal,
+ OldSigInt : SignalHandler;
+{$endif}
+
+Const in_const_evaluation : boolean = false;
+
+Implementation
+
+{$IFNDEF MACOS_USE_FAKE_SYSUTILS}
+uses
+ comphook;
+{$ENDIF MACOS_USE_FAKE_SYSUTILS}
+
+{$ifdef has_signal}
+{$ifdef unix}
+Procedure CatchSignal(Sig : Longint);cdecl;
+{$else}
+Function CatchSignal(Sig : longint):longint;
+{$endif}
+begin
+ case Sig of
+ SIGINT :
+ raise EControlCAbort.Create;
+ end;
+{$ifndef unix}
+ CatchSignal:=0;
+{$endif}
+end;
+{$endif def has_signal}
+
+begin
+{$ifndef nocatch}
+ {$ifdef has_signal}
+ NewSignal:=SignalHandler(@CatchSignal);
+ OldSigInt:={$ifdef havelinuxrtl10}Signal{$else}{$ifdef Unix}fpSignal{$else}Signal{$endif}{$endif} (SIGINT,NewSignal);
+ {$endif}
+{$endif nocatch}
+end.