1*2853Speter static char *sccsid = "@(#)error.c 1.1 (Berkeley) 03/02/81"; 2*2853Speter /* Copyright (c) 1979 Regents of the University of California */ 3*2853Speter /* 4*2853Speter * pi - Pascal interpreter code translator 5*2853Speter * 6*2853Speter * Charles Haley, Bill Joy UCB 7*2853Speter * Version 1.2 January 1979 8*2853Speter * 9*2853Speter * 10*2853Speter * pxp - Pascal execution profiler 11*2853Speter * 12*2853Speter * Bill Joy UCB 13*2853Speter * Version 1.2 January 1979 14*2853Speter */ 15*2853Speter 16*2853Speter #include "0.h" 17*2853Speter #include "yy.h" 18*2853Speter 19*2853Speter #ifdef PXP 20*2853Speter extern int yyline; 21*2853Speter extern char errout; 22*2853Speter #endif 23*2853Speter 24*2853Speter char errpfx 'E'; 25*2853Speter extern int yyline; 26*2853Speter /* 27*2853Speter * Panic is called when impossible 28*2853Speter * (supposedly, anyways) situations 29*2853Speter * are encountered. 30*2853Speter #ifdef PI 31*2853Speter * Panic messages should be short 32*2853Speter * as they do not go to the message 33*2853Speter * file. 34*2853Speter #endif 35*2853Speter */ 36*2853Speter panic(s) 37*2853Speter char *s; 38*2853Speter { 39*2853Speter 40*2853Speter #ifdef DEBUG 41*2853Speter fprintf(stderr, "Snark (%s) line=%d yyline=%d\n", s, line, yyline); 42*2853Speter #endif 43*2853Speter #ifdef PXP 44*2853Speter Perror( "Snark in pxp", s); 45*2853Speter #endif 46*2853Speter #ifdef PI 47*2853Speter Perror( "Snark in pi", s); 48*2853Speter #endif 49*2853Speter pexit(DIED); 50*2853Speter } 51*2853Speter 52*2853Speter extern char *errfile; 53*2853Speter /* 54*2853Speter * Error is called for 55*2853Speter * semantic errors and 56*2853Speter * prints the error and 57*2853Speter * a line number. 58*2853Speter */ 59*2853Speter error(a1, a2, a3, a4) 60*2853Speter { 61*2853Speter #ifdef PI 62*2853Speter char buf[256]; 63*2853Speter register int i; 64*2853Speter #endif 65*2853Speter #ifdef PXP 66*2853Speter /* 67*2853Speter int ofout; 68*2853Speter */ 69*2853Speter #endif 70*2853Speter 71*2853Speter if (errpfx == 'w' && opt('w') != 0) 72*2853Speter return; 73*2853Speter #ifdef PXP 74*2853Speter /* 75*2853Speter flush(); 76*2853Speter ofout = fout[0]; 77*2853Speter fout[0] = errout; 78*2853Speter */ 79*2853Speter #endif 80*2853Speter #ifdef PI 81*2853Speter Enocascade = 0; 82*2853Speter geterr(a1, buf); 83*2853Speter a1 = buf; 84*2853Speter #endif 85*2853Speter if (line < 0) 86*2853Speter line = -line; 87*2853Speter yySsync(); 88*2853Speter yysetfile(filename); 89*2853Speter #ifdef PI 90*2853Speter if (errpfx == ' ') { 91*2853Speter printf(" "); 92*2853Speter for (i = line; i >= 10; i =/ 10) 93*2853Speter putchar(' '); 94*2853Speter printf("... "); 95*2853Speter } else if (Enoline) 96*2853Speter printf(" %c - ", errpfx); 97*2853Speter else 98*2853Speter #endif 99*2853Speter fprintf(stderr, "%c %d - ", errpfx, line); 100*2853Speter fprintf(stderr, a1, a2, a3, a4); 101*2853Speter if (errpfx == 'E') 102*2853Speter #ifdef PI 103*2853Speter eflg++, cgenflg++; 104*2853Speter #endif 105*2853Speter #ifdef PXP 106*2853Speter eflg++; 107*2853Speter #endif 108*2853Speter errpfx = 'E'; 109*2853Speter #ifdef PI 110*2853Speter if (Eholdnl) 111*2853Speter Eholdnl = 0; 112*2853Speter else 113*2853Speter #endif 114*2853Speter putc('\n', stderr); 115*2853Speter #ifdef PXP 116*2853Speter /* 117*2853Speter flush(); 118*2853Speter fout[0] = ofout; 119*2853Speter */ 120*2853Speter #endif 121*2853Speter } 122*2853Speter 123*2853Speter #ifdef PI 124*2853Speter cerror(a1, a2, a3, a4) 125*2853Speter { 126*2853Speter 127*2853Speter if (Enocascade) 128*2853Speter return; 129*2853Speter setpfx(' '); 130*2853Speter error(a1, a2, a3, a4); 131*2853Speter } 132*2853Speter #endif 133