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