⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dosig.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
static char sccsid[] = "@(#)dosig.c	4.2  83/07/31";/* * Handle signal trapping from version 6 or * version 7 compatability mode programs. *	Art Wetzel	November 1979 */#ifdef TRACE#include <stdio.h>#endif#include <signal.h>#include "defs.h"unsigned int  sigvals[NSIG+1];/* actual catch point for all signals */sigcatch(signum, faultcode, scp)	int signum, faultcode;	struct sigcontext *scp;{	unsigned short *pcptr;	extern getregs();	if(incompat) {		/* hurry up and get the registers before they are destroyed */		getregs();	} else {		/* we were in native mode simulating a sys call */		/* set it up with the old values */		dosig(signum, pc);		/* go back where we were doing the sys call */		return(0);	}	/* figure out the pc */	pcptr = (unsigned short *) &scp->sc_pc;	pc = (unsigned short *) *pcptr;	/* get the psl with condition codes */	psl = 0x83c00000 | (scp->sc_ps & 017);	/* actually do the thing */	if (sigvals[signum] != (unsigned int)SIG_DFL &&	    (sigvals[signum] & (unsigned int)SIG_IGN) == 0)		dosig(signum, pc);	/* go back to compatability mode and the signal routine there */	sigsetmask(scp->sc_mask);	incompat++;	compat();}/* routine to set up pdp11 space for return from a signal */dosig(signum, from)	int signum, from;{	unsigned short *sp;#ifdef TRACE	fprintf(stderr,"Caught sig %d from 0%o -> 0%o\n",signum,(pc-1),*(pc-1));#endif	/* where is the stack */	sp = (unsigned short *)regs[6];	/* stack up psw condition codes so rti works */	*(--sp) = psl & 017;	/* stack pc */	*(--sp) = (unsigned short)(int)pc;	/* reset stack pointer */	regs[6] = (unsigned short)(int)sp;	/* reset pc to signal catching routine */	pc = (unsigned short *)sigvals[signum];	signal(signum, SIG_DFL);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -