]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/tcsh/tc.wait.h
This commit was generated by cvs2svn to compensate for changes in r80016,
[FreeBSD/FreeBSD.git] / contrib / tcsh / tc.wait.h
1 /* $Header: /src/pub/tcsh/tc.wait.h,v 3.11 2000/11/11 23:03:39 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. All advertising materials mentioning features or use of this software
19  *    must display the following acknowledgement:
20  *      This product includes software developed by the University of
21  *      California, Berkeley and its contributors.
22  * 4. Neither the name of the University nor the names of its contributors
23  *    may be used to endorse or promote products derived from this software
24  *    without specific prior written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36  * SUCH DAMAGE.
37  */
38 #ifndef _h_tc_wait
39 #define _h_tc_wait
40
41 /*
42  * a little complicated #include <sys/wait.h>! :-(
43  * We try to use the system's wait.h when we can...
44  */
45
46 #if SYSVREL > 0 && !defined(linux)
47 # ifdef hpux
48 #  ifndef __hpux
49 #   define NEEDwait
50 #  else
51 #   ifndef POSIX
52 #    define _BSD
53 #   endif
54 #   ifndef _CLASSIC_POSIX_TYPES
55 #    define _CLASSIC_POSIX_TYPES
56 #   endif
57 #   include <sys/wait.h> /* 7.0 fixed it again */
58 #  endif /* __hpux */
59 # else /* hpux */
60 #  if (defined(OREO) || defined(IRIS4D) || defined(POSIX)) && !defined(_VMS_POSIX)
61 #   include <sys/wait.h>
62 #  else /* OREO || IRIS4D || POSIX */
63 #   define NEEDwait
64 #  endif /* OREO || IRIS4D || POSIX */
65 # endif /* hpux */
66 #else /* SYSVREL == 0 || linux */
67 # ifdef _MINIX
68 #  undef NEEDwait
69 #  include "mi.wait.h"
70 # else
71 #  ifndef WINNT_NATIVE
72 #   include <sys/wait.h>
73 #  endif /* WINNT_NATIVE */
74 # endif /* _MINIX */
75 #endif /* SYSVREL == 0 || linux */
76
77 #ifdef NEEDwait
78 /*
79  *      This wait is for big-endians and little endians
80  */
81 union wait {
82     int     w_status;
83 # ifdef _SEQUENT_
84     struct {
85         unsigned short w_Termsig:7;
86         unsigned short w_Coredump:1;
87         unsigned short w_Retcode:8;
88     }       w_T;
89     struct {
90         unsigned short w_Stopval:8;
91         unsigned short w_Stopsig:8;
92     }       w_S;
93 };
94
95 #  define w_termsig     w_T.w_Termsig
96 #  define w_coredump    w_T.w_Coredump
97 #  define w_retcode     w_T.w_Retcode
98 #  define w_stopval     w_S.w_Stopval
99 #  define w_stopsig     w_S.w_Stopsig
100 # else /* _SEQUENT_ */
101 #  if defined(vax) || defined(i386) || defined(_I386)
102     union {
103         struct {
104             unsigned int w_Termsig:7;
105             unsigned int w_Coredump:1;
106             unsigned int w_Retcode:8;
107             unsigned int w_Dummy:16;
108         }       w_T;
109         struct {
110             unsigned int w_Stopval:8;
111             unsigned int w_Stopsig:8;
112             unsigned int w_Dummy:16;
113         }       w_S;
114     }       w_P;
115 #  else /* mc68000 || sparc || ??? */
116 #    if defined(_CRAY) || defined(ANY_OTHER_64BIT_MACHINE)
117 #      define DUMMY_BITS        48
118 #    else /* _CRAY */
119 #      define DUMMY_BITS        16
120 #    endif /* _CRAY */
121     union {
122         struct {
123             unsigned int w_Dummy:DUMMY_BITS;
124             unsigned int w_Retcode:8;
125             unsigned int w_Coredump:1;
126             unsigned int w_Termsig:7;
127         }       w_T;
128         struct {
129             unsigned int w_Dummy:DUMMY_BITS;
130             unsigned int w_Stopsig:8;
131             unsigned int w_Stopval:8;
132         }       w_S;
133     }       w_P;
134 #  endif /* vax || i386 || _I386 */
135 };
136
137 #  define w_termsig     w_P.w_T.w_Termsig
138 #  define w_coredump    w_P.w_T.w_Coredump
139 #  define w_retcode     w_P.w_T.w_Retcode
140 #  define w_stopval     w_P.w_S.w_Stopval
141 #  define w_stopsig     w_P.w_S.w_Stopsig
142 # endif /* _SEQUENT_ */
143
144
145 # ifndef WNOHANG
146 #  define WNOHANG       1       /* dont hang in wait */
147 # endif
148
149 # ifndef WUNTRACED
150 #  define WUNTRACED     2       /* tell about stopped, untraced children */
151 # endif
152
153 # define WSTOPPED 0177
154 # define WIFSTOPPED(x)  ((x).w_stopval == WSTOPPED)
155 # define WIFSIGNALED(x) (((x).w_stopval != WSTOPPED) && ((x).w_termsig != 0))
156
157 #endif /* NEEDwait */
158
159 #endif /* _h_tc_wait */