|
|
1.1 ! root 1: /* Copyright (c) 1979 Regents of the University of California */ ! 2: ! 3: static char sccsid[] = "@(#)perror.c 4.1 10/10/80"; ! 4: ! 5: #include "stdio.h" ! 6: #include "signal.h" ! 7: #include "h00vars.h" ! 8: #include "h01errs.h" ! 9: ! 10: /* ! 11: * Routine error is called from the interpreter when a runtime error occurs. ! 12: * Its argument is the internal number of the error which occurred. ! 13: * See Edata, Emake etc. ! 14: */ ! 15: error(errnum) ! 16: long errnum; ! 17: { ! 18: register long i; ! 19: extern long errno; ! 20: ! 21: signal(SIGINT,SIG_IGN); ! 22: signal(SIGSEGV,SIG_DFL); ! 23: signal(SIGFPE,SIG_DFL); ! 24: i = errno; ! 25: pflush(); ! 26: errno = i; ! 27: fputs("\n\n",stderr); ! 28: switch (errnum) { ! 29: case EINTR: ! 30: break; ! 31: case ECHR: ! 32: fputs("Argument to chr out of range\n",stderr); ! 33: break; ! 34: case EASSIGN: ! 35: fputs("Overflow during assignment conversion\n",stderr); ! 36: break; ! 37: case EFIXADD: ! 38: fputs("Overflow in fixed point addition\n",stderr); ! 39: break; ! 40: case EFLTADD: ! 41: fputs("Floating point addition out of range\n",stderr); ! 42: break; ! 43: case EFIXSUB: ! 44: fputs("Overflow in fixed point subtraction\n",stderr); ! 45: break; ! 46: case EFLTSUB: ! 47: fputs("Floating point subtraction out of range\n",stderr); ! 48: break; ! 49: case EFIXMUL: ! 50: fputs("Overflow in fixed point multiplication\n",stderr); ! 51: break; ! 52: case EFLTMUL: ! 53: fputs("Floating point multiplication out of range\n",stderr); ! 54: break; ! 55: case EFIXDIV: ! 56: fputs("Fixed point division by zero\n",stderr); ! 57: break; ! 58: case EFLTDIV: ! 59: fputs("Floating point division error\n",stderr); ! 60: break; ! 61: case EMODDIV: ! 62: fputs("Fixed point modulo by zero\n",stderr); ! 63: break; ! 64: case EFIXNEG: ! 65: fputs("Overflow in fixed point negation\n",stderr); ! 66: break; ! 67: case ESYSTEM: ! 68: fputs("Panic: Computational error in interpreter\n",stderr); ! 69: break; ! 70: case EBUILTIN: ! 71: fputs("Overflow in builtin function\n",stderr); ! 72: break; ! 73: case EHALT: ! 74: /* ! 75: nodump = 0; ! 76: */ ! 77: fputs("Call to procedure halt\n",stderr); ! 78: break; ! 79: case ENILPTR: ! 80: fputs("Reference through a nil pointer\n",stderr); ! 81: break; ! 82: case EPASTEOF: ! 83: fprintf(stderr,"%s: Tried to read past end of file\n",file); ! 84: break; ! 85: case EREADIT: ! 86: fprintf(stderr,"%s: Attempt to read, but open for writing\n",file); ! 87: break; ! 88: case EWRITEIT: ! 89: fprintf(stderr,"%s: Attempt to write, but open for reading\n",file); ! 90: break; ! 91: case ECLOSE: ! 92: fprintf(stderr,"%s: Close failed\n",file); ! 93: break; ! 94: case ELLIMIT: ! 95: fprintf(stderr,"%s: Line limit exceeded\n",file); ! 96: break; ! 97: case ESQRT: ! 98: fputs("Negative argument to sqrt\n",stderr); ! 99: break; ! 100: case ESTKNEMP: ! 101: fputs("Panic: stack not empty between statements\n",stderr); ! 102: break; ! 103: case ESUBSCR: ! 104: fputs("Subscript out of range\n",stderr); ! 105: break; ! 106: case EREFINAF: ! 107: fputs("Reference to an inactive file\n",stderr); ! 108: break; ! 109: case EWRITE: ! 110: fputs("Could not write to ",stderr); ! 111: perror(file); ! 112: break; ! 113: case EOPEN: ! 114: fputs("Could not open ",stderr); ! 115: perror(file); ! 116: break; ! 117: case ECREATE: ! 118: fputs("Could not create ",stderr); ! 119: perror(file); ! 120: break; ! 121: case EREMOVE: ! 122: fputs("Could not remove ",stderr); ! 123: perror(file); ! 124: break; ! 125: case ESEEK: ! 126: fputs("Could not reset ",stderr); ! 127: perror(file); ! 128: break; ! 129: case ENAMESIZE: ! 130: fputs("File name too long\n",stderr); ! 131: break; ! 132: case ELN: ! 133: fputs("Non-positive argument to ln\n",stderr); ! 134: break; ! 135: case EBADOP: ! 136: fputs("Panic: bad op code\n",stderr); ! 137: break; ! 138: case EBADINUM: ! 139: fputs("Bad data found on integer read\n",stderr); ! 140: break; ! 141: case EBADFNUM: ! 142: fputs("Bad data found on real read\n",stderr); ! 143: break; ! 144: case ENUMNTFD: ! 145: fputs("Unknown name found on enumerated type read\n",stderr); ! 146: break; ! 147: case ENAMRNG: ! 148: fputs("Enumerated type value out of range on output\n",stderr); ! 149: break; ! 150: case EFMTSIZE: ! 151: fputs("Negative format width\n",stderr); ! 152: break; ! 153: case ENARGS: ! 154: fputs("Improper number of arguments to formal routine\n" ! 155: ,stderr); ! 156: break; ! 157: case EGOTO: ! 158: fputs("Panic: active frame not found in goto\n",stderr); ! 159: break; ! 160: case ECASE: ! 161: fputs("Label not found in case\n",stderr); ! 162: break; ! 163: case EOUTOFMEM: ! 164: fputs("Ran out of memory\n",stderr); ! 165: break; ! 166: case ETRASHHEAP: ! 167: fputs("Improper use of new variables has caused heap integrity check to fail\n",stderr); ! 168: break; ! 169: case ECTLWR: ! 170: fputs("Range lower bound out of set bounds\n", stderr); ! 171: break; ! 172: case ECTUPR: ! 173: fputs("Range upper bound out of set bounds\n", stderr); ! 174: break; ! 175: case ECTSNG: ! 176: fputs("Single value out of set bounds\n", stderr); ! 177: break; ! 178: case EARGV: ! 179: fputs("Argument to argv out of range\n",stderr); ! 180: break; ! 181: case EPACK: ! 182: fputs("Bad i to pack(a,i,z)\n",stderr); ! 183: break; ! 184: case EUNPACK: ! 185: fputs("Bad i to unpack(z,a,i)\n",stderr); ! 186: break; ! 187: case ERANGE: ! 188: fputs("Value out of range\n",stderr); ! 189: break; ! 190: case EASRT: ! 191: fputs("Assertion failed\n",stderr); ! 192: break; ! 193: case ESTLIM: ! 194: fputs("Statement count limit exceeded\n",stderr); ! 195: break; ! 196: case ESTKOVFLO: ! 197: fputs("Runtime stack overflow\n",stderr); ! 198: break; ! 199: default: ! 200: fputs("Panic: unknown error\n",stderr); ! 201: } ! 202: backtrace(errnum); ! 203: psexit(errnum); ! 204: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.