Annotation of coherent/g/usr/bin/me/error.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Micro-EMACS extension for MWC -- Search for next/previous error in
        !             3:  * error buffer.  This module must "know" the format of each type of
        !             4:  * error message produced by the compiler that the error message is
        !             5:  * generated by.
        !             6:  */
        !             7: 
        !             8: #include       <stdio.h>
        !             9: #include       "ed.h"
        !            10: 
        !            11: /*
        !            12:  * Find a window associated with the buffer list.
        !            13:  */
        !            14: 
        !            15: WINDOW *
        !            16: wfind(bp)
        !            17: BUFFER *bp;
        !            18: {
        !            19:        register WINDOW *wp;
        !            20: 
        !            21:        wp = wheadp;
        !            22:        while (wp != NULL) {
        !            23:                if (wp->w_bufp == bp)
        !            24:                        return wp;
        !            25:                wp = wp->w_wndp;
        !            26:        }
        !            27:        return NULL;
        !            28: }
        !            29: 
        !            30: /*
        !            31:  * Search forward in the error buffer for an error message.
        !            32:  */
        !            33: 
        !            34: forwerr(dir)
        !            35: {
        !            36:        register LINE   *lp;
        !            37:        register WINDOW *wp;
        !            38:        register uchar  *tp;
        !            39:        register int    c;
        !            40:        register int    error_line;
        !            41:        uchar           error_text[81];
        !            42:        uchar           *et;
        !            43: 
        !            44:        if ((wp = wfind(errbp)) == NULL)
        !            45:                return FALSE;
        !            46: 
        !            47:        error_line = 0;
        !            48:        lp = wp->w_dotp;
        !            49:        if (wp->w_doto)
        !            50:                lp = dir ? lback(lp) : lforw(lp);
        !            51: 
        !            52:        for (; lp != errbp->b_linep; lp = dir ? lback(lp) : lforw(lp)) {
        !            53:                int len, prev;
        !            54: 
        !            55:                tp = lp->l_text;
        !            56:                for (len = llength(lp), prev = '(';
        !            57:                    len && ((*tp < '0') || (*tp > '9') || (prev != '('));
        !            58:                    prev = *tp++, len--)
        !            59:                        ;
        !            60:                while (len-- && ((c = *tp++ - '0') >= 0) && (c <= 9)) {
        !            61:                        error_line *= 10;
        !            62:                        error_line += c;
        !            63:                }
        !            64:                if (!error_line)
        !            65:                        continue;
        !            66:                et = error_text;
        !            67:                while ((len-- > 0) && ((*et++ = *tp++) != 0)) {
        !            68:                        if ((et - error_text) > (term.t_ncol - 15))
        !            69:                                break;
        !            70:                }
        !            71:                *et = 0;
        !            72:                mlwrite("[%d:%s]",error_line, error_text);
        !            73:                break;
        !            74:        }
        !            75: 
        !            76:        if (!error_line) {
        !            77:                mlwrite("[No more errors.]");
        !            78:                return FALSE;
        !            79:        }
        !            80: 
        !            81:        wp->w_dotp = lp;                /* set dot to this line */
        !            82:        wp->w_doto = 1;
        !            83:        wp->w_force = 1;
        !            84:        wp->w_flag |= WFFORCE | WFMOVE;
        !            85:        gotofline(TRUE, error_line);
        !            86:        return TRUE;
        !            87: }
        !            88: 
        !            89: /*
        !            90:  * Make sure we have an error window.
        !            91:  */
        !            92: 
        !            93: errwind()
        !            94: {
        !            95:        register BUFFER *bp;
        !            96:        register BUFFER *obp;
        !            97:        register WINDOW *wp;
        !            98:        register int    r;
        !            99: 
        !           100:        if ((runswitch & CF_ERROR) == 0) {
        !           101:                mlwrite("[no error buffer]");
        !           102:                return FALSE;
        !           103:        }
        !           104: 
        !           105:        if ((bp = errbp) == NULL) {
        !           106:                mlwrite( "[No error buffer]" );
        !           107:                return FALSE;
        !           108:        }
        !           109: 
        !           110:        if (bp->b_nwnd == 0) {                  /* If this buffer is not */
        !           111:                if ((wp=wpopup()) == NULL) {    /* in a window, display it */
        !           112:                        mlwrite("[Can't open window for error buffer]");
        !           113:                        return FALSE;
        !           114:                }
        !           115:                obp = wp->w_bufp;               /* Get the old buffer ptr */
        !           116:                if (--obp->b_nwnd == 0) {
        !           117:                        obp->b_dotp  = wp->w_dotp;
        !           118:                        obp->b_doto  = wp->w_doto;
        !           119:                        obp->b_markp = wp->w_markp;
        !           120:                        obp->b_marko = wp->w_marko;
        !           121:                }
        !           122:                wp->w_bufp = bp;
        !           123:                ++bp->b_nwnd;
        !           124:                wp->w_linep = lback(bp->b_dotp);
        !           125:                wp->w_dotp  = bp->b_dotp;
        !           126:                wp->w_doto  = bp->b_doto;
        !           127:                wp->w_markp = bp->b_markp;
        !           128:                wp->w_marko = bp->b_marko;
        !           129:                wp->w_flag |= WFMODE|WFHARD;
        !           130:                if ((r = wp->w_ntrows - ERRLINES) > 0) {
        !           131:                        BUFFER *owp;
        !           132: 
        !           133:                        owp = curwp;
        !           134:                        curwp = wp;
        !           135:                        shrinkwind(0,r);
        !           136:                        curwp = owp;
        !           137:                }
        !           138: 
        !           139:        }
        !           140:        return TRUE;
        !           141: }
        !           142: 
        !           143: /*
        !           144:  * Find the next error line in the error file.
        !           145:  */
        !           146: nexterr(f,n)
        !           147: {
        !           148:        if (n < 0)
        !           149:                return preverr(f, -n);
        !           150: 
        !           151:        if (errwind() == FALSE)
        !           152:                return FALSE;
        !           153: 
        !           154:        return forwerr(0);
        !           155: }
        !           156: 
        !           157: /*
        !           158:  * Find the previous error line in the error buffer.
        !           159:  */
        !           160: preverr(f,n)
        !           161: {
        !           162:        if (n < 0)
        !           163:                return nexterr(f, -n);
        !           164: 
        !           165:        if (errwind() == FALSE)
        !           166:                return FALSE;
        !           167: 
        !           168:        return forwerr(-1);
        !           169: }
        !           170: 
        !           171: /*
        !           172:  * Read in the error file, giving it a buffer.
        !           173:  */
        !           174: readerr()
        !           175: {
        !           176:        register BUFFER *bp;
        !           177:        uchar   bname[NBUFN];
        !           178: 
        !           179:        makename(bname, "error-buffer");        /* New buffer name.     */
        !           180: #if    GEM
        !           181:        fixname(bname);
        !           182:        fixname(errfile);
        !           183: #endif
        !           184:        if ((errbp = bp = bfind(bname, TRUE, 0)) == NULL) {
        !           185:                mlwrite("Cannot create error buffer");
        !           186:                return (FALSE);
        !           187:        }
        !           188:        if (--curbp->b_nwnd == 0) {             /* Undisplay.           */
        !           189:                curbp->b_dotp = curwp->w_dotp;
        !           190:                curbp->b_doto = curwp->w_doto;
        !           191:                curbp->b_markp = curwp->w_markp;
        !           192:                curbp->b_marko = curwp->w_marko;
        !           193:        }
        !           194:        bp->b_flag |= BFNOWRT|BFERROR;          /* Mark the buffer...   */
        !           195:        curbp = bp;                             /* Switch to it.        */
        !           196:        curwp->w_bufp = bp;
        !           197:        curbp->b_nwnd++;
        !           198:        return (readin(errfile));               /* Read it in.          */
        !           199: }

unix.superglobalmegacorp.com

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