Annotation of 43BSD/ucb/pascal/pdx/mappings/srcline.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[] = "@(#)srcline.c  5.1 (Berkeley) 6/6/85";
                      9: #endif not lint
                     10: /*
                     11:  * lookup the source line number nearest from below to an address
                     12:  */
                     13: 
                     14: #include "defs.h"
                     15: #include "mappings.h"
                     16: #include "object.h"
                     17: #include "linetab.h"
                     18: 
                     19: LINENO srcline(addr)
                     20: ADDRESS addr;
                     21: {
                     22:        register ADDRESS i, j, k;
                     23:        ADDRESS a;
                     24: 
                     25:        if (nlhdr.nlines == 0) {
                     26:                return(0);
                     27:        }
                     28:        i = 0;
                     29:        j = nlhdr.nlines - 1;
                     30:        if (addr <= linetab[i].addr) {
                     31:                return(linetab[i].line);
                     32:        } else if (addr >= linetab[j].addr) {
                     33:                return(linetab[j].line);
                     34:        }
                     35:        while (i <= j) {
                     36:                k = (i + j) / 2;
                     37:                if ((a = linetab[k].addr) == addr) {
                     38:                        return(linetab[k].line);
                     39:                } else if (addr > a) {
                     40:                        i = k+1;
                     41:                } else {
                     42:                        j = k-1;
                     43:                }
                     44:        }
                     45:        if (addr > linetab[i].addr) {
                     46:                return(linetab[i].line);
                     47:        } else {
                     48:                return(linetab[i-1].line);
                     49:        }
                     50:        /*NOTREACHED*/
                     51: }
                     52: 
                     53: /*
                     54:  * look for a line exactly corresponding to the given address
                     55:  */
                     56: 
                     57: LINENO linelookup(addr)
                     58: ADDRESS addr;
                     59: {
                     60:        register ADDRESS i, j, k;
                     61:        ADDRESS a;
                     62: 
                     63:        if (nlhdr.nlines == 0 || addr < linetab[0].addr) {
                     64:                return(0);
                     65:        }
                     66:        i = 0;
                     67:        j = nlhdr.nlines - 1;
                     68:        while (i <= j) {
                     69:                k = (i + j) / 2;
                     70:                if ((a = linetab[k].addr) == addr) {
                     71:                        return(linetab[k].line);
                     72:                } else if (addr > a) {
                     73:                        i = k+1;
                     74:                } else {
                     75:                        j = k-1;
                     76:                }
                     77:        }
                     78:        return(0);
                     79: }

unix.superglobalmegacorp.com

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