1*5495Slinton /* Copyright (c) 1982 Regents of the University of California */
2*5495Slinton 
3*5495Slinton static char sccsid[] = "@(#)srcfile.c 1.1 01/18/82";
4*5495Slinton 
5*5495Slinton /*
6*5495Slinton  * get the source file name associated with a given address
7*5495Slinton  */
8*5495Slinton 
9*5495Slinton #include "defs.h"
10*5495Slinton #include "mappings.h"
11*5495Slinton #include "object.h"
12*5495Slinton #include "filetab.h"
13*5495Slinton 
14*5495Slinton char *srcfilename(addr)
15*5495Slinton ADDRESS addr;
16*5495Slinton {
17*5495Slinton 	register ADDRESS i, j, k;
18*5495Slinton 	ADDRESS a;
19*5495Slinton 	FILETAB *ftp;
20*5495Slinton 
21*5495Slinton 	if (addr < filetab[0].addr) {
22*5495Slinton 		return(NIL);
23*5495Slinton 	}
24*5495Slinton 	i = 0;
25*5495Slinton 	j = nlhdr.nfiles - 1;
26*5495Slinton 	while (i < j) {
27*5495Slinton 		k = (i + j) / 2;
28*5495Slinton 		ftp = &filetab[k];
29*5495Slinton 		if ((a = ftp->addr) == addr) {
30*5495Slinton 			return(ftp->filename);
31*5495Slinton 		} else if (addr > a) {
32*5495Slinton 			i = k + 1;
33*5495Slinton 		} else {
34*5495Slinton 			j = k - 1;
35*5495Slinton 		}
36*5495Slinton 	}
37*5495Slinton 	if (addr >= filetab[i].addr) {
38*5495Slinton 		return(filetab[i].filename);
39*5495Slinton 	} else {
40*5495Slinton 		return(filetab[i-1].filename);
41*5495Slinton 	}
42*5495Slinton 	/*NOTREACHED*/
43*5495Slinton }
44