signal.inc 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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 div 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. {$Ifdef m68k}
  105. PSigContextRec = ^SigContextRec;
  106. SigContextRec = record
  107. { dummy for now PM }
  108. end;
  109. {$ENDIF}
  110. (*
  111. PSigInfoRec = ^SigInfoRec;
  112. SigInfoRec = record
  113. si_signo: longint;
  114. si_errno: longint;
  115. si_code: longint;
  116. case longint of
  117. 0:
  118. (pad: array[SI_PAD_SIZE] of longint);
  119. 1: { kill }
  120. ( kill: record
  121. pid: longint; { sender's pid }
  122. uid : longint; { sender's uid }
  123. end );
  124. 2: { POSIX.1b timers }
  125. ( timer : record
  126. timer1 : cardinal;
  127. timer2 : cardinal;
  128. end );
  129. 3: { POSIX.1b signals }
  130. ( rt : record
  131. pid : longint; { sender's pid }
  132. uid : longint; { sender's uid }
  133. sigval : longint;
  134. end );
  135. 4: { SIGCHLD }
  136. ( sigchld : record
  137. pid : longint; { which child }
  138. uid : longint; { sender's uid }
  139. status : longint; { exit code }
  140. utime : timeval;
  141. stime : timeval;
  142. end );
  143. 5: { SIGILL, SIGFPE, SIGSEGV, SIGBUS }
  144. ( sigfault : record
  145. addr : pointer;{ faulting insn/memory ref. }
  146. end );
  147. 6:
  148. ( sigpoll : record
  149. band : longint; { POLL_IN, POLL_OUT, POLL_MSG }
  150. fd : longint;
  151. end );
  152. end;
  153. *)
  154. SignalHandler = Procedure(Sig : Longint);cdecl;
  155. PSignalHandler = ^SignalHandler;
  156. SignalRestorer = Procedure;cdecl;
  157. PSignalRestorer = ^SignalRestorer;
  158. TSigAction = procedure(Sig: Longint; SigContext: SigContextRec);cdecl;
  159. SigSet = Longint;
  160. PSigSet = ^SigSet;
  161. SigActionRec = packed record
  162. Handler : record
  163. case byte of
  164. 0: (Sh: SignalHandler);
  165. 1: (Sa: TSigAction);
  166. end;
  167. Sa_Mask : SigSet;
  168. Sa_Flags : Longint;
  169. Sa_restorer : SignalRestorer; { Obsolete - Don't use }
  170. end;
  171. PSigActionRec = ^SigActionRec;
  172. {
  173. $Log$
  174. Revision 1.4 2001-06-27 21:37:38 peter
  175. * v10 merges
  176. Revision 1.3 2001/04/04 22:50:59 peter
  177. * use div instead of / in constant
  178. Revision 1.2 2000/09/11 14:05:31 marco
  179. * FreeBSD support and removed old signalhandling
  180. Revision 1.1.2.1 2000/09/10 16:17:25 marco
  181. * added (moved from sockets.pp and i386/signal.inc)
  182. Revision 1.1 2000/07/13 06:30:55 michael
  183. + Initial import
  184. Revision 1.2 2000/03/31 23:11:23 pierre
  185. * TSigAction Context param is the full record not a pointer
  186. Revision 1.1 2000/03/31 13:24:28 jonas
  187. * signal handling using sigaction when compiled with -dnewsignal
  188. (allows multiple signals to be received in one run)
  189. }