Browse Source

* Prevent IDE from crashing when receiving a signal if displaying user screen.
* Prevent ctrl+c being delivered as SIGINT to IDE when running user program.

git-svn-id: trunk@5496 -

daniel 18 years ago
parent
commit
1a02ce4bc1
4 changed files with 21 additions and 26 deletions
  1. 3 21
      ide/Makefile
  2. 10 3
      ide/fp.pas
  3. 5 0
      ide/fpide.pas
  4. 3 2
      ide/fpredir.pas

+ 3 - 21
ide/Makefile

@@ -1,8 +1,8 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/06/20]
 #
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd x86_64-win64 arm-linux arm-palmos arm-wince arm-gba powerpc64-linux
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd x86_64-win64 arm-linux arm-palmos arm-wince arm-gba powerpc64-linux
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx
 LIMIT83fs = go32v2 os2 emx watcom
@@ -332,9 +332,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 override TARGET_DIRS+=compiler
 endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_DIRS+=compiler
-endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 override TARGET_DIRS+=compiler
 endif
@@ -455,9 +452,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 override TARGET_PROGRAMS+=fp
 endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_PROGRAMS+=fp
-endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 override TARGET_PROGRAMS+=fp
 endif
@@ -580,9 +574,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 override COMPILER_OPTIONS+=-Sg
 endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override COMPILER_OPTIONS+=-Sg
-endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 override COMPILER_OPTIONS+=-Sg
 endif
@@ -1050,7 +1041,7 @@ endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
 PPUEXT=.ppu
-ASMEXT=.s
+ASMEXT=.asm
 OEXT=.o
 SMARTEXT=.sl
 STATICLIBEXT=.a
@@ -1556,12 +1547,6 @@ REQUIRE_PACKAGES_FV=1
 REQUIRE_PACKAGES_GDBINT=1
 REQUIRE_PACKAGES_REGEXPR=1
 endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_FV=1
-REQUIRE_PACKAGES_GDBINT=1
-REQUIRE_PACKAGES_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_FV=1
@@ -2395,9 +2380,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 TARGET_DIRS_COMPILER=1
 endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-TARGET_DIRS_COMPILER=1
-endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 TARGET_DIRS_COMPILER=1
 endif

+ 10 - 3
ide/fp.pas

@@ -206,7 +206,7 @@ begin
   end;
   if ErrS<>'' then
   begin
-    if Assigned(Application) then
+    if (application<>nil) and (ideapp.displaymode=dmIDE) then
       ErrorBox('Stream error: '+#13+ErrS,nil)
     else
 
@@ -408,7 +408,7 @@ BEGIN
             { If ExitProc=@InterceptExit then
               ExitProc:=StoreExitProc;}
             Str(SeenExitCode,ErrS);
-            if Assigned(Application) then
+            if (application<>nil) and (ideapp.displaymode=dmIDE) then
               begin
                 P.l1:=SeenExitCode;
                 ErrS:=hexstr(longint(SeenErrorAddr),8);
@@ -423,7 +423,7 @@ BEGIN
           begin
             Str(SetJmpRes,ErrS);
           { Longjmp was called by fpcatch }
-            if Assigned(Application) then
+            if (application<>nil) and (ideapp.displaymode=dmIDE) then
               begin
                 P.l1:=SetJmpRes;
                 if OKCancelBox(error_programexitedwithsignal,@P)=cmCancel then
@@ -432,7 +432,14 @@ BEGIN
             else
               writeln('Signal error: ',ErrS);
           end;
+        if ideapp.displaymode=dmUser then
+          begin
+            writeln('Fatal exception occured while in user screen mode. File save message boxes');
+            writeln('cannot be displayed. We are sorry, but need to terminate now.');
+            halt(255);
+          end;
       end;
+
     if (AutoSaveOptions and asEditorFiles)=0 then
       CanExit:=IDEApp.AskSaveAll
     else

+ 5 - 0
ide/fpide.pas

@@ -26,9 +26,11 @@ uses
 
 type
     TExecType = (exNormal,exNoSwap,exDosShell);
+    Tdisplaymode = (dmIDE,dmUser);
 
     TIDEApp = object(TApplication)
       IsRunning : boolean;
+      displaymode : Tdisplaymode;
       constructor Init;
       procedure   InitDesktop; virtual;
       procedure   LoadMenuBar;
@@ -263,6 +265,7 @@ end;
 constructor TIDEApp.Init;
 var R: TRect;
 begin
+  displaymode:=dmIDE;
   UseSyntaxHighlight:=@IDEUseSyntaxHighlight;
   UseTabsPattern:=@IDEUseTabsPattern;
   inherited Init;
@@ -879,6 +882,7 @@ end;
 
 procedure TIDEApp.ShowUserScreen;
 begin
+  displaymode:=dmUser;
   if Assigned(UserScreen) then
     UserScreen^.SaveIDEScreen;
   DoneSysError;
@@ -942,6 +946,7 @@ begin
   UpdateScreen(true);
 {$endif go32v2}
 {$endif Windows}
+  displaymode:=dmIDE;
 end;
 
 function TIDEApp.AutoSave: boolean;

+ 3 - 2
ide/fpredir.pas

@@ -940,10 +940,11 @@ end;
   SmallHeap;
 {$EndIf MsDos}
     SwapVectors;
-    { Must use shell() for linux for the wildcard expansion (PFV) }
 {$ifdef UNIX}
     IOStatus:=0;
-    ExecuteResult:=Shell(MaybeQuoted(FixPath(Progname))+' '+Comline);
+    {We need to use fpsystem to get wildcard expansion and avoid being
+     interrupted by ctrl+c (SIGINT).};
+    ExecuteResult:=fpsystem(MaybeQuoted(FixPath(Progname))+' '+Comline);
     if ExecuteResult<0 then
       begin
         IOStatus:=(-ExecuteResult) and $7f;