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