date and time created 80/10/31 14:39:48 by mckusick
[unix-history] / usr / src / usr.bin / pascal / libpc / ERROR.c
CommitLineData
0b85893f
KM
1/* Copyright (c) 1979 Regents of the University of California */
2
3static char sccsid[] = "@(#)ERROR.c 1.1 %G%";
4
5#include "stdio.h"
6#include "signal.h"
7#include "h01errs.h"
8
9/*
10 * Routine ERROR is called from the runtime library when a runtime error
11 * occurs. Its arguments are the internal number of the error which occurred,
12 * and an error specific piece of error data. The error file is constructed
13 * from errdata by the makefile using the editor script make.ed1.
14 */
15ERROR(errnum, errdata)
16
17 long errnum;
18 union cvt {
19 long longdat;
20 char *strngdat;
21 double dbldat;
22 } errdata;
23{
24 PFLUSH();
25 fputc('\n',stderr);
26 SETRACE();
27 switch (errnum) {
28 case ECHR:
29 fprintf(stderr, "Argument to chr of %d is out of range\n"
30 ,errdata.longdat);
31 return(errdata.longdat);
32 case EHALT:
33 fputs("Call to procedure halt\n",stderr);
34 PCEXIT(0);
35 case ENILPTR:
36 fputs("Pointer value out of legal range\n",stderr);
37 return(0);
38 case EPASTEOF:
39 fprintf(stderr,"%s: Tried to read past end of file\n"
40 ,errdata.strngdat);
41 return(0);
42 case EREADIT:
43 fprintf(stderr,"%s: Attempt to read, but open for writing\n"
44 ,errdata.strngdat);
45 return(0);
46 case EWRITEIT:
47 fprintf(stderr,"%s: Attempt to write, but open for reading\n"
48 ,errdata.strngdat);
49 return(0);
50 case ECLOSE:
51 fprintf(stderr,"%s: Close failed\n",errdata.strngdat);
52 return(0);
53 case ELLIMIT:
54 fprintf(stderr,"%s: Line limit exceeded\n",errdata.strngdat);
55 return(0);
56 case ESQRT:
57 fprintf(stderr,"Negative argument of %E to sqrt\n"
58 ,errdata.dbldat);
59 return(errdata.dbldat);
60 case EREFINAF:
61 fprintf(stderr,"%s: ",errdata.strngdat);
62 case ENOFILE:
63 fputs("Reference to an inactive file\n",stderr);
64 return(0);
65 case EWRITE:
66 fputs("Could not write to ",stderr);
67 perror(errdata.strngdat);
68 return(0);
69 case EOPEN:
70 fputs("Could not open ",stderr);
71 perror(errdata.strngdat);
72 return(0);
73 case ECREATE:
74 fputs("Could not create ",stderr);
75 perror(errdata.strngdat);
76 return(0);
77 case EREMOVE:
78 fputs("Could not remove ",stderr);
79 perror(errdata.strngdat);
80 return(0);
81 case ESEEK:
82 fputs("Could not reset ",stderr);
83 perror(errdata.strngdat);
84 return(0);
85 case ENAMESIZE:
86 fprintf(stderr,"%s: File name too long\n",errdata.strngdat);
87 return(0);
88 case ELN:
89 fprintf(stderr,"Non-positive argument of %E to ln\n"
90 ,errdata.dbldat);
91 return(errdata.dbldat);
92 case EBADINUM:
93 fprintf(stderr,"%s: Bad data found on integer read\n"
94 ,errdata.strngdat);
95 return(0);
96 case EBADFNUM:
97 fprintf(stderr,"%s: Bad data found on real read\n"
98 ,errdata.strngdat);
99 return(0);
100 case ENUMNTFD:
101 fprintf(stderr,
102 "Unknown name \"%s\" found on enumerated type read\n",
103 errdata.strngdat);
104 return(0);
105 case ENAMRNG:
106 fprintf(stderr,
107 "Enumerated type value of %d is out of range on output\n",
108 errdata.longdat);
109 return(errdata.longdat);
110 case EFMTSIZE:
111 fprintf(stderr,"Negative format width: %d\n",errdata.longdat);
112 return(0);
113 case EGOTO:
114 fputs("Active frame not found in non-local goto\n", stderr);
115 return(0);
116 case ECASE:
117 fprintf(stderr,"Label of %d not found in case\n"
118 ,errdata.longdat);
119 return(errdata.longdat);
120 case EOUTOFMEM:
121 fputs("Ran out of memory\n",stderr);
122 return(0);
123 case ECTLWR:
124 fprintf(stderr, "Range lower bound of %d out of set bounds\n",
125 errdata.longdat);
126 return(0);
127 case ECTUPR:
128 fprintf(stderr, "Range upper bound of %d out of set bounds\n",
129 errdata.longdat);
130 return(0);
131 case ECTSNG:
132 fprintf(stderr, "Value of %d out of set bounds\n",
133 errdata.longdat);
134 return(0);
135 case ENARGS:
136 if (errdata.longdat < 0)
137 fprintf(stderr,
138 "There were %d too few arguments to formal routine\n",
139 -errdata.longdat);
140 else
141 fprintf(stderr,
142 "There were %d too many arguments to formal routine\n",
143 errdata.longdat);
144 return(0);
145 case EARGV:
146 fprintf(stderr,"Argument to argv of %d is out of range\n"
147 ,errdata.longdat);
148 return(errdata.longdat);
149 case EPACK:
150 fprintf(stderr,"i = %d: Bad i to pack(a,i,z)\n"
151 ,errdata.longdat);
152 return(errdata.longdat);
153 case EUNPACK:
154 fprintf(stderr,"i = %d: Bad i to unpack(z,a,i)\n"
155 ,errdata.longdat);
156 return(errdata.longdat);
157 case ERANGE:
158 fprintf(stderr,"Value of %d is out of range\n",errdata.longdat);
159 return(errdata.longdat);
160 case ESUBSC:
161 fprintf(stderr,"Subscript value of %d is out of range\n"
162 ,errdata.longdat);
163 return(errdata.longdat);
164 case EASRT:
165 fprintf(stderr,"Assertion failed: %s\n",errdata.strngdat);
166 return(0);
167 case ESTLIM:
168 fprintf(stderr,
169 "Statement count limit exceeded, %d statements executed\n",
170 errdata.longdat);
171 return(errdata.longdat);
172 default:
173 fputs("Panic: unknown error\n",stderr);
174 return(0);
175 }
176}