signal.inc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 i386}
  104. {$Ifdef m68k}
  105. PSigContextRec = ^SigContextRec;
  106. SigContextRec = record
  107. { dummy for now PM }
  108. end;
  109. {$endif m68k}
  110. {$ifdef powerpc}
  111. PSigContextRec = ^SigContextRec;
  112. SigContextRec = record
  113. { dummy for now PM }
  114. end;
  115. {$endif powerpc}
  116. (*
  117. PSigInfoRec = ^SigInfoRec;
  118. SigInfoRec = record
  119. si_signo: longint;
  120. si_errno: longint;
  121. si_code: longint;
  122. case longint of
  123. 0:
  124. (pad: array[SI_PAD_SIZE] of longint);
  125. 1: { kill }
  126. ( kill: record
  127. pid: longint; { sender's pid }
  128. uid : longint; { sender's uid }
  129. end );
  130. 2: { POSIX.1b timers }
  131. ( timer : record
  132. timer1 : cardinal;
  133. timer2 : cardinal;
  134. end );
  135. 3: { POSIX.1b signals }
  136. ( rt : record
  137. pid : longint; { sender's pid }
  138. uid : longint; { sender's uid }
  139. sigval : longint;
  140. end );
  141. 4: { SIGCHLD }
  142. ( sigchld : record
  143. pid : longint; { which child }
  144. uid : longint; { sender's uid }
  145. status : longint; { exit code }
  146. utime : timeval;
  147. stime : timeval;
  148. end );
  149. 5: { SIGILL, SIGFPE, SIGSEGV, SIGBUS }
  150. ( sigfault : record
  151. addr : pointer;{ faulting insn/memory ref. }
  152. end );
  153. 6:
  154. ( sigpoll : record
  155. band : longint; { POLL_IN, POLL_OUT, POLL_MSG }
  156. fd : longint;
  157. end );
  158. end;
  159. *)
  160. SignalHandler = Procedure(Sig : Longint);cdecl;
  161. PSignalHandler = ^SignalHandler;
  162. SignalRestorer = Procedure;cdecl;
  163. PSignalRestorer = ^SignalRestorer;
  164. TSigAction = procedure(Sig: Longint; SigContext: SigContextRec);cdecl;
  165. SigSet = Longint;
  166. PSigSet = ^SigSet;
  167. SigActionRec = packed record
  168. Handler : record
  169. case byte of
  170. 0: (Sh: SignalHandler);
  171. 1: (Sa: TSigAction);
  172. end;
  173. Sa_Mask : SigSet;
  174. Sa_Flags : Longint;
  175. Sa_restorer : SignalRestorer; { Obsolete - Don't use }
  176. end;
  177. PSigActionRec = ^SigActionRec;
  178. {
  179. $Log$
  180. Revision 1.6 2002-09-07 16:01:19 peter
  181. * old logs removed and tabs fixed
  182. Revision 1.5 2002/07/28 20:43:48 florian
  183. * several fixes for linux/powerpc
  184. * several fixes to MT
  185. }