1/*********************************************************************** 2* * 3* This software is part of the ast package * 4* Copyright (c) 1982-2011 AT&T Intellectual Property * 5* and is licensed under the * 6* Eclipse Public License, Version 1.0 * 7* by AT&T Intellectual Property * 8* * 9* A copy of the License is available at * 10* http://www.eclipse.org/org/documents/epl-v10.html * 11* (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12* * 13* Information and Software Systems Research * 14* AT&T Research * 15* Florham Park NJ * 16* * 17* David Korn <dgk@research.att.com> * 18* * 19***********************************************************************/ 20#pragma prototyped 21#ifndef SH_SIGBITS 22/* 23 * UNIX shell 24 * S. R. Bourne 25 * Rewritten by David Korn 26 * 27 */ 28 29#include <sig.h> 30#include <setjmp.h> 31#include <error.h> 32#include <sfio.h> 33#include "FEATURE/setjmp" 34#include "FEATURE/sigfeatures" 35 36 37#ifndef SIGWINCH 38# ifdef SIGWIND 39# define SIGWINCH SIGWIND 40# else 41# ifdef SIGWINDOW 42# define SIGWINCH SIGWINDOW 43# endif 44# endif 45#endif 46 47typedef void (*SH_SIGTYPE)(int,void(*)(int)); 48 49#define SH_FORKLIM 16 /* fork timeout interval */ 50 51#define SH_TRAP 0200 /* bit for internal traps */ 52#define SH_ERRTRAP 0 /* trap for non-zero exit status */ 53#define SH_KEYTRAP 1 /* trap for keyboard event */ 54#define SH_DEBUGTRAP 4 /* must be last internal trap */ 55 56#define SH_SIGBITS 8 57#define SH_SIGFAULT 1 /* signal handler is sh_fault */ 58#define SH_SIGOFF 2 /* signal handler is SIG_IGN */ 59#define SH_SIGSET 4 /* pending signal */ 60#define SH_SIGTRAP 010 /* pending trap */ 61#define SH_SIGDONE 020 /* default is exit */ 62#define SH_SIGIGNORE 040 /* default is ingore signal */ 63#define SH_SIGINTERACTIVE 0100 /* handle interactive specially */ 64#define SH_SIGTSTP 0200 /* tstp signal received */ 65#define SH_SIGALRM 0200 /* timer alarm received */ 66#define SH_SIGTERM SH_SIGOFF /* term signal received */ 67#define SH_SIGRUNTIME 0400 /* runtime value */ 68 69#define SH_SIGRTMIN 0 /* sh.sigruntime[] index */ 70#define SH_SIGRTMAX 1 /* sh.sigruntime[] index */ 71 72/* 73 * These are longjmp values 74 */ 75 76#define SH_JMPDOT 2 77#define SH_JMPEVAL 3 78#define SH_JMPTRAP 4 79#define SH_JMPIO 5 80#define SH_JMPCMD 6 81#define SH_JMPFUN 7 82#define SH_JMPERRFN 8 83#define SH_JMPSUB 9 84#define SH_JMPERREXIT 10 85#define SH_JMPEXIT 11 86#define SH_JMPSCRIPT 12 87 88struct openlist 89{ 90 Sfio_t *strm; 91 struct openlist *next; 92}; 93 94struct checkpt 95{ 96 sigjmp_buf buff; 97 sigjmp_buf *prev; 98 int topfd; 99 int mode; 100 struct openlist *olist; 101#if (ERROR_VERSION >= 20030214L) 102 Error_context_t err; 103#else 104 struct errorcontext err; 105#endif 106}; 107 108#define sh_pushcontext(shp,bp,n)( (bp)->mode=(n) , (bp)->olist=0, \ 109 (bp)->topfd=shp->topfd, (bp)->prev=shp->jmplist, \ 110 (bp)->err = *ERROR_CONTEXT_BASE, \ 111 shp->jmplist = (sigjmp_buf*)(&(bp)->buff) \ 112 ) 113#define sh_popcontext(shp,bp) (shp->jmplist=(bp)->prev, errorpop(&((bp)->err))) 114 115extern void sh_fault(int); 116extern void sh_done(void*,int); 117extern void sh_sigclear(int); 118extern void sh_sigdone(void); 119extern void sh_siginit(void*); 120extern void sh_sigtrap(int); 121extern void sh_sigreset(int); 122extern void *sh_timeradd(unsigned long,int ,void (*)(void*),void*); 123extern void timerdel(void*); 124 125extern const char e_alarm[]; 126 127#endif /* !SH_SIGBITS */ 128