1*48116Sbostic /*- 2*48116Sbostic * Copyright (c) 1980 The Regents of the University of California. 3*48116Sbostic * All rights reserved. 4*48116Sbostic * 5*48116Sbostic * %sccs.include.redist.c% 622162Sdist */ 7751Speter 815228Sthien #ifndef lint 9*48116Sbostic static char sccsid[] = "@(#)error.c 5.3 (Berkeley) 04/16/91"; 10*48116Sbostic #endif /* not lint */ 11751Speter 12751Speter #include "whoami.h" 13751Speter #include "0.h" 14751Speter #ifndef PI1 1515228Sthien #include "tree_ty.h" /* must be included for yy.h */ 16751Speter #include "yy.h" 17751Speter #endif 18751Speter 19751Speter char errpfx = 'E'; 20751Speter extern int yyline; 21751Speter /* 22751Speter * Panic is called when impossible 23751Speter * (supposedly, anyways) situations 24751Speter * are encountered. 25751Speter * Panic messages should be short 26751Speter * as they do not go to the message 27751Speter * file. 28751Speter */ 29751Speter panic(s) 30751Speter char *s; 31751Speter { 32751Speter 33751Speter #ifdef DEBUG 34751Speter #ifdef PI1 35751Speter printf("Snark (%s) line=%d\n", s, line); 36751Speter abort(); 37751Speter #else 38751Speter printf("Snark (%s) line=%d, yyline=%d\n", s, line, yyline); 39751Speter abort () ; /* die horribly */ 40751Speter #endif 41751Speter #endif 42751Speter #ifdef PI1 43751Speter Perror( "Snark in pi1", s); 44751Speter #else 45751Speter Perror( "Snark in pi", s); 46751Speter #endif 47751Speter pexit(DIED); 48751Speter } 49751Speter 50751Speter /* 51751Speter * Error is called for 52751Speter * semantic errors and 53751Speter * prints the error and 54751Speter * a line number. 55751Speter */ 56751Speter 5715228Sthien /*VARARGS1*/ 58751Speter 593298Smckusic error(a1, a2, a3, a4, a5) 60751Speter register char *a1; 61751Speter { 62751Speter char errbuf[256]; /* was extern. why? ...pbk */ 63751Speter register int i; 64751Speter 65751Speter if (errpfx == 'w' && opt('w') != 0) { 66751Speter errpfx = 'E'; 67751Speter return; 68751Speter } 6915228Sthien Enocascade = FALSE; 7015228Sthien geterr((int) a1, errbuf); 71751Speter a1 = errbuf; 72751Speter if (line < 0) 73751Speter line = -line; 74751Speter #ifndef PI1 75751Speter if (opt('l')) 76751Speter yyoutline(); 77751Speter #endif 78751Speter yysetfile(filename); 79751Speter if (errpfx == ' ') { 80751Speter printf(" "); 81751Speter for (i = line; i >= 10; i /= 10) 82751Speter pchr( ' ' ); 83751Speter printf("... "); 84751Speter } else if (Enoline) 85751Speter printf(" %c - ", errpfx); 86751Speter else 87751Speter printf("%c %d - ", errpfx, line); 883298Smckusic printf(a1, a2, a3, a4, a5); 89751Speter if (errpfx == 'E') 90751Speter #ifndef PI0 913073Smckusic eflg = TRUE, codeoff(); 92751Speter #else 933073Smckusic eflg = TRUE; 94751Speter #endif 95751Speter errpfx = 'E'; 96751Speter if (Eholdnl) 9715228Sthien Eholdnl = FALSE; 98751Speter else 99751Speter pchr( '\n' ); 100751Speter } 101751Speter 10215228Sthien /*VARARGS1*/ 103751Speter 1043298Smckusic cerror(a1, a2, a3, a4, a5) 10515228Sthien char *a1; 106751Speter { 107751Speter 108751Speter if (Enocascade) 109751Speter return; 110751Speter setpfx(' '); 1113298Smckusic error(a1, a2, a3, a4, a5); 112751Speter } 113751Speter 114751Speter #ifdef PI1 115751Speter 116751Speter /*VARARGS*/ 117751Speter 1183298Smckusic derror(a1, a2, a3, a4, a5) 11915228Sthien char *a1, *a2, *a3, *a4, *a5; 120751Speter { 121751Speter 122751Speter if (!holdderr) 1233298Smckusic error(a1, a2, a3, a4, a5); 124751Speter errpfx = 'E'; 125751Speter } 126751Speter 127751Speter char *lastname, printed, hadsome; 128751Speter 129751Speter /* 130751Speter * this yysetfile for PI1 only. 131751Speter * the real yysetfile is in yyput.c 132751Speter */ 133751Speter yysetfile(name) 134751Speter char *name; 135751Speter { 136751Speter 137751Speter if (lastname == name) 138751Speter return; 13932764Sbostic printed |= 1; 140751Speter gettime( name ); 141751Speter printf("%s %s:\n" , myctime( &tvec ) , name ); 142751Speter lastname = name; 143751Speter } 144751Speter #endif 145