*** empty log message ***
This commit is contained in:
55
lang/basic/lib/trap.c
Normal file
55
lang/basic/lib/trap.c
Normal file
@@ -0,0 +1,55 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user