ソースを参照

* added sigaction record from signal.inc

peter 25 年 前
コミット
a98554df02
1 ファイル変更57 行追加6 行削除
  1. 57 6
      rtl/linux/linux.pp

+ 57 - 6
rtl/linux/linux.pp

@@ -169,22 +169,70 @@ Type
   SignalRestorer  = Procedure;cdecl;
   PSignalRestorer = ^SignalRestorer;
 
- {$ifdef BSD}
+{$ifdef BSD}
   SigSet  = Array[0..31] of byte;
- {$else}
+{$else}
   SigSet  = Longint;
- {$endif}
+{$endif}
   PSigSet = ^SigSet;
 
+  tfpreg = record
+          significand: array[0..3] of word;
+          exponent: word;
+  end;
+
+  pfpstate = ^tfpstate;
+  tfpstate = record
+           cw, sw, tag, ipoff, cssel, dataoff, datasel: cardinal;
+           st: array[0..7] of tfpreg;
+           status: cardinal;
+  end;
+
+{$ifdef i386}
+  PSigContextRec = ^SigContextRec;
+  SigContextRec = record
+    gs, __gsh: word;
+    fs, __fsh: word;
+    es, __esh: word;
+    ds, __dsh: word;
+    edi: cardinal;
+    esi: cardinal;
+    ebp: cardinal;
+    esp: cardinal;
+    ebx: cardinal;
+    edx: cardinal;
+    ecx: cardinal;
+    eax: cardinal;
+    trapno: cardinal;
+    err: cardinal;
+    eip: cardinal;
+    cs, __csh: word;
+    eflags: cardinal;
+    esp_at_signal: cardinal;
+    ss, __ssh: word;
+    fpstate: pfpstate;
+    oldmask: cardinal;
+    cr2: cardinal;
+  end;
+  TSigContextRec = SigContextRec;
+{$endif}
+
+  TSigAction = procedure(Sig: Longint; SigContext: SigContextRec);cdecl;
+
+  PSigActionRec = ^SigActionRec;
   SigActionRec = packed record
-    Sa_Handler  : SignalHandler;
+    Handler  : record
+      case byte of
+        0: (Sh: SignalHandler);
+        1: (Sa: TSigAction);
+      end;
     Sa_Mask     : SigSet;
     Sa_Flags    : Longint;
     {$ifndef BSD}
     Sa_restorer : SignalRestorer; { Obsolete - Don't use }
     {$endif}
   end;
-  PSigActionRec = ^SigActionRec;
+  TSigActionRec = SigActionRec;
 
 
 {********************
@@ -2881,7 +2929,10 @@ End.
 
 {
   $Log$
-  Revision 1.68  2000-04-16 16:09:32  marco
+  Revision 1.69  2000-05-17 17:11:44  peter
+    * added sigaction record from signal.inc
+
+  Revision 1.68  2000/04/16 16:09:32  marco
    * Some small mistakes when merging BSD and Linux version fixed
 
   Revision 1.67  2000/04/14 16:07:06  marco