#pragma prototyped
#ifndef SH_SIGBITS
#include <sig.h>
#include <setjmp.h>
#include <error.h>
#include <sfio.h>
#include "FEATURE/setjmp"
#include "FEATURE/sigfeatures"
#ifndef SIGWINCH
# ifdef SIGWIND
# define SIGWINCH SIGWIND
# else
# ifdef SIGWINDOW
# define SIGWINCH SIGWINDOW
# endif
# endif
#endif
typedef void (*SH_SIGTYPE)(int,void(*)(int));
#define SH_FORKLIM 16
#define SH_TRAP 0200
#define SH_ERRTRAP 0
#define SH_KEYTRAP 1
#define SH_DEBUGTRAP 4
#define SH_SIGBITS 8
#define SH_SIGFAULT 1
#define SH_SIGOFF 2
#define SH_SIGSET 4
#define SH_SIGTRAP 010
#define SH_SIGDONE 020
#define SH_SIGIGNORE 040
#define SH_SIGINTERACTIVE 0100
#define SH_SIGTSTP 0200
#define SH_SIGALRM 0200
#define SH_SIGTERM SH_SIGOFF
#define SH_JMPDOT 2
#define SH_JMPEVAL 3
#define SH_JMPTRAP 4
#define SH_JMPIO 5
#define SH_JMPCMD 6
#define SH_JMPFUN 7
#define SH_JMPERRFN 8
#define SH_JMPSUB 9
#define SH_JMPERREXIT 10
#define SH_JMPEXIT 11
#define SH_JMPSCRIPT 12
struct openlist
{
Sfio_t *strm;
struct openlist *next;
};
struct checkpt
{
sigjmp_buf buff;
sigjmp_buf *prev;
int topfd;
int mode;
struct openlist *olist;
#if (ERROR_VERSION >= 20030214L)
Error_context_t err;
#else
struct errorcontext err;
#endif
};
#define sh_pushcontext(bp,n) ( (bp)->mode=(n) , (bp)->olist=0, \
(bp)->topfd=sh.topfd, (bp)->prev=sh.jmplist, \
(bp)->err = *ERROR_CONTEXT_BASE, \
sh.jmplist = (sigjmp_buf*)(&(bp)->buff) \
)
#define sh_popcontext(bp) (sh.jmplist=(bp)->prev, errorpop(&((bp)->err)))
extern void sh_fault(int);
extern void sh_done(int);
extern void sh_chktrap(void);
extern void sh_sigclear(int);
extern void sh_sigdone(void);
extern void sh_siginit(void);
extern void sh_sigtrap(int);
extern void sh_sigreset(int);
extern void sh_timetraps(void);
extern void *sh_timeradd(unsigned long,int ,void (*)(void*),void*);
extern void timerdel(void*);
extern const char e_alarm[];
#endif