xref: /csrg-svn/old/sdb/old.c (revision 7775)
1*7775Srrh static	char sccsid[] = "@(#)old.c 4.2 08/17/82";
21340Sbill /*
31340Sbill  * sdb - a symbolic debugger for UNIX.
41340Sbill  */
51340Sbill 
61340Sbill /*
71340Sbill  * This file contains support routines for older versions of the system.
81340Sbill  */
91340Sbill 
101340Sbill #ifndef VMUNIX
111340Sbill /*
121340Sbill  * These routines are used only if the system
131340Sbill  * doesn't have virtual memory.  They
141340Sbill  * are used only to read the symbol table, which
151340Sbill  * is simply kept in VM on VMUNIX.
161340Sbill  */
171340Sbill #include <pagsiz.h>
181340Sbill #include "bio.h"
191340Sbill 
201340Sbill bread(brs, buff, nbytes)
211340Sbill struct brbuf *brs; char *buff; {
221340Sbill 	register int k, nb;
231340Sbill 
241340Sbill 	if (nbytes > 0) {
251340Sbill 		for (nb=nbytes; nb>0; nb--) {
261340Sbill 			if (brs->nr == 0) {
271340Sbill 				brs->nr = read(brs->fd, brs->next=brs->b, BSIZE);
281340Sbill 				brs->nl = 0;
291340Sbill 				if (brs->nr < 0) return(-1);
301340Sbill 				if (brs->nr == 0) return(nbytes-nb);
311340Sbill 				}
321340Sbill 			*buff++ = *brs->next++;
331340Sbill 			brs->nr--;
341340Sbill 			brs->nl++;
351340Sbill 			}
361340Sbill 		}
371340Sbill 	else {
381340Sbill 		nbytes = -nbytes;
391340Sbill 		for (nb=nbytes; nb>0; nb--) {
401340Sbill 			if (brs->nl == 0) {
411340Sbill 				if ((k=tell(brs->fd)) >= BSIZE + brs->nr) {
421340Sbill 					lseek(brs->fd, (long) -(BSIZE + brs->nr), 1);
431340Sbill 					brs->nl = read(brs->fd, brs->b, BSIZE);
441340Sbill 				} else {
451340Sbill 					lseek(brs->fd, 0L, 0);
461340Sbill 					k = k - brs->nr;
471340Sbill 					if (k < 0) k = 0;
481340Sbill 					brs->nl = read(brs->fd, brs->b, k);
491340Sbill 				}
501340Sbill 				if (brs->nl == 0) return(nbytes-nb);
511340Sbill 				brs->next = brs->b + brs->nl;
521340Sbill 				brs->nr = 0;
531340Sbill 				}
541340Sbill 			*--buff = *--brs->next;
551340Sbill 			brs->nr++;
561340Sbill 			brs->nl--;
571340Sbill 			}
581340Sbill 		}
591340Sbill 	return(nbytes);
601340Sbill 	}
611340Sbill 
621340Sbill blseek(brs, offset, flag)
631340Sbill struct brbuf *brs; long offset; {
641340Sbill 	brs->nl = 0;
651340Sbill 	brs->nr = 0;
661340Sbill 	return(lseek(brs->fd,offset,flag));
671340Sbill 	}
681340Sbill 
691340Sbill binit(brs)
701340Sbill struct brbuf *brs; {
711340Sbill 	brs->nl = brs->nr = 0;
721340Sbill }
731340Sbill 
741340Sbill long
tell(fildes)751340Sbill tell(fildes) {
761340Sbill 	return(lseek(fildes, 0L, 1));
771340Sbill }
781340Sbill #endif
79