Annotation of 43BSDReno/pgrm/pascal/src/error.c, revision 1.1.1.1

1.1       root        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/4/87";
                      9: #endif not lint
                     10: 
                     11: #include "whoami.h"
                     12: #include "0.h"
                     13: #ifndef PI1
                     14: #include "tree_ty.h"           /* must be included for yy.h */
                     15: #include "yy.h"
                     16: #endif
                     17: 
                     18: char   errpfx  = 'E';
                     19: extern int yyline;
                     20: /*
                     21:  * Panic is called when impossible
                     22:  * (supposedly, anyways) situations
                     23:  * are encountered.
                     24:  * Panic messages should be short
                     25:  * as they do not go to the message
                     26:  * file.
                     27:  */
                     28: panic(s)
                     29:        char *s;
                     30: {
                     31: 
                     32: #ifdef DEBUG
                     33: #ifdef PI1
                     34:        printf("Snark (%s) line=%d\n", s, line);
                     35:        abort();
                     36: #else
                     37:        printf("Snark (%s) line=%d, yyline=%d\n", s, line, yyline);
                     38:        abort () ;      /* die horribly */
                     39: #endif
                     40: #endif
                     41: #ifdef PI1
                     42:        Perror( "Snark in pi1", s);
                     43: #else
                     44:        Perror( "Snark in pi", s);
                     45: #endif
                     46:        pexit(DIED);
                     47: }
                     48: 
                     49: /*
                     50:  * Error is called for
                     51:  * semantic errors and
                     52:  * prints the error and
                     53:  * a line number.
                     54:  */
                     55: 
                     56: /*VARARGS1*/
                     57: 
                     58: error(a1, a2, a3, a4, a5)
                     59:        register char *a1;
                     60: {
                     61:        char errbuf[256];               /* was extern. why? ...pbk */
                     62:        register int i;
                     63: 
                     64:        if (errpfx == 'w' && opt('w') != 0) {
                     65:                errpfx = 'E';
                     66:                return;
                     67:        }
                     68:        Enocascade = FALSE;
                     69:        geterr((int) a1, errbuf);
                     70:        a1 = errbuf;
                     71:        if (line < 0)
                     72:                line = -line;
                     73: #ifndef PI1
                     74:        if (opt('l'))
                     75:                yyoutline();
                     76: #endif
                     77:        yysetfile(filename);
                     78:        if (errpfx == ' ') {
                     79:                printf("  ");
                     80:                for (i = line; i >= 10; i /= 10)
                     81:                        pchr( ' ' );
                     82:                printf("... ");
                     83:        } else if (Enoline)
                     84:                printf("  %c - ", errpfx);
                     85:        else
                     86:                printf("%c %d - ", errpfx, line);
                     87:        printf(a1, a2, a3, a4, a5);
                     88:        if (errpfx == 'E')
                     89: #ifndef PI0
                     90:                eflg = TRUE, codeoff();
                     91: #else
                     92:                eflg = TRUE;
                     93: #endif
                     94:        errpfx = 'E';
                     95:        if (Eholdnl)
                     96:                Eholdnl = FALSE;
                     97:        else
                     98:                pchr( '\n' );
                     99: }
                    100: 
                    101: /*VARARGS1*/
                    102: 
                    103: cerror(a1, a2, a3, a4, a5)
                    104:     char *a1;
                    105: {
                    106: 
                    107:        if (Enocascade)
                    108:                return;
                    109:        setpfx(' ');
                    110:        error(a1, a2, a3, a4, a5);
                    111: }
                    112: 
                    113: #ifdef PI1
                    114: 
                    115: /*VARARGS*/
                    116: 
                    117: derror(a1, a2, a3, a4, a5)
                    118:     char *a1, *a2, *a3, *a4, *a5;
                    119: {
                    120: 
                    121:        if (!holdderr)
                    122:                error(a1, a2, a3, a4, a5);
                    123:        errpfx = 'E';
                    124: }
                    125: 
                    126: char   *lastname, printed, hadsome;
                    127: 
                    128:     /*
                    129:      * this yysetfile for PI1 only.
                    130:      * the real yysetfile is in yyput.c
                    131:      */
                    132: yysetfile(name)
                    133:        char *name;
                    134: {
                    135: 
                    136:        if (lastname == name)
                    137:                return;
                    138:        printed |= 1;
                    139:        gettime( name );
                    140:        printf("%s  %s:\n" , myctime( &tvec ) , name );
                    141:        lastname = name;
                    142: }
                    143: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.