1751Speter /* Copyright (c) 1979 Regents of the University of California */ 2751Speter 3*15228Sthien #ifndef lint 4*15228Sthien static char sccsid[] = "@(#)error.c 1.5 10/14/83"; 5*15228Sthien #endif 6751Speter 7751Speter #include "whoami.h" 8751Speter #include "0.h" 9751Speter #ifndef PI1 10*15228Sthien #include "tree_ty.h" /* must be included for yy.h */ 11751Speter #include "yy.h" 12751Speter #endif 13751Speter 14751Speter char errpfx = 'E'; 15751Speter extern int yyline; 16751Speter /* 17751Speter * Panic is called when impossible 18751Speter * (supposedly, anyways) situations 19751Speter * are encountered. 20751Speter * Panic messages should be short 21751Speter * as they do not go to the message 22751Speter * file. 23751Speter */ 24751Speter panic(s) 25751Speter char *s; 26751Speter { 27751Speter 28751Speter #ifdef DEBUG 29751Speter #ifdef PI1 30751Speter printf("Snark (%s) line=%d\n", s, line); 31751Speter abort(); 32751Speter #else 33751Speter printf("Snark (%s) line=%d, yyline=%d\n", s, line, yyline); 34751Speter abort () ; /* die horribly */ 35751Speter #endif 36751Speter #endif 37751Speter #ifdef PI1 38751Speter Perror( "Snark in pi1", s); 39751Speter #else 40751Speter Perror( "Snark in pi", s); 41751Speter #endif 42751Speter pexit(DIED); 43751Speter } 44751Speter 45751Speter /* 46751Speter * Error is called for 47751Speter * semantic errors and 48751Speter * prints the error and 49751Speter * a line number. 50751Speter */ 51751Speter 52*15228Sthien /*VARARGS1*/ 53751Speter 543298Smckusic error(a1, a2, a3, a4, a5) 55751Speter register char *a1; 56751Speter { 57751Speter char errbuf[256]; /* was extern. why? ...pbk */ 58751Speter register int i; 59751Speter 60751Speter if (errpfx == 'w' && opt('w') != 0) { 61751Speter errpfx = 'E'; 62751Speter return; 63751Speter } 64*15228Sthien Enocascade = FALSE; 65*15228Sthien geterr((int) a1, errbuf); 66751Speter a1 = errbuf; 67751Speter if (line < 0) 68751Speter line = -line; 69751Speter #ifndef PI1 70751Speter if (opt('l')) 71751Speter yyoutline(); 72751Speter #endif 73751Speter yysetfile(filename); 74751Speter if (errpfx == ' ') { 75751Speter printf(" "); 76751Speter for (i = line; i >= 10; i /= 10) 77751Speter pchr( ' ' ); 78751Speter printf("... "); 79751Speter } else if (Enoline) 80751Speter printf(" %c - ", errpfx); 81751Speter else 82751Speter printf("%c %d - ", errpfx, line); 833298Smckusic printf(a1, a2, a3, a4, a5); 84751Speter if (errpfx == 'E') 85751Speter #ifndef PI0 863073Smckusic eflg = TRUE, codeoff(); 87751Speter #else 883073Smckusic eflg = TRUE; 89751Speter #endif 90751Speter errpfx = 'E'; 91751Speter if (Eholdnl) 92*15228Sthien Eholdnl = FALSE; 93751Speter else 94751Speter pchr( '\n' ); 95751Speter } 96751Speter 97*15228Sthien /*VARARGS1*/ 98751Speter 993298Smckusic cerror(a1, a2, a3, a4, a5) 100*15228Sthien char *a1; 101751Speter { 102751Speter 103751Speter if (Enocascade) 104751Speter return; 105751Speter setpfx(' '); 1063298Smckusic error(a1, a2, a3, a4, a5); 107751Speter } 108751Speter 109751Speter #ifdef PI1 110751Speter 111751Speter /*VARARGS*/ 112751Speter 1133298Smckusic derror(a1, a2, a3, a4, a5) 114*15228Sthien char *a1, *a2, *a3, *a4, *a5; 115751Speter { 116751Speter 117751Speter if (!holdderr) 1183298Smckusic error(a1, a2, a3, a4, a5); 119751Speter errpfx = 'E'; 120751Speter } 121751Speter 122751Speter char *lastname, printed, hadsome; 123751Speter 124751Speter /* 125751Speter * this yysetfile for PI1 only. 126751Speter * the real yysetfile is in yyput.c 127751Speter */ 128751Speter yysetfile(name) 129751Speter char *name; 130751Speter { 131751Speter 132751Speter if (lastname == name) 133751Speter return; 134751Speter printed =| 1; 135751Speter gettime( name ); 136751Speter printf("%s %s:\n" , myctime( &tvec ) , name ); 137751Speter lastname = name; 138751Speter } 139751Speter #endif 140