瀏覽代碼

* fix multiple FPU excpetion trapping problem for unix

pierre 23 年之前
父節點
當前提交
fe82c8b418
共有 1 個文件被更改,包括 17 次插入1 次删除
  1. 17 1
      ide/fpcalc.pas

+ 17 - 1
ide/fpcalc.pas

@@ -225,12 +225,20 @@ var
 {$else : go32v2}
 {$else : go32v2}
   CalcSigJmp : dpmi_jmp_buf;
   CalcSigJmp : dpmi_jmp_buf;
 {$endif go32v2}
 {$endif go32v2}
+const
+  fpucw : word = $1332;
 {$ifdef Unix}
 {$ifdef Unix}
 Procedure CalcSigFPE(sig : longint);cdecl;
 Procedure CalcSigFPE(sig : longint);cdecl;
 {$else}
 {$else}
 function CalcSigFPE(sig : longint) : longint;
 function CalcSigFPE(sig : longint) : longint;
 {$endif}
 {$endif}
 begin
 begin
+{$ifdef CPUI386}
+  asm
+    fninit
+    fldcw fpucw
+  end;
+{$endif}
   ErrorBox('Error while computing math expression',nil);
   ErrorBox('Error while computing math expression',nil);
 {$ifdef go32v2}
 {$ifdef go32v2}
   Dpmi_LongJmp(CalcSigJmp,1);
   Dpmi_LongJmp(CalcSigJmp,1);
@@ -263,6 +271,11 @@ begin
   CalcKey:=true;
   CalcKey:=true;
   Key := UpCaseStr(Key);
   Key := UpCaseStr(Key);
 {$ifdef HasSignal}
 {$ifdef HasSignal}
+{$ifdef CPUI386}
+  asm
+    fstcw fpucw
+  end;
+{$endif}
 {$ifdef go32v2}
 {$ifdef go32v2}
   if Dpmi_SetJmp(CalcSigJmp)=0 then
   if Dpmi_SetJmp(CalcSigJmp)=0 then
 {$else : not go32v2}
 {$else : not go32v2}
@@ -534,7 +547,10 @@ end;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.3  2001-11-14 23:55:38  pierre
+  Revision 1.4  2002-01-22 13:56:04  pierre
+   * fix multiple FPU excpetion trapping problem for unix
+
+  Revision 1.3  2001/11/14 23:55:38  pierre
    * fix bug 1680 for go32v2 and hopefully for linux
    * fix bug 1680 for go32v2 and hopefully for linux
 
 
   Revision 1.2  2001/08/05 02:01:47  peter
   Revision 1.2  2001/08/05 02:01:47  peter