1*5494Slinton /* Copyright (c) 1982 Regents of the University of California */
2*5494Slinton 
3*5494Slinton static char sccsid[] = "@(#)objaddr.c 1.1 01/18/82";
4*5494Slinton 
5*5494Slinton /*
6*5494Slinton  * lookup the object address of a given line from the given file
7*5494Slinton  */
8*5494Slinton 
9*5494Slinton #include "defs.h"
10*5494Slinton #include "mappings.h"
11*5494Slinton #include "object.h"
12*5494Slinton #include "source.h"
13*5494Slinton #include "filetab.h"
14*5494Slinton #include "linetab.h"
15*5494Slinton 
16*5494Slinton ADDRESS objaddr(line, name)
17*5494Slinton LINENO line;
18*5494Slinton char *name;
19*5494Slinton {
20*5494Slinton 	register FILETAB *ftp;
21*5494Slinton 	register LINENO i, j;
22*5494Slinton 
23*5494Slinton 	if (nlhdr.nlines == 0) {
24*5494Slinton 		return(-1);
25*5494Slinton 	}
26*5494Slinton 	if (name == NULL) {
27*5494Slinton 		name = cursource;
28*5494Slinton 	}
29*5494Slinton 	for (ftp = &filetab[0]; ftp < &filetab[nlhdr.nfiles]; ftp++) {
30*5494Slinton 		if (strcmp(ftp->filename, name) == 0) {
31*5494Slinton 			break;
32*5494Slinton 		}
33*5494Slinton 	}
34*5494Slinton 	if (ftp == &filetab[nlhdr.nfiles]) {
35*5494Slinton 		error("unknown source file \"%s\"", name);
36*5494Slinton 	}
37*5494Slinton 	i = ftp->lineindex;
38*5494Slinton 	if (ftp == &filetab[nlhdr.nfiles-1]) {
39*5494Slinton 		j = nlhdr.nlines;
40*5494Slinton 	} else {
41*5494Slinton 		j = (ftp + 1)->lineindex;
42*5494Slinton 	}
43*5494Slinton 	while (i < j) {
44*5494Slinton 		if (linetab[i].line == line) {
45*5494Slinton 			return(linetab[i].addr);
46*5494Slinton 		}
47*5494Slinton 		i++;
48*5494Slinton 	}
49*5494Slinton 	return(-1);
50*5494Slinton }
51