tc.wait.h revision 69408
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 */ 81union 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 */ 160