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

📄 catch.c

📁 Minix比较全的源码
💻 C
字号:
/* $Header$ *//* * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. * *          This product is part of the Amsterdam Compiler Kit. * * Permission to use, sell, duplicate or disclose this software must be * obtained in writing. Requests for such permissions may be sent to * *      Dr. Andrew S. Tanenbaum *      Wiskundig Seminarium *      Vrije Universiteit *      Postbox 7161 *      1007 MC Amsterdam *      The Netherlands * */#include	<em_abs.h>#include	<pc_err.h>#include	<pc_file.h>/* to make it easier to patch ... */extern struct file	*_curfil;static struct errm {	int errno;	char *errmes;} errors[] = {	{ EARRAY,	"array bound error"},	{ ERANGE,	"range bound error"},	{ ESET,		"set bound error"},	{ EIOVFL,	"integer overflow"},	{ EFOVFL,	"real overflow"},	{ EFUNFL,	"real underflow"},	{ EIDIVZ,	"divide by 0"},	{ EFDIVZ,	"divide by 0.0"},	{ EIUND,	"undefined integer"},	{ EFUND,	"undefined real"},	{ ECONV,	"conversion error"},	{ ESTACK,	"stack overflow"},	{ EHEAP,	"heap overflow"},	{ EILLINS,	"illegal instruction"},	{ EODDZ,	"illegal size argument"},	{ ECASE,	"case error"},	{ EMEMFLT,	"addressing non existent memory"},	{ EBADPTR,	"bad pointer used"},	{ EBADPC,	"program counter out of range"},	{ EBADLAE,	"bad argument of lae"},	{ EBADMON,	"bad monitor call"},	{ EBADLIN,	"argument if LIN too high"},	{ EBADGTO,	"GTO descriptor error"},	{ EARGC,	"more args expected" },	{ EEXP,		"error in exp" },	{ ELOG,		"error in ln" },	{ ESQT,		"error in sqrt" },	{ EASS,		"assertion failed" },	{ EPACK,	"array bound error in pack" },	{ EUNPACK,	"array bound error in unpack" },	{ EMOD,		"only positive j in 'i mod j'" },	{ EBADF,	"file not yet open" },	{ EFREE,	"dispose error" },	{ EFUNASS,	"function not assigned" },	{ EWIDTH,	"illegal field width" },	{ EWRITEF,	"not writable" },	{ EREADF,	"not readable" },	{ EEOF,		"end of file" },	{ EFTRUNC,	"truncated" },	{ ERESET,	"reset error" },	{ EREWR,	"rewrite error" },	{ ECLOSE,	"close error" },	{ EREAD,	"read error" },	{ EWRITE,	"write error" },	{ EDIGIT,	"digit expected" },	{ EASCII,	"non-ASCII char read" },	{ -1,		0}};extern int		_pargc;extern char		**_pargv;extern char		***_penviron;extern char		*_hol0();extern			_trp();extern			_exit();extern int		_write();_catch(erno) unsigned erno; {	register struct errm *ep = &errors[0];	char *p,*q,*s,**qq;	char buf[20];	unsigned i;	int j = erno;	char *pp[11];	char xbuf[100];	qq = pp;	if (p = FILN)		*qq++ = p;	else		*qq++ = _pargv[0];	while (ep->errno != erno && ep->errmes != 0) ep++;	p = buf;	s = xbuf;	if (i = LINO) {		*qq++ = ", ";		do			*p++ = i % 10 + '0';		while (i /= 10);		while (p > buf) *s++ = *--p;	}	*s++ = ':';	*s++ = ' ';	*s++ = '\0';	*qq++ = xbuf;	if ((erno & ~037) == 0140 && (_curfil->flags&0377)==MAGIC) { 		/* file error */		*qq++ = "file ";		*qq++ = _curfil->fname;		*qq++ = ": ";	}	if (ep->errmes) *qq++ = ep->errmes;	else {		*qq++ = "error number ";		*qq++ = s;		p = buf;		if (j < 0) {			j = -j;			*s++ = '-';		}		do			*p++ = j % 10 + '0';		while (j /= 10);		while (p > buf) *s++ = *--p;		*s = 0;	}	*qq++ = "\n";	*qq = 0;	qq = pp;	while (q = *qq++) {		p = q;		while (*p)			p++;		if (_write(2,q,(int)(p-q)) < 0)			;	}	_exit(erno);error:	_trp(erno);}

⌨️ 快捷键说明

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