1*2913Speter static char *sccsid = "@(#)error.c 1.2 (Berkeley) 03/05/81"; 22853Speter /* Copyright (c) 1979 Regents of the University of California */ 32853Speter /* 42853Speter * pi - Pascal interpreter code translator 52853Speter * 62853Speter * Charles Haley, Bill Joy UCB 72853Speter * Version 1.2 January 1979 82853Speter * 92853Speter * 102853Speter * pxp - Pascal execution profiler 112853Speter * 122853Speter * Bill Joy UCB 132853Speter * Version 1.2 January 1979 142853Speter */ 152853Speter 162853Speter #include "0.h" 172853Speter #include "yy.h" 182853Speter 192853Speter #ifdef PXP 202853Speter extern int yyline; 212853Speter extern char errout; 222853Speter #endif 232853Speter 242853Speter char errpfx 'E'; 252853Speter extern int yyline; 262853Speter /* 272853Speter * Panic is called when impossible 282853Speter * (supposedly, anyways) situations 292853Speter * are encountered. 302853Speter #ifdef PI 312853Speter * Panic messages should be short 322853Speter * as they do not go to the message 332853Speter * file. 342853Speter #endif 352853Speter */ 362853Speter panic(s) 372853Speter char *s; 382853Speter { 392853Speter 402853Speter #ifdef DEBUG 412853Speter fprintf(stderr, "Snark (%s) line=%d yyline=%d\n", s, line, yyline); 422853Speter #endif 432853Speter #ifdef PXP 442853Speter Perror( "Snark in pxp", s); 452853Speter #endif 462853Speter #ifdef PI 472853Speter Perror( "Snark in pi", s); 482853Speter #endif 492853Speter pexit(DIED); 502853Speter } 512853Speter 522853Speter extern char *errfile; 532853Speter /* 542853Speter * Error is called for 552853Speter * semantic errors and 562853Speter * prints the error and 572853Speter * a line number. 582853Speter */ 592853Speter error(a1, a2, a3, a4) 602853Speter { 612853Speter #ifdef PI 622853Speter char buf[256]; 632853Speter register int i; 642853Speter #endif 652853Speter #ifdef PXP 662853Speter /* 672853Speter int ofout; 682853Speter */ 692853Speter #endif 702853Speter 71*2913Speter if (errpfx == 'w' && opt('w') != 0) { 72*2913Speter errpfx == 'E'; 732853Speter return; 74*2913Speter } 752853Speter #ifdef PXP 762853Speter /* 772853Speter flush(); 782853Speter ofout = fout[0]; 792853Speter fout[0] = errout; 802853Speter */ 812853Speter #endif 822853Speter #ifdef PI 832853Speter Enocascade = 0; 842853Speter geterr(a1, buf); 852853Speter a1 = buf; 862853Speter #endif 872853Speter if (line < 0) 882853Speter line = -line; 892853Speter yySsync(); 902853Speter yysetfile(filename); 912853Speter #ifdef PI 922853Speter if (errpfx == ' ') { 932853Speter printf(" "); 942853Speter for (i = line; i >= 10; i =/ 10) 952853Speter putchar(' '); 962853Speter printf("... "); 972853Speter } else if (Enoline) 982853Speter printf(" %c - ", errpfx); 992853Speter else 1002853Speter #endif 1012853Speter fprintf(stderr, "%c %d - ", errpfx, line); 1022853Speter fprintf(stderr, a1, a2, a3, a4); 1032853Speter if (errpfx == 'E') 1042853Speter #ifdef PI 1052853Speter eflg++, cgenflg++; 1062853Speter #endif 1072853Speter #ifdef PXP 1082853Speter eflg++; 1092853Speter #endif 1102853Speter errpfx = 'E'; 1112853Speter #ifdef PI 1122853Speter if (Eholdnl) 1132853Speter Eholdnl = 0; 1142853Speter else 1152853Speter #endif 1162853Speter putc('\n', stderr); 1172853Speter #ifdef PXP 1182853Speter /* 1192853Speter flush(); 1202853Speter fout[0] = ofout; 1212853Speter */ 1222853Speter #endif 1232853Speter } 1242853Speter 1252853Speter #ifdef PI 1262853Speter cerror(a1, a2, a3, a4) 1272853Speter { 1282853Speter 1292853Speter if (Enocascade) 1302853Speter return; 1312853Speter setpfx(' '); 1322853Speter error(a1, a2, a3, a4); 1332853Speter } 1342853Speter #endif 135