1*751Speter /* Copyright (c) 1979 Regents of the University of California */ 2*751Speter 3*751Speter static char sccsid[] = "@(#)error.c 1.1 08/27/80"; 4*751Speter 5*751Speter #include "whoami.h" 6*751Speter #include "0.h" 7*751Speter #ifndef PI1 8*751Speter #include "yy.h" 9*751Speter #endif 10*751Speter 11*751Speter char errpfx = 'E'; 12*751Speter extern int yyline; 13*751Speter /* 14*751Speter * Panic is called when impossible 15*751Speter * (supposedly, anyways) situations 16*751Speter * are encountered. 17*751Speter * Panic messages should be short 18*751Speter * as they do not go to the message 19*751Speter * file. 20*751Speter */ 21*751Speter panic(s) 22*751Speter char *s; 23*751Speter { 24*751Speter 25*751Speter #ifdef DEBUG 26*751Speter #ifdef PI1 27*751Speter printf("Snark (%s) line=%d\n", s, line); 28*751Speter abort(); 29*751Speter #else 30*751Speter printf("Snark (%s) line=%d, yyline=%d\n", s, line, yyline); 31*751Speter abort () ; /* die horribly */ 32*751Speter #endif 33*751Speter #endif 34*751Speter #ifdef PI1 35*751Speter Perror( "Snark in pi1", s); 36*751Speter #else 37*751Speter Perror( "Snark in pi", s); 38*751Speter #endif 39*751Speter pexit(DIED); 40*751Speter } 41*751Speter 42*751Speter extern char *errfile; 43*751Speter /* 44*751Speter * Error is called for 45*751Speter * semantic errors and 46*751Speter * prints the error and 47*751Speter * a line number. 48*751Speter */ 49*751Speter 50*751Speter /*VARARGS*/ 51*751Speter 52*751Speter error(a1, a2, a3, a4) 53*751Speter register char *a1; 54*751Speter { 55*751Speter char errbuf[256]; /* was extern. why? ...pbk */ 56*751Speter register int i; 57*751Speter 58*751Speter if (errpfx == 'w' && opt('w') != 0) { 59*751Speter errpfx = 'E'; 60*751Speter return; 61*751Speter } 62*751Speter Enocascade = 0; 63*751Speter geterr(a1, errbuf); 64*751Speter a1 = errbuf; 65*751Speter if (line < 0) 66*751Speter line = -line; 67*751Speter #ifndef PI1 68*751Speter if (opt('l')) 69*751Speter yyoutline(); 70*751Speter #endif 71*751Speter yysetfile(filename); 72*751Speter if (errpfx == ' ') { 73*751Speter printf(" "); 74*751Speter for (i = line; i >= 10; i /= 10) 75*751Speter pchr( ' ' ); 76*751Speter printf("... "); 77*751Speter } else if (Enoline) 78*751Speter printf(" %c - ", errpfx); 79*751Speter else 80*751Speter printf("%c %d - ", errpfx, line); 81*751Speter printf(a1, a2, a3, a4); 82*751Speter if (errpfx == 'E') 83*751Speter #ifndef PI0 84*751Speter eflg++, codeoff(); 85*751Speter #else 86*751Speter eflg++; 87*751Speter #endif 88*751Speter errpfx = 'E'; 89*751Speter if (Eholdnl) 90*751Speter Eholdnl = 0; 91*751Speter else 92*751Speter pchr( '\n' ); 93*751Speter } 94*751Speter 95*751Speter /*VARAGRS*/ 96*751Speter 97*751Speter cerror(a1, a2, a3, a4) 98*751Speter { 99*751Speter 100*751Speter if (Enocascade) 101*751Speter return; 102*751Speter setpfx(' '); 103*751Speter error(a1, a2, a3, a4); 104*751Speter } 105*751Speter 106*751Speter #ifdef PI1 107*751Speter 108*751Speter /*VARARGS*/ 109*751Speter 110*751Speter derror(a1, a2, a3, a4) 111*751Speter { 112*751Speter 113*751Speter if (!holdderr) 114*751Speter error(a1, a2, a3, a4); 115*751Speter errpfx = 'E'; 116*751Speter } 117*751Speter 118*751Speter char *lastname, printed, hadsome; 119*751Speter 120*751Speter /* 121*751Speter * this yysetfile for PI1 only. 122*751Speter * the real yysetfile is in yyput.c 123*751Speter */ 124*751Speter yysetfile(name) 125*751Speter char *name; 126*751Speter { 127*751Speter 128*751Speter if (lastname == name) 129*751Speter return; 130*751Speter printed =| 1; 131*751Speter gettime( name ); 132*751Speter printf("%s %s:\n" , myctime( &tvec ) , name ); 133*751Speter lastname = name; 134*751Speter } 135*751Speter #endif 136