1*4887Schin######################################################################## 2*4887Schin# # 3*4887Schin# This software is part of the ast package # 4*4887Schin# Copyright (c) 1985-2007 AT&T Knowledge Ventures # 5*4887Schin# and is licensed under the # 6*4887Schin# Common Public License, Version 1.0 # 7*4887Schin# by AT&T Knowledge Ventures # 8*4887Schin# # 9*4887Schin# A copy of the License is available at # 10*4887Schin# http://www.opensource.org/licenses/cpl1.0.txt # 11*4887Schin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) # 12*4887Schin# # 13*4887Schin# Information and Software Systems Research # 14*4887Schin# AT&T Research # 15*4887Schin# Florham Park NJ # 16*4887Schin# # 17*4887Schin# Glenn Fowler <gsf@research.att.com> # 18*4887Schin# David Korn <dgk@research.att.com> # 19*4887Schin# Phong Vo <kpv@research.att.com> # 20*4887Schin# # 21*4887Schin######################################################################## 22*4887Schin: generate sig features 23*4887Schincase $# in 24*4887Schin0) ;; 25*4887Schin*) eval $1 26*4887Schin shift 27*4887Schin ;; 28*4887Schinesac 29*4887Schinecho "#include <signal.h> 30*4887Schinint xxx;" > $tmp.c 31*4887Schin$cc -c $tmp.c >/dev/null 2>$tmp.e 32*4887Schinecho "#pragma prototyped 33*4887Schin#define sig_info _sig_info_ 34*4887Schin 35*4887Schin#if defined(__STDPP__directive) && defined(__STDPP__hide) 36*4887Schin__STDPP__directive pragma pp:hide kill killpg 37*4887Schin#else 38*4887Schin#define kill ______kill 39*4887Schin#define killpg ______killpg 40*4887Schin#endif 41*4887Schin#include <signal.h> 42*4887Schin#if defined(__STDPP__directive) && defined(__STDPP__hide) 43*4887Schin__STDPP__directive pragma pp:nohide kill killpg 44*4887Schin#else 45*4887Schin#undef kill 46*4887Schin#undef killpg 47*4887Schin#endif 48*4887Schin#ifndef sigmask 49*4887Schin#define sigmask(s) (1<<((s)-1)) 50*4887Schin#endif" 51*4887Schinecho "#include <signal.h> 52*4887Schin#ifdef TYPE 53*4887Schin#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) 54*4887Schintypedef TYPE (*Sig_handler_t)(ARG); 55*4887Schin#else 56*4887Schintypedef TYPE (*Sig_handler_t)(); 57*4887Schin#endif 58*4887Schin#endif 59*4887SchinSig_handler_t f() 60*4887Schin{ 61*4887Schin Sig_handler_t handler; 62*4887Schin handler = signal(1, SIG_IGN); 63*4887Schin return(handler); 64*4887Schin}" > $tmp.c 65*4887Schinif $cc -c $tmp.c >/dev/null 66*4887Schinthen : 67*4887Schinelse e=`wc -l $tmp.e` 68*4887Schin i1= j1= 69*4887Schin for i in void int 70*4887Schin do for j in int,... ... int 71*4887Schin do $cc -c -DTYPE=$i -DARG=$j $tmp.c >/dev/null 2>$tmp.e || continue 72*4887Schin case `wc -l $tmp.e` in 73*4887Schin $e) i1= j1=; break 2 ;; 74*4887Schin esac 75*4887Schin case $i1 in 76*4887Schin "") i1=$i j1=$j ;; 77*4887Schin esac 78*4887Schin done 79*4887Schin done 80*4887Schin case $i1 in 81*4887Schin ?*) i=$i1 j=$j1 ;; 82*4887Schin esac 83*4887Schin echo "typedef $i (*Sig_handler_t)($j);" 84*4887Schinfi 85*4887Schinecho ' 86*4887Schin 87*4887Schin#define Handler_t Sig_handler_t 88*4887Schin 89*4887Schin#define SIG_REG_PENDING (-1) 90*4887Schin#define SIG_REG_POP 0 91*4887Schin#define SIG_REG_EXEC 00001 92*4887Schin#define SIG_REG_PROC 00002 93*4887Schin#define SIG_REG_TERM 00004 94*4887Schin#define SIG_REG_ALL 00777 95*4887Schin#define SIG_REG_SET 01000 96*4887Schin 97*4887Schintypedef struct 98*4887Schin{ 99*4887Schin char** name; 100*4887Schin char** text; 101*4887Schin int sigmax; 102*4887Schin} Sig_info_t; 103*4887Schin 104*4887Schinextern int kill(pid_t, int); 105*4887Schinextern int killpg(pid_t, int); 106*4887Schin 107*4887Schin#if _BLD_ast && defined(__EXPORT__) 108*4887Schin#define extern extern __EXPORT__ 109*4887Schin#endif 110*4887Schin#if !_BLD_ast && defined(__IMPORT__) 111*4887Schin#define extern extern __IMPORT__ 112*4887Schin#endif 113*4887Schin 114*4887Schinextern Sig_info_t sig_info; 115*4887Schin 116*4887Schin#undef extern 117*4887Schin 118*4887Schin#if _BLD_ast && defined(__EXPORT__) 119*4887Schin#define extern __EXPORT__ 120*4887Schin#endif 121*4887Schin 122*4887Schinextern int sigcritical(int); 123*4887Schinextern int sigunblock(int); 124*4887Schin 125*4887Schin#undef extern' 126