148099Sbostic /*- 2*62138Sbostic * Copyright (c) 1980, 1993 3*62138Sbostic * The Regents of the University of California. All rights reserved. 448099Sbostic * 548099Sbostic * %sccs.include.redist.c% 622505Sdist */ 75495Slinton 822505Sdist #ifndef lint 9*62138Sbostic static char sccsid[] = "@(#)srcfile.c 8.1 (Berkeley) 06/06/93"; 1048099Sbostic #endif /* not lint */ 115495Slinton 125495Slinton /* 135495Slinton * get the source file name associated with a given address 145495Slinton */ 155495Slinton 165495Slinton #include "defs.h" 175495Slinton #include "mappings.h" 185495Slinton #include "object.h" 195495Slinton #include "filetab.h" 205495Slinton srcfilename(addr)215495Slintonchar *srcfilename(addr) 225495Slinton ADDRESS addr; 235495Slinton { 245495Slinton register ADDRESS i, j, k; 255495Slinton ADDRESS a; 265495Slinton FILETAB *ftp; 275495Slinton 285495Slinton if (addr < filetab[0].addr) { 295495Slinton return(NIL); 305495Slinton } 315495Slinton i = 0; 325495Slinton j = nlhdr.nfiles - 1; 335495Slinton while (i < j) { 345495Slinton k = (i + j) / 2; 355495Slinton ftp = &filetab[k]; 365495Slinton if ((a = ftp->addr) == addr) { 375495Slinton return(ftp->filename); 385495Slinton } else if (addr > a) { 395495Slinton i = k + 1; 405495Slinton } else { 415495Slinton j = k - 1; 425495Slinton } 435495Slinton } 445495Slinton if (addr >= filetab[i].addr) { 455495Slinton return(filetab[i].filename); 465495Slinton } else { 475495Slinton return(filetab[i-1].filename); 485495Slinton } 495495Slinton /*NOTREACHED*/ 505495Slinton } 51