1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #ifndef lint 8 static char sccsid[] = "@(#)error.c 5.2 (Berkeley) 12/04/87"; 9 #endif not lint 10 11 /* 12 * pi - Pascal interpreter code translator 13 * 14 * Charles Haley, Bill Joy UCB 15 * Version 1.2 January 1979 16 * 17 * 18 * pxp - Pascal execution profiler 19 * 20 * Bill Joy UCB 21 * Version 1.2 January 1979 22 */ 23 24 #include "whoami.h" 25 #include "0.h" 26 #include "yy.h" 27 28 #ifdef PXP 29 extern int yyline; 30 extern char errout; 31 #endif 32 33 char errpfx = 'E'; 34 extern int yyline; 35 /* 36 * Panic is called when impossible 37 * (supposedly, anyways) situations 38 * are encountered. 39 #ifdef PI 40 * Panic messages should be short 41 * as they do not go to the message 42 * file. 43 #endif 44 */ 45 panic(s) 46 char *s; 47 { 48 49 #ifdef DEBUG 50 fprintf(stderr, "Snark (%s) line=%d yyline=%d\n", s, line, yyline); 51 #endif 52 #ifdef PXP 53 Perror( "Snark in pxp", s); 54 #endif 55 #ifdef PI 56 Perror( "Snark in pi", s); 57 #endif 58 pexit(DIED); 59 } 60 61 extern char *errfile; 62 /* 63 * Error is called for 64 * semantic errors and 65 * prints the error and 66 * a line number. 67 */ 68 error(a1, a2, a3, a4) 69 { 70 #ifdef PI 71 char buf[256]; 72 register int i; 73 #endif 74 #ifdef PXP 75 /* 76 int ofout; 77 */ 78 #endif 79 80 if (errpfx == 'w' && opt('w') != 0) { 81 errpfx == 'E'; 82 return; 83 } 84 #ifdef PXP 85 /* 86 flush(); 87 ofout = fout[0]; 88 fout[0] = errout; 89 */ 90 #endif 91 #ifdef PI 92 Enocascade = 0; 93 geterr(a1, buf); 94 a1 = buf; 95 #endif 96 if (line < 0) 97 line = -line; 98 yySsync(); 99 yysetfile(filename); 100 #ifdef PI 101 if (errpfx == ' ') { 102 printf(" "); 103 for (i = line; i >= 10; i /= 10) 104 putchar(' '); 105 printf("... "); 106 } else if (Enoline) 107 printf(" %c - ", errpfx); 108 else 109 #endif 110 fprintf(stderr, "%c %d - ", errpfx, line); 111 fprintf(stderr, a1, a2, a3, a4); 112 if (errpfx == 'E') 113 #ifdef PI 114 eflg++, cgenflg++; 115 #endif 116 #ifdef PXP 117 eflg++; 118 #endif 119 errpfx = 'E'; 120 #ifdef PI 121 if (Eholdnl) 122 Eholdnl = 0; 123 else 124 #endif 125 putc('\n', stderr); 126 #ifdef PXP 127 /* 128 flush(); 129 fout[0] = ofout; 130 */ 131 #endif 132 } 133 134 #ifdef PI 135 cerror(a1, a2, a3, a4) 136 { 137 138 if (Enocascade) 139 return; 140 setpfx(' '); 141 error(a1, a2, a3, a4); 142 } 143 #endif 144