9 /* Pataud le 13-06-1995
12 #include "graf\graf.h"
14 #include "graf/graf.h"
19 void errsignal(int exception)
24 signum = scot[exception];
25 /* A.Salwicki 30 pazdz. 2002 *
26 fprintf(stderr, "\n signum= %ld\n", signum);
28 * fprintf(stderr, " Wlazl kotek"); *
30 if (signum != -1) * attempt to call a handler *
33 raise_signal(signum, (word) 0, &ah, &am);
34 fprintf(stderr, "\n ic= %ld\n", ic);
36 /* if (ic != 0) /* continue execution *
44 /* A. Salwicki 27-10-2002
45 #if MSDOS && !NO_GRAPH
47 extern bool graphmode;
59 fprintf(stderr, " SL CHAIN CUT OFF");
62 fprintf(stderr, " UNIMPLEMENTED STANDARD PROCEDURE");
65 fprintf(stderr, " ILLEGAL ATTACH");
68 fprintf(stderr, " ILLEGAL DETACH");
71 fprintf(stderr, " COROUTINE TERMINATED");
74 fprintf(stderr, " COROUTINE ACTIVE");
77 fprintf(stderr, " ARRAY INDEX ERROR");
80 fprintf(stderr, " INCORRECT ARRAY BOUNDS");
83 fprintf(stderr, " IMPROPER QUA");
86 fprintf(stderr, " ILLEGAL ASSIGNMENT");
89 fprintf(stderr, " FORMAL TYPE MISSING");
92 fprintf(stderr, " ILLEGAL KILL");
95 fprintf(stderr, " ILLEGAL COPY");
98 fprintf(stderr, " INCOMPATIBLE HEADERS");
101 fprintf(stderr, " HANDLER NOT FOUND");
104 fprintf(stderr, " MEMORY OVERFLOW");
107 fprintf(stderr, " FORMAL LIST TOO LONG");
110 fprintf(stderr, " ILLEGAL RETURN");
113 fprintf(stderr, " REFERENCE TO NONE");
116 fprintf(stderr, " DIVISION BY ZERO");
119 fprintf(stderr, " SYSTEM ERROR");
122 fprintf(stderr, " ILLEGAL I/O OPERATION");
125 fprintf(stderr, " I/O ERROR");
128 fprintf(stderr, " CANNOT OPEN FILE");
131 fprintf(stderr, " INPUT DATA FORMAT BAD");
134 fprintf(stderr, " ILLEGAL RESUME");
137 fprintf(stderr, " TOO MANY PROCESSES ON ONE MACHINE");
140 fprintf(stderr, " INVALID NODE NUMBER");
143 fprintf(stderr, " NEGATIVE STEP VALUE");
146 fprintf(stderr, " REFERENCE TO GLOBAL NON PROCESS OBJECT FROM PROCESS");
149 fprintf(stderr, " UNRECOGNIZED ERROR");
151 if (thisp->trlnumber < 0)
152 thisp->trlnumber = -thisp->trlnumber;
153 if (thisp->trlnumber != 0)
154 fprintf(stderr, "\n AT LINE: %ld\n", (long)thisp->trlnumber);
161 void raise_signal(word signal, word skip, word *ahnew, word *amnew)
163 word t1, t2, t3, t4, t5, virts;
166 /* handler for others = no */
169 t2 = M[display2 + M[c1 + PROTNUM]];
172 /* flag handler not found */
175 /* prototype of current */
176 ptr = prototype[M[t3 + PROTNUM]];
177 t4 = ptr->handlerlist;
184 if (t5 == 0 && t1 == 0)
188 } while (t5 != signal && t4 != 0);
190 /* look in DL or SL */
192 /* handler for others found */
197 if (ptr->kind == HANDLER) {
198 /* use SL for handlers */
201 /* or DL for other goodies */
204 /* handler not found */
207 if (signal <= MAXSYSSN) {
222 } while (t1 == 0 && t5 != signal);
224 virts = thisp->prochead + M[thisp->prochead] + VIRTSC;
225 /* compactification possible */
227 M[virts + 1] = M[t2 + 1];
228 /* prototype number of handler */
230 t5 = prototype[t3]->appetite;
233 request(t5, ahnew, amnew);
234 M[*amnew + M[*amnew] + SIGNR] = 0;
236 if (signal == scot[RTEMEMOV] &&
237 thisp->lastitem - thisp->lastused-1 < t5) {
238 /* make memov look like abort */
242 request(t5, ahnew, amnew);
243 M[*amnew + M[*amnew] + SIGNR] = signal;
245 /* provide system attributes */
246 M[*amnew + PROTNUM] = t3;
247 t5 = *amnew + M[*amnew];
248 M[t5 + SL] = M[virts];
249 M[t5 + SL + 1] = M[virts + 1];
251 t2 = M[display2 + M[c1 + PROTNUM]];
253 M[t5 + DL + 1] = M[t2 + 1];
265 /* am of handlers' SL */
266 t1 = M[M[c1 + M[c1] + SL]];
271 t2 = M[M[t2 + M[t2] + DL]];
274 M[t2 + M[t2] + LSC] = prototype[M[t2 + PROTNUM]]->lastwill;
276 back(&thisp->backobj, &M[ temporary ], (word) 0);
283 /* am of handlers' SL */
284 t1 = M[M[c1 + M[c1] + SL]];
285 M[t1 + M[t1] + LSC] = prototype[M[t1 + PROTNUM]]->lastwill;
290 * This wraps up the above series of the handler procedures.
293 void backhd(virtaddr *virt, word *am)
295 if (M[c1 + M[c1] + SIGNR] <= MAXSYSSN) {
300 back(virt, am, (word) 0);