1 /* Copyright (c) 1982 Regents of the University of California */ 2 3 static char sccsid[] = "@(#)objaddr.c 1.2 02/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 } 57