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