1*22505Sdist /* 2*22505Sdist * Copyright (c) 1980 Regents of the University of California. 3*22505Sdist * All rights reserved. The Berkeley software License Agreement 4*22505Sdist * specifies the terms and conditions for redistribution. 5*22505Sdist */ 65495Slinton 7*22505Sdist #ifndef lint 8*22505Sdist static char sccsid[] = "@(#)srcfile.c 5.1 (Berkeley) 06/06/85"; 9*22505Sdist #endif not lint 105495Slinton 115495Slinton /* 125495Slinton * get the source file name associated with a given address 135495Slinton */ 145495Slinton 155495Slinton #include "defs.h" 165495Slinton #include "mappings.h" 175495Slinton #include "object.h" 185495Slinton #include "filetab.h" 195495Slinton 205495Slinton char *srcfilename(addr) 215495Slinton ADDRESS addr; 225495Slinton { 235495Slinton register ADDRESS i, j, k; 245495Slinton ADDRESS a; 255495Slinton FILETAB *ftp; 265495Slinton 275495Slinton if (addr < filetab[0].addr) { 285495Slinton return(NIL); 295495Slinton } 305495Slinton i = 0; 315495Slinton j = nlhdr.nfiles - 1; 325495Slinton while (i < j) { 335495Slinton k = (i + j) / 2; 345495Slinton ftp = &filetab[k]; 355495Slinton if ((a = ftp->addr) == addr) { 365495Slinton return(ftp->filename); 375495Slinton } else if (addr > a) { 385495Slinton i = k + 1; 395495Slinton } else { 405495Slinton j = k - 1; 415495Slinton } 425495Slinton } 435495Slinton if (addr >= filetab[i].addr) { 445495Slinton return(filetab[i].filename); 455495Slinton } else { 465495Slinton return(filetab[i-1].filename); 475495Slinton } 485495Slinton /*NOTREACHED*/ 495495Slinton } 50