#include <signal.h> #include <setjmp.h> /* $Header$ */ /* Trap handling */ int _trpline; /* BASIC return label */ jmp_buf trpbuf; _trpset(nr) int nr; { /*debug printf("trap set to %d\n",nr);*/ _trpline=nr; } _trpfatal(i) int i; { extern int _errsym,_erlsym; _errsym= i; _setline(); if( _trpline == 0) printf("LINE %d: FATAL ERROR: trap %d\n",_erlsym,i); #ifdef DEBUG printf("trap occurred %d return %d\n",i,_trpline); #endif _trap(); } _ini_trp() { /* initialize trap routines */ int i, _trpfatal(); for(i=0;i<NSIG;i++) signal(i,_trpfatal); } _settrap(nr) int nr; { _trpline=nr; } _trap() { int line; if( _trpline==0) exit(-1); line=_trpline; _trpline=0; /* should be reset by user */ _ini_trp(); longjmp(trpbuf,line); }