sig.sh revision 1
1N/A########################################################################
1N/A# #
1N/A# This software is part of the ast package #
1N/A# Copyright (c) 1985-2011 AT&T Intellectual Property #
1N/A# and is licensed under the #
1N/A# Common Public License, Version 1.0 #
1N/A# by AT&T Intellectual Property #
1N/A# #
1N/A# A copy of the License is available at #
1N/A# http://www.opensource.org/licenses/cpl1.0.txt #
1N/A# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
1N/A# #
1N/A# Information and Software Systems Research #
1N/A# AT&T Research #
1N/A# Florham Park NJ #
1N/A# #
1N/A# Glenn Fowler <gsf@research.att.com> #
1N/A# David Korn <dgk@research.att.com> #
1N/A# Phong Vo <kpv@research.att.com> #
1N/A# #
1N/A########################################################################
1N/A: generate sig features
1N/Acase $# in
1N/A0) ;;
1N/A*) eval $1
1N/A shift
1N/A ;;
1N/Aesac
1N/Aecho "#include <signal.h>
1N/Aint xxx;" > $tmp.c
1N/A$cc -c $tmp.c >/dev/null 2>$tmp.e
1N/Aecho "#pragma prototyped
1N/A#define sig_info _sig_info_
1N/A
1N/A#if defined(__STDPP__directive) && defined(__STDPP__hide)
1N/A__STDPP__directive pragma pp:hide kill killpg
1N/A#else
1N/A#define kill ______kill
1N/A#define killpg ______killpg
1N/A#endif
1N/A#include <signal.h>
1N/A#if defined(__STDPP__directive) && defined(__STDPP__hide)
1N/A__STDPP__directive pragma pp:nohide kill killpg
1N/A#else
1N/A#undef kill
1N/A#undef killpg
1N/A#endif
1N/A#ifndef sigmask
1N/A#define sigmask(s) (1<<((s)-1))
1N/A#endif"
1N/Aecho "#include <signal.h>
1N/A#ifdef TYPE
1N/A#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
1N/Atypedef TYPE (*Sig_handler_t)(ARG);
1N/A#else
1N/Atypedef TYPE (*Sig_handler_t)();
1N/A#endif
1N/A#endif
1N/ASig_handler_t f()
1N/A{
1N/A Sig_handler_t handler;
1N/A handler = signal(1, SIG_IGN);
1N/A return(handler);
1N/A}" > $tmp.c
1N/Aif $cc -c $tmp.c >/dev/null
1N/Athen :
1N/Aelse e=`wc -l $tmp.e`
1N/A i1= j1=
1N/A for i in void int
1N/A do for j in int,... ... int
1N/A do $cc -c -DTYPE=$i -DARG=$j $tmp.c >/dev/null 2>$tmp.e || continue
1N/A case `wc -l $tmp.e` in
1N/A $e) i1= j1=; break 2 ;;
1N/A esac
1N/A case $i1 in
1N/A "") i1=$i j1=$j ;;
1N/A esac
1N/A done
1N/A done
1N/A case $i1 in
1N/A ?*) i=$i1 j=$j1 ;;
1N/A esac
1N/A echo "typedef $i (*Sig_handler_t)($j);"
1N/Afi
1N/Aecho '
1N/A
1N/A#define Handler_t Sig_handler_t
1N/A
1N/A#define SIG_REG_PENDING (-1)
1N/A#define SIG_REG_POP 0
1N/A#define SIG_REG_EXEC 00001
1N/A#define SIG_REG_PROC 00002
1N/A#define SIG_REG_TERM 00004
1N/A#define SIG_REG_ALL 00777
1N/A#define SIG_REG_SET 01000
1N/A
1N/Atypedef struct
1N/A{
1N/A char** name;
1N/A char** text;
1N/A int sigmax;
1N/A} Sig_info_t;
1N/A
1N/Aextern int kill(pid_t, int);
1N/Aextern int killpg(pid_t, int);
1N/A
1N/A#if _BLD_ast && defined(__EXPORT__)
1N/A#define extern extern __EXPORT__
1N/A#endif
1N/A#if !_BLD_ast && defined(__IMPORT__)
1N/A#define extern extern __IMPORT__
1N/A#endif
1N/A
1N/Aextern Sig_info_t sig_info;
1N/A
1N/A#undef extern
1N/A
1N/A#if _lib_sigflag && _npt_sigflag
1N/Aextern int sigflag(int, int, int);
1N/A#endif
1N/A
1N/A#if _BLD_ast && defined(__EXPORT__)
1N/A#define extern __EXPORT__
1N/A#endif
1N/A
1N/A#if !_lib_sigflag
1N/Aextern int sigflag(int, int, int);
1N/A#endif
1N/Aextern int sigcritical(int);
1N/Aextern int sigunblock(int);
1N/A
1N/A#undef extern'