signal.inc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 1999-2000 by Jonas Maebe,
  5. member of the Free Pascal development team.
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {$packrecords C}
  13. {********************
  14. Signal
  15. ********************}
  16. Const
  17. { For sending a signal }
  18. SA_NOCLDSTOP = 1;
  19. SA_SHIRQ = $04000000;
  20. SA_STACK = $08000000;
  21. SA_RESTART = $10000000;
  22. SA_INTERRUPT = $20000000;
  23. SA_NOMASK = $40000000;
  24. SA_ONESHOT = $80000000;
  25. SIG_BLOCK = 0;
  26. SIG_UNBLOCK = 1;
  27. SIG_SETMASK = 2;
  28. SIG_DFL = 0 ;
  29. SIG_IGN = 1 ;
  30. SIG_ERR = -1 ;
  31. SIGHUP = 1;
  32. SIGINT = 2;
  33. SIGQUIT = 3;
  34. SIGILL = 4;
  35. SIGTRAP = 5;
  36. SIGABRT = 6;
  37. SIGIOT = 6;
  38. SIGBUS = 7;
  39. SIGFPE = 8;
  40. SIGKILL = 9;
  41. SIGUSR1 = 10;
  42. SIGSEGV = 11;
  43. SIGUSR2 = 12;
  44. SIGPIPE = 13;
  45. SIGALRM = 14;
  46. SIGTerm = 15;
  47. SIGSTKFLT = 16;
  48. SIGCHLD = 17;
  49. SIGCONT = 18;
  50. SIGSTOP = 19;
  51. SIGTSTP = 20;
  52. SIGTTIN = 21;
  53. SIGTTOU = 22;
  54. SIGURG = 23;
  55. SIGXCPU = 24;
  56. SIGXFSZ = 25;
  57. SIGVTALRM = 26;
  58. SIGPROF = 27;
  59. SIGWINCH = 28;
  60. SIGIO = 29;
  61. SIGPOLL = SIGIO;
  62. SIGPWR = 30;
  63. SIGUNUSED = 31;
  64. const
  65. SI_PAD_SIZE = ((128/sizeof(longint)) - 3);
  66. type
  67. tfpreg = record
  68. significand: array[0..3] of word;
  69. exponent: word;
  70. end;
  71. pfpstate = ^tfpstate;
  72. tfpstate = record
  73. cw, sw, tag, ipoff, cssel, dataoff, datasel: cardinal;
  74. st: array[0..7] of tfpreg;
  75. status: cardinal;
  76. end;
  77. {$Ifdef i386}
  78. PSigContextRec = ^SigContextRec;
  79. SigContextRec = record
  80. gs, __gsh: word;
  81. fs, __fsh: word;
  82. es, __esh: word;
  83. ds, __dsh: word;
  84. edi: cardinal;
  85. esi: cardinal;
  86. ebp: cardinal;
  87. esp: cardinal;
  88. ebx: cardinal;
  89. edx: cardinal;
  90. ecx: cardinal;
  91. eax: cardinal;
  92. trapno: cardinal;
  93. err: cardinal;
  94. eip: cardinal;
  95. cs, __csh: word;
  96. eflags: cardinal;
  97. esp_at_signal: cardinal;
  98. ss, __ssh: word;
  99. fpstate: pfpstate;
  100. oldmask: cardinal;
  101. cr2: cardinal;
  102. end;
  103. {$ENDIF}
  104. (*
  105. PSigInfoRec = ^SigInfoRec;
  106. SigInfoRec = record
  107. si_signo: longint;
  108. si_errno: longint;
  109. si_code: longint;
  110. case longint of
  111. 0:
  112. (pad: array[SI_PAD_SIZE] of longint);
  113. 1: { kill }
  114. ( kill: record
  115. pid: longint; { sender's pid }
  116. uid : longint; { sender's uid }
  117. end );
  118. 2: { POSIX.1b timers }
  119. ( timer : record
  120. timer1 : cardinal;
  121. timer2 : cardinal;
  122. end );
  123. 3: { POSIX.1b signals }
  124. ( rt : record
  125. pid : longint; { sender's pid }
  126. uid : longint; { sender's uid }
  127. sigval : longint;
  128. end );
  129. 4: { SIGCHLD }
  130. ( sigchld : record
  131. pid : longint; { which child }
  132. uid : longint; { sender's uid }
  133. status : longint; { exit code }
  134. utime : timeval;
  135. stime : timeval;
  136. end );
  137. 5: { SIGILL, SIGFPE, SIGSEGV, SIGBUS }
  138. ( sigfault : record
  139. addr : pointer;{ faulting insn/memory ref. }
  140. end );
  141. 6:
  142. ( sigpoll : record
  143. band : longint; { POLL_IN, POLL_OUT, POLL_MSG }
  144. fd : longint;
  145. end );
  146. end;
  147. *)
  148. SignalHandler = Procedure(Sig : Longint);cdecl;
  149. PSignalHandler = ^SignalHandler;
  150. SignalRestorer = Procedure;cdecl;
  151. PSignalRestorer = ^SignalRestorer;
  152. TSigAction = procedure(Sig: Longint; SigContext: SigContextRec);cdecl;
  153. SigSet = Longint;
  154. PSigSet = ^SigSet;
  155. SigActionRec = packed record
  156. Handler : record
  157. case byte of
  158. 0: (Sh: SignalHandler);
  159. 1: (Sa: TSigAction);
  160. end;
  161. Sa_Mask : SigSet;
  162. Sa_Flags : Longint;
  163. Sa_restorer : SignalRestorer; { Obsolete - Don't use }
  164. end;
  165. PSigActionRec = ^SigActionRec;
  166. {
  167. $Log$
  168. Revision 1.2 2000-09-11 14:05:31 marco
  169. * FreeBSD support and removed old signalhandling
  170. Revision 1.1.2.1 2000/09/10 16:17:25 marco
  171. * added (moved from sockets.pp and i386/signal.inc)
  172. Revision 1.1 2000/07/13 06:30:55 michael
  173. + Initial import
  174. Revision 1.2 2000/03/31 23:11:23 pierre
  175. * TSigAction Context param is the full record not a pointer
  176. Revision 1.1 2000/03/31 13:24:28 jonas
  177. * signal handling using sigaction when compiled with -dnewsignal
  178. (allows multiple signals to be received in one run)
  179. }