BSD 3 development
[unix-history] / usr / src / cmd / px / perror.c
CommitLineData
6516b261
CH
1#include "stdio.h"
2#include "signal.h"
3#include "h00vars.h"
4#include "h01errs.h"
5
6/*
7 * Routine error is called from the interpreter when a runtime error occurs.
8 * Its argument is the internal number of the error which occurred.
9 * See Edata, Emake etc.
10 */
11error(errnum)
12long errnum;
13{
14register long i;
15extern long errno;
16
17signal(SIGINT,SIG_IGN);
18signal(SIGSEGV,SIG_DFL);
19signal(SIGFPE,SIG_DFL);
20i = errno;
21pflush();
22errno = i;
23fputs("\n\n",stderr);
24switch (errnum) {
25 case EINTR:
26 break;
27 case ECHR:
28 fputs("Argument to chr out of range\n",stderr);
29 break;
30 case EASSIGN:
31 fputs("Overflow during assignment conversion\n",stderr);
32 break;
33 case EFIXADD:
34 fputs("Overflow in fixed point addition\n",stderr);
35 break;
36 case EFLTADD:
37 fputs("Floating point addition out of range\n",stderr);
38 break;
39 case EFIXSUB:
40 fputs("Overflow in fixed point subtraction\n",stderr);
41 break;
42 case EFLTSUB:
43 fputs("Floating point subtraction out of range\n",stderr);
44 break;
45 case EFIXMUL:
46 fputs("Overflow in fixed point multiplication\n",stderr);
47 break;
48 case EFLTMUL:
49 fputs("Floating point multiplication out of range\n",stderr);
50 break;
51 case EFIXDIV:
52 fputs("Fixed point division by zero\n",stderr);
53 break;
54 case EFLTDIV:
55 fputs("Floating point division error\n",stderr);
56 break;
57 case EMODDIV:
58 fputs("Fixed point modulo by zero\n",stderr);
59 break;
60 case EFIXNEG:
61 fputs("Overflow in fixed point negation\n",stderr);
62 break;
63 case ESYSTEM:
64 fputs("Panic: Computational error in interpreter\n",stderr);
65 break;
66 case EBUILTIN:
67 fputs("Overflow in builtin function\n",stderr);
68 break;
69 case EHALT:
70/*
71 nodump = 0;
72*/
73 fputs("Call to procedure halt\n",stderr);
74 break;
75 case ENILPTR:
76 fputs("Reference through a nil pointer\n",stderr);
77 break;
78 case EPASTEOF:
79 fprintf(stderr,"%s: Tried to read past end of file\n",file);
80 break;
81 case EREADIT:
82 fprintf(stderr,"%s: Attempt to read, but open for writing\n",file);
83 break;
84 case EWRITEIT:
85 fprintf(stderr,"%s: Attempt to write, but open for reading\n",file);
86 break;
87 case ECLOSE:
88 fprintf(stderr,"%s: Close failed\n",file);
89 break;
90 case ELLIMIT:
91 fprintf(stderr,"%s: Line limit exceeded\n",file);
92 break;
93 case ESQRT:
94 fputs("Negative argument to sqrt\n",stderr);
95 break;
96 case ESTKNEMP:
97 fputs("Panic: stack not empty between statements\n",stderr);
98 break;
99 case ESUBSCR:
100 fputs("Subscript out of range\n",stderr);
101 break;
102 case EREFINAF:
103 fputs("Reference to an inactive file\n",stderr);
104 break;
105 case EWRITE:
106 fputs("Could not write to ",stderr);
107 perror(file);
108 break;
109 case EOPEN:
110 fputs("Could not open ",stderr);
111 perror(file);
112 break;
113 case ECREATE:
114 fputs("Could not create ",stderr);
115 perror(file);
116 break;
117 case EREMOVE:
118 fputs("Could not remove ",stderr);
119 perror(file);
120 break;
121 case ESEEK:
122 fputs("Could not reset ",stderr);
123 perror(file);
124 break;
125 case ENAMESIZE:
126 fputs("File name too long\n",stderr);
127 break;
128 case ELN:
129 fputs("Non-positive argument to ln\n",stderr);
130 break;
131 case EBADOP:
132 fputs("Panic: bad op code\n",stderr);
133 break;
134 case EBADINUM:
135 fputs("Bad data found on integer read\n",stderr);
136 break;
137 case EBADFNUM:
138 fputs("Bad data found on real read\n",stderr);
139 break;
140 case EGOTO:
141 fputs("Panic: active frame not found in goto\n",stderr);
142 break;
143 case ECASE:
144 fputs("Label not found in case\n",stderr);
145 break;
146 case EOUTOFMEM:
147 fputs("Ran out of memory\n",stderr);
148 break;
149 case ETRASHHEAP:
150 fputs("Attempt to dispose of previously deallocated memory\n",stderr);
151 break;
152 case ECTTOT:
153 fputs("Constructed set argument exceeds set bounds\n",stderr);
154 break;
155 case EARGV:
156 fputs("Argument to argv out of range\n",stderr);
157 break;
158 case EPACK:
159 fputs("Bad i to pack(a,i,z)\n",stderr);
160 break;
161 case EUNPACK:
162 fputs("Bad i to unpack(z,a,i)\n",stderr);
163 break;
164 case ERANGE:
165 fputs("Value out of range\n",stderr);
166 break;
167 case EASRT:
168 fputs("Assertion failed\n",stderr);
169 break;
170 case ESTLIM:
171 fputs("Statement count limit exceeded\n",stderr);
172 break;
173 case ESTKOVFLO:
174 fputs("Runtime stack overflow\n",stderr);
175 break;
176 case EFRAMESIZE:
177 fputs("Compiler restricts declarations to 32768 bytes per block\n",stderr);
178 break;
179 default:
180 fputs("Panic: unknown error\n",stderr);
181}
182if (nodump == 0)
183 backtrace(errnum);
184psexit(errnum);
185}