|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.