1*22162Sdist /* 2*22162Sdist * Copyright (c) 1980 Regents of the University of California. 3*22162Sdist * All rights reserved. The Berkeley software License Agreement 4*22162Sdist * specifies the terms and conditions for redistribution. 5*22162Sdist */ 6751Speter 715228Sthien #ifndef lint 8*22162Sdist static char sccsid[] = "@(#)error.c 5.1 (Berkeley) 06/05/85"; 9*22162Sdist #endif not lint 10751Speter 11751Speter #include "whoami.h" 12751Speter #include "0.h" 13751Speter #ifndef PI1 1415228Sthien #include "tree_ty.h" /* must be included for yy.h */ 15751Speter #include "yy.h" 16751Speter #endif 17751Speter 18751Speter char errpfx = 'E'; 19751Speter extern int yyline; 20751Speter /* 21751Speter * Panic is called when impossible 22751Speter * (supposedly, anyways) situations 23751Speter * are encountered. 24751Speter * Panic messages should be short 25751Speter * as they do not go to the message 26751Speter * file. 27751Speter */ 28751Speter panic(s) 29751Speter char *s; 30751Speter { 31751Speter 32751Speter #ifdef DEBUG 33751Speter #ifdef PI1 34751Speter printf("Snark (%s) line=%d\n", s, line); 35751Speter abort(); 36751Speter #else 37751Speter printf("Snark (%s) line=%d, yyline=%d\n", s, line, yyline); 38751Speter abort () ; /* die horribly */ 39751Speter #endif 40751Speter #endif 41751Speter #ifdef PI1 42751Speter Perror( "Snark in pi1", s); 43751Speter #else 44751Speter Perror( "Snark in pi", s); 45751Speter #endif 46751Speter pexit(DIED); 47751Speter } 48751Speter 49751Speter /* 50751Speter * Error is called for 51751Speter * semantic errors and 52751Speter * prints the error and 53751Speter * a line number. 54751Speter */ 55751Speter 5615228Sthien /*VARARGS1*/ 57751Speter 583298Smckusic error(a1, a2, a3, a4, a5) 59751Speter register char *a1; 60751Speter { 61751Speter char errbuf[256]; /* was extern. why? ...pbk */ 62751Speter register int i; 63751Speter 64751Speter if (errpfx == 'w' && opt('w') != 0) { 65751Speter errpfx = 'E'; 66751Speter return; 67751Speter } 6815228Sthien Enocascade = FALSE; 6915228Sthien geterr((int) a1, errbuf); 70751Speter a1 = errbuf; 71751Speter if (line < 0) 72751Speter line = -line; 73751Speter #ifndef PI1 74751Speter if (opt('l')) 75751Speter yyoutline(); 76751Speter #endif 77751Speter yysetfile(filename); 78751Speter if (errpfx == ' ') { 79751Speter printf(" "); 80751Speter for (i = line; i >= 10; i /= 10) 81751Speter pchr( ' ' ); 82751Speter printf("... "); 83751Speter } else if (Enoline) 84751Speter printf(" %c - ", errpfx); 85751Speter else 86751Speter printf("%c %d - ", errpfx, line); 873298Smckusic printf(a1, a2, a3, a4, a5); 88751Speter if (errpfx == 'E') 89751Speter #ifndef PI0 903073Smckusic eflg = TRUE, codeoff(); 91751Speter #else 923073Smckusic eflg = TRUE; 93751Speter #endif 94751Speter errpfx = 'E'; 95751Speter if (Eholdnl) 9615228Sthien Eholdnl = FALSE; 97751Speter else 98751Speter pchr( '\n' ); 99751Speter } 100751Speter 10115228Sthien /*VARARGS1*/ 102751Speter 1033298Smckusic cerror(a1, a2, a3, a4, a5) 10415228Sthien char *a1; 105751Speter { 106751Speter 107751Speter if (Enocascade) 108751Speter return; 109751Speter setpfx(' '); 1103298Smckusic error(a1, a2, a3, a4, a5); 111751Speter } 112751Speter 113751Speter #ifdef PI1 114751Speter 115751Speter /*VARARGS*/ 116751Speter 1173298Smckusic derror(a1, a2, a3, a4, a5) 11815228Sthien char *a1, *a2, *a3, *a4, *a5; 119751Speter { 120751Speter 121751Speter if (!holdderr) 1223298Smckusic error(a1, a2, a3, a4, a5); 123751Speter errpfx = 'E'; 124751Speter } 125751Speter 126751Speter char *lastname, printed, hadsome; 127751Speter 128751Speter /* 129751Speter * this yysetfile for PI1 only. 130751Speter * the real yysetfile is in yyput.c 131751Speter */ 132751Speter yysetfile(name) 133751Speter char *name; 134751Speter { 135751Speter 136751Speter if (lastname == name) 137751Speter return; 138751Speter printed =| 1; 139751Speter gettime( name ); 140751Speter printf("%s %s:\n" , myctime( &tvec ) , name ); 141751Speter lastname = name; 142751Speter } 143751Speter #endif 144