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