|
|
BSD 4.1
/* Copyright (c) 1979 Regents of the University of California */
static char sccsid[] = "@(#)perror.c 4.1 10/10/80";
#include "stdio.h"
#include "signal.h"
#include "h00vars.h"
#include "h01errs.h"
/*
* Routine error is called from the interpreter when a runtime error occurs.
* Its argument is the internal number of the error which occurred.
* See Edata, Emake etc.
*/
error(errnum)
long errnum;
{
register long i;
extern long errno;
signal(SIGINT,SIG_IGN);
signal(SIGSEGV,SIG_DFL);
signal(SIGFPE,SIG_DFL);
i = errno;
pflush();
errno = i;
fputs("\n\n",stderr);
switch (errnum) {
case EINTR:
break;
case ECHR:
fputs("Argument to chr out of range\n",stderr);
break;
case EASSIGN:
fputs("Overflow during assignment conversion\n",stderr);
break;
case EFIXADD:
fputs("Overflow in fixed point addition\n",stderr);
break;
case EFLTADD:
fputs("Floating point addition out of range\n",stderr);
break;
case EFIXSUB:
fputs("Overflow in fixed point subtraction\n",stderr);
break;
case EFLTSUB:
fputs("Floating point subtraction out of range\n",stderr);
break;
case EFIXMUL:
fputs("Overflow in fixed point multiplication\n",stderr);
break;
case EFLTMUL:
fputs("Floating point multiplication out of range\n",stderr);
break;
case EFIXDIV:
fputs("Fixed point division by zero\n",stderr);
break;
case EFLTDIV:
fputs("Floating point division error\n",stderr);
break;
case EMODDIV:
fputs("Fixed point modulo by zero\n",stderr);
break;
case EFIXNEG:
fputs("Overflow in fixed point negation\n",stderr);
break;
case ESYSTEM:
fputs("Panic: Computational error in interpreter\n",stderr);
break;
case EBUILTIN:
fputs("Overflow in builtin function\n",stderr);
break;
case EHALT:
/*
nodump = 0;
*/
fputs("Call to procedure halt\n",stderr);
break;
case ENILPTR:
fputs("Reference through a nil pointer\n",stderr);
break;
case EPASTEOF:
fprintf(stderr,"%s: Tried to read past end of file\n",file);
break;
case EREADIT:
fprintf(stderr,"%s: Attempt to read, but open for writing\n",file);
break;
case EWRITEIT:
fprintf(stderr,"%s: Attempt to write, but open for reading\n",file);
break;
case ECLOSE:
fprintf(stderr,"%s: Close failed\n",file);
break;
case ELLIMIT:
fprintf(stderr,"%s: Line limit exceeded\n",file);
break;
case ESQRT:
fputs("Negative argument to sqrt\n",stderr);
break;
case ESTKNEMP:
fputs("Panic: stack not empty between statements\n",stderr);
break;
case ESUBSCR:
fputs("Subscript out of range\n",stderr);
break;
case EREFINAF:
fputs("Reference to an inactive file\n",stderr);
break;
case EWRITE:
fputs("Could not write to ",stderr);
perror(file);
break;
case EOPEN:
fputs("Could not open ",stderr);
perror(file);
break;
case ECREATE:
fputs("Could not create ",stderr);
perror(file);
break;
case EREMOVE:
fputs("Could not remove ",stderr);
perror(file);
break;
case ESEEK:
fputs("Could not reset ",stderr);
perror(file);
break;
case ENAMESIZE:
fputs("File name too long\n",stderr);
break;
case ELN:
fputs("Non-positive argument to ln\n",stderr);
break;
case EBADOP:
fputs("Panic: bad op code\n",stderr);
break;
case EBADINUM:
fputs("Bad data found on integer read\n",stderr);
break;
case EBADFNUM:
fputs("Bad data found on real read\n",stderr);
break;
case ENUMNTFD:
fputs("Unknown name found on enumerated type read\n",stderr);
break;
case ENAMRNG:
fputs("Enumerated type value out of range on output\n",stderr);
break;
case EFMTSIZE:
fputs("Negative format width\n",stderr);
break;
case ENARGS:
fputs("Improper number of arguments to formal routine\n"
,stderr);
break;
case EGOTO:
fputs("Panic: active frame not found in goto\n",stderr);
break;
case ECASE:
fputs("Label not found in case\n",stderr);
break;
case EOUTOFMEM:
fputs("Ran out of memory\n",stderr);
break;
case ETRASHHEAP:
fputs("Improper use of new variables has caused heap integrity check to fail\n",stderr);
break;
case ECTLWR:
fputs("Range lower bound out of set bounds\n", stderr);
break;
case ECTUPR:
fputs("Range upper bound out of set bounds\n", stderr);
break;
case ECTSNG:
fputs("Single value out of set bounds\n", stderr);
break;
case EARGV:
fputs("Argument to argv out of range\n",stderr);
break;
case EPACK:
fputs("Bad i to pack(a,i,z)\n",stderr);
break;
case EUNPACK:
fputs("Bad i to unpack(z,a,i)\n",stderr);
break;
case ERANGE:
fputs("Value out of range\n",stderr);
break;
case EASRT:
fputs("Assertion failed\n",stderr);
break;
case ESTLIM:
fputs("Statement count limit exceeded\n",stderr);
break;
case ESTKOVFLO:
fputs("Runtime stack overflow\n",stderr);
break;
default:
fputs("Panic: unknown error\n",stderr);
}
backtrace(errnum);
psexit(errnum);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.