Change all files that I own to use the official DragonFly Project
[dragonfly.git] / contrib / tcsh / tc.wait.h
1 /* $Header: /src/pub/tcsh/tc.wait.h,v 3.13 2002/05/30 15:22:09 christos Exp $ */
2 /*
3  * tc.wait.h: <sys/wait.h> for machines that don't have it or have it and
4  *            is incorrect.
5  */
6 /*-
7  * Copyright (c) 1980, 1991 The Regents of the University of California.
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. Neither the name of the University nor the names of its contributors
19  *    may be used to endorse or promote products derived from this software
20  *    without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  */
34 #ifndef _h_tc_wait
35 #define _h_tc_wait
36
37 /*
38  * a little complicated #include <sys/wait.h>! :-(
39  * We try to use the system's wait.h when we can...
40  */
41
42 #if SYSVREL > 0 && !defined(linux)
43 # ifdef hpux
44 #  ifndef __hpux
45 #   define NEEDwait
46 #  else
47 #   ifndef POSIX
48 #    define _BSD
49 #   endif
50 #   ifndef _CLASSIC_POSIX_TYPES
51 #    define _CLASSIC_POSIX_TYPES
52 #   endif
53 #   include <sys/wait.h> /* 7.0 fixed it again */
54 #  endif /* __hpux */
55 # else /* hpux */
56 #  if (defined(OREO) || defined(IRIS4D) || defined(POSIX)) && !defined(_VMS_POSIX)
57 #   include <sys/wait.h>
58 #  else /* OREO || IRIS4D || POSIX */
59 #   define NEEDwait
60 #  endif /* OREO || IRIS4D || POSIX */
61 # endif /* hpux */
62 #else /* SYSVREL == 0 || linux */
63 # ifdef _MINIX
64 #  undef NEEDwait
65 #  include "mi.wait.h"
66 # else
67 #  ifndef WINNT_NATIVE
68 #   include <sys/wait.h>
69 #  endif /* WINNT_NATIVE */
70 # endif /* _MINIX */
71 #endif /* SYSVREL == 0 || linux */
72
73 #ifdef NEEDwait
74 /*
75  *      This wait is for big-endians and little endians
76  */
77 union wait {
78     int     w_status;
79 # ifdef _SEQUENT_
80     struct {
81         unsigned short w_Termsig:7;
82         unsigned short w_Coredump:1;
83         unsigned short w_Retcode:8;
84     }       w_T;
85     struct {
86         unsigned short w_Stopval:8;
87         unsigned short w_Stopsig:8;
88     }       w_S;
89 };
90
91 #  define w_termsig     w_T.w_Termsig
92 #  define w_coredump    w_T.w_Coredump
93 #  define w_retcode     w_T.w_Retcode
94 #  define w_stopval     w_S.w_Stopval
95 #  define w_stopsig     w_S.w_Stopsig
96 # else /* _SEQUENT_ */
97 #  if defined(vax) || defined(__vax__) || defined(i386) || defined(_I386) || defined(__i386__)
98     union {
99         struct {
100             unsigned int w_Termsig:7;
101             unsigned int w_Coredump:1;
102             unsigned int w_Retcode:8;
103             unsigned int w_Dummy:16;
104         }       w_T;
105         struct {
106             unsigned int w_Stopval:8;
107             unsigned int w_Stopsig:8;
108             unsigned int w_Dummy:16;
109         }       w_S;
110     }       w_P;
111 #  else /* mc68000 || sparc || ??? */
112 #    if defined(_CRAY) || defined(ANY_OTHER_64BIT_MACHINE)
113 #      define DUMMY_BITS        48
114 #    else /* _CRAY */
115 #      define DUMMY_BITS        16
116 #    endif /* _CRAY */
117     union {
118         struct {
119             unsigned int w_Dummy:DUMMY_BITS;
120             unsigned int w_Retcode:8;
121             unsigned int w_Coredump:1;
122             unsigned int w_Termsig:7;
123         }       w_T;
124         struct {
125             unsigned int w_Dummy:DUMMY_BITS;
126             unsigned int w_Stopsig:8;
127             unsigned int w_Stopval:8;
128         }       w_S;
129     }       w_P;
130 #  endif /* vax || __vax__ || i386 || _I386 || __i386__ */
131 };
132
133 #  define w_termsig     w_P.w_T.w_Termsig
134 #  define w_coredump    w_P.w_T.w_Coredump
135 #  define w_retcode     w_P.w_T.w_Retcode
136 #  define w_stopval     w_P.w_S.w_Stopval
137 #  define w_stopsig     w_P.w_S.w_Stopsig
138 # endif /* _SEQUENT_ */
139
140
141 # ifndef WNOHANG
142 #  define WNOHANG       1       /* dont hang in wait */
143 # endif
144
145 # ifndef WUNTRACED
146 #  define WUNTRACED     2       /* tell about stopped, untraced children */
147 # endif
148
149 # define WSTOPPED 0177
150 # define WIFSTOPPED(x)  ((x).w_stopval == WSTOPPED)
151 # define WIFSIGNALED(x) (((x).w_stopval != WSTOPPED) && ((x).w_termsig != 0))
152
153 #endif /* NEEDwait */
154
155 #endif /* _h_tc_wait */