1*12391Speter static char *sccsid = "@(#)error.c 1.4 (Berkeley) 05/11/83"; 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 16*12391Speter #include "whoami.h" 172853Speter #include "0.h" 182853Speter #include "yy.h" 192853Speter 202853Speter #ifdef PXP 212853Speter extern int yyline; 222853Speter extern char errout; 232853Speter #endif 242853Speter 253050Smckusic char errpfx = 'E'; 262853Speter extern int yyline; 272853Speter /* 282853Speter * Panic is called when impossible 292853Speter * (supposedly, anyways) situations 302853Speter * are encountered. 312853Speter #ifdef PI 322853Speter * Panic messages should be short 332853Speter * as they do not go to the message 342853Speter * file. 352853Speter #endif 362853Speter */ 372853Speter panic(s) 382853Speter char *s; 392853Speter { 402853Speter 412853Speter #ifdef DEBUG 422853Speter fprintf(stderr, "Snark (%s) line=%d yyline=%d\n", s, line, yyline); 432853Speter #endif 442853Speter #ifdef PXP 452853Speter Perror( "Snark in pxp", s); 462853Speter #endif 472853Speter #ifdef PI 482853Speter Perror( "Snark in pi", s); 492853Speter #endif 502853Speter pexit(DIED); 512853Speter } 522853Speter 532853Speter extern char *errfile; 542853Speter /* 552853Speter * Error is called for 562853Speter * semantic errors and 572853Speter * prints the error and 582853Speter * a line number. 592853Speter */ 602853Speter error(a1, a2, a3, a4) 612853Speter { 622853Speter #ifdef PI 632853Speter char buf[256]; 642853Speter register int i; 652853Speter #endif 662853Speter #ifdef PXP 672853Speter /* 682853Speter int ofout; 692853Speter */ 702853Speter #endif 712853Speter 722913Speter if (errpfx == 'w' && opt('w') != 0) { 732913Speter errpfx == 'E'; 742853Speter return; 752913Speter } 762853Speter #ifdef PXP 772853Speter /* 782853Speter flush(); 792853Speter ofout = fout[0]; 802853Speter fout[0] = errout; 812853Speter */ 822853Speter #endif 832853Speter #ifdef PI 842853Speter Enocascade = 0; 852853Speter geterr(a1, buf); 862853Speter a1 = buf; 872853Speter #endif 882853Speter if (line < 0) 892853Speter line = -line; 902853Speter yySsync(); 912853Speter yysetfile(filename); 922853Speter #ifdef PI 932853Speter if (errpfx == ' ') { 942853Speter printf(" "); 952853Speter for (i = line; i >= 10; i =/ 10) 962853Speter putchar(' '); 972853Speter printf("... "); 982853Speter } else if (Enoline) 992853Speter printf(" %c - ", errpfx); 1002853Speter else 1012853Speter #endif 1022853Speter fprintf(stderr, "%c %d - ", errpfx, line); 1032853Speter fprintf(stderr, a1, a2, a3, a4); 1042853Speter if (errpfx == 'E') 1052853Speter #ifdef PI 1062853Speter eflg++, cgenflg++; 1072853Speter #endif 1082853Speter #ifdef PXP 1092853Speter eflg++; 1102853Speter #endif 1112853Speter errpfx = 'E'; 1122853Speter #ifdef PI 1132853Speter if (Eholdnl) 1142853Speter Eholdnl = 0; 1152853Speter else 1162853Speter #endif 1172853Speter putc('\n', stderr); 1182853Speter #ifdef PXP 1192853Speter /* 1202853Speter flush(); 1212853Speter fout[0] = ofout; 1222853Speter */ 1232853Speter #endif 1242853Speter } 1252853Speter 1262853Speter #ifdef PI 1272853Speter cerror(a1, a2, a3, a4) 1282853Speter { 1292853Speter 1302853Speter if (Enocascade) 1312853Speter return; 1322853Speter setpfx(' '); 1332853Speter error(a1, a2, a3, a4); 1342853Speter } 1352853Speter #endif 136