📄 signal.c
字号:
/**********Copyright 1990 Regents of the University of California. All rights reserved.Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group**********//* * The signal routines for spice 3 and nutmeg. */#include "spice.h"#include "ifsim.h"#include "iferrmsg.h"#include "cpdefs.h"#include "ftedefs.h"#include "ftedev.h"#include <setjmp.h>#ifdef HAS_UNIX_SIGS# include <signal.h>#endif#include "suffix.h"#ifdef HAS_UNIX_SIGS# ifdef HAS_LONGJUMPextern jmp_buf jbuf;/* The (void) signal handlers... SIGINT is the only one that gets reset (by * cshpar) so it is global. They are ifdef BSD because of the sigmask * stuff in sigstop. We set the interrupt flag and return if ft_setflag * is true. */SIGNAL_TYPEft_sigintr(){ gr_clean(); (void) signal( SIGINT, (SIGNAL_FUNCTION) ft_sigintr ); if (ft_intrpt) fprintf(cp_err, "Interrupt (ouch)\n"); else { fprintf(cp_err, "Interrupt\n"); ft_intrpt = true; } if (ft_setflag) return;/* To restore screen after an interrupt to a plot for instance */# ifdef HAS_MFB if(dispdev && !strcmp( dispdev->name, "MFB" )) MFBHalt();# endif cp_interactive = true; cp_resetcontrol(); longjmp(jbuf, 1);}/* ARGSUSED */SIGNAL_TYPEsigfloat(sig, code){ gr_clean(); fperror("Error", code); rewind(cp_out); (void) signal( SIGFPE, (SIGNAL_FUNCTION) sigfloat ); longjmp(jbuf, 1);}/* This should give a new prompt if cshpar is waiting for input. */# ifdef SIGTSTPSIGNAL_TYPEsigstop( ){ gr_clean(); cp_ccon(false); (void) signal(SIGTSTP, SIG_DFL); (void) kill(getpid(), SIGTSTP); /* This should stop us */ return;}SIGNAL_TYPEsigcont( ){ (void) signal(SIGTSTP, (SIGNAL_FUNCTION) sigstop); if (cp_cwait) longjmp(jbuf, 1);}# endif/* Special (void) signal handlers. */SIGNAL_TYPEsigill(){ fprintf(cp_err, "\ninternal error -- illegal instruction\n"); fatal();}SIGNAL_TYPEsigbus(){ fprintf(cp_err, "\ninternal error -- bus error\n"); fatal();}SIGNAL_TYPEsigsegv(){ fprintf(cp_err, "\ninternal error -- segmentation violation\n"); fatal();}SIGNAL_TYPEsig_sys(){ fprintf(cp_err, "\ninternal error -- bad argument to system call\n"); fatal();}# endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -