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

unix.superglobalmegacorp.com

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