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