Annotation of 42BSD/ucb/pascal/pdx/mappings/objaddr.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1982 Regents of the University of California */
                      2: 
                      3: static char sccsid[] = "@(#)objaddr.c 1.2 2/17/82";
                      4: 
                      5: /*
                      6:  * Lookup the object address of a given line from the named file.
                      7:  *
                      8:  * Potentially all files in the file table need to be checked
                      9:  * until the line is found since a particular file name may appear
                     10:  * more than once in the file table (caused by includes).
                     11:  */
                     12: 
                     13: #include "defs.h"
                     14: #include "mappings.h"
                     15: #include "object.h"
                     16: #include "source.h"
                     17: #include "filetab.h"
                     18: #include "linetab.h"
                     19: 
                     20: ADDRESS objaddr(line, name)
                     21: LINENO line;
                     22: char *name;
                     23: {
                     24:     register FILETAB *ftp;
                     25:     register LINENO i, j;
                     26:     BOOLEAN foundfile;
                     27: 
                     28:     if (nlhdr.nlines == 0) {
                     29:        return(-1);
                     30:     }
                     31:     if (name == NULL) {
                     32:        name = cursource;
                     33:     }
                     34:     foundfile = FALSE;
                     35:     for (ftp = &filetab[0]; ftp < &filetab[nlhdr.nfiles]; ftp++) {
                     36:        if (streq(ftp->filename, name)) {
                     37:            foundfile = TRUE;
                     38:            i = ftp->lineindex;
                     39:            if (ftp == &filetab[nlhdr.nfiles-1]) {
                     40:                j = nlhdr.nlines;
                     41:            } else {
                     42:                j = (ftp + 1)->lineindex;
                     43:            }
                     44:            while (i < j) {
                     45:                if (linetab[i].line == line) {
                     46:                    return linetab[i].addr;
                     47:                }
                     48:                i++;
                     49:            }
                     50:        }
                     51:     }
                     52:     if (!foundfile) {
                     53:        error("unknown source file \"%s\"", name);
                     54:     }
                     55:     return(-1);
                     56: }

unix.superglobalmegacorp.com

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