da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1982-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* http://www.opensource.org/licenses/cpl1.0.txt *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef SH_SIGBITS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * UNIX shell
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * S. R. Bourne
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Rewritten by David Korn
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <sig.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <setjmp.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <error.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <sfio.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include "FEATURE/setjmp"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include "FEATURE/sigfeatures"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef SIGWINCH
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# ifdef SIGWIND
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define SIGWINCH SIGWIND
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# ifdef SIGWINDOW
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define SIGWINCH SIGWINDOW
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef void (*SH_SIGTYPE)(int,void(*)(int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_FORKLIM 16 /* fork timeout interval */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_TRAP 0200 /* bit for internal traps */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_ERRTRAP 0 /* trap for non-zero exit status */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_KEYTRAP 1 /* trap for keyboard event */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_DEBUGTRAP 4 /* must be last internal trap */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGBITS 8
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGFAULT 1 /* signal handler is sh_fault */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGOFF 2 /* signal handler is SIG_IGN */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGSET 4 /* pending signal */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGTRAP 010 /* pending trap */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGDONE 020 /* default is exit */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGIGNORE 040 /* default is ingore signal */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGINTERACTIVE 0100 /* handle interactive specially */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGTSTP 0200 /* tstp signal received */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGALRM 0200 /* timer alarm received */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGTERM SH_SIGOFF /* term signal received */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define SH_SIGRUNTIME 0400 /* runtime value */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define SH_SIGRTMIN 0 /* sh.sigruntime[] index */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define SH_SIGRTMAX 1 /* sh.sigruntime[] index */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * These are longjmp values
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPDOT 2
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPEVAL 3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPTRAP 4
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPIO 5
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPCMD 6
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPFUN 7
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPERRFN 8
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPSUB 9
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPERREXIT 10
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPEXIT 11
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_JMPSCRIPT 12
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct openlist
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Sfio_t *strm;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct openlist *next;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct checkpt
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sigjmp_buf buff;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sigjmp_buf *prev;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int topfd;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int mode;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct openlist *olist;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if (ERROR_VERSION >= 20030214L)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Error_context_t err;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct errorcontext err;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define sh_pushcontext(bp,n) ( (bp)->mode=(n) , (bp)->olist=0, \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin (bp)->topfd=sh.topfd, (bp)->prev=sh.jmplist, \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin (bp)->err = *ERROR_CONTEXT_BASE, \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sh.jmplist = (sigjmp_buf*)(&(bp)->buff) \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin )
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define sh_popcontext(bp) (sh.jmplist=(bp)->prev, errorpop(&((bp)->err)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_fault(int);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern void sh_done(void*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_chktrap(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_sigclear(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_sigdone(void);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern void sh_siginit(void*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_sigtrap(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_sigreset(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_timetraps(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void *sh_timeradd(unsigned long,int ,void (*)(void*),void*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void timerdel(void*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_alarm[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* !SH_SIGBITS */