1*1340Sbill static char sccsid[] = "@(#)old.c 4.1 10/09/80"; 2*1340Sbill /* 3*1340Sbill * sdb - a symbolic debugger for UNIX. 4*1340Sbill */ 5*1340Sbill 6*1340Sbill /* 7*1340Sbill * This file contains support routines for older versions of the system. 8*1340Sbill */ 9*1340Sbill 10*1340Sbill #ifndef VMUNIX 11*1340Sbill /* 12*1340Sbill * These routines are used only if the system 13*1340Sbill * doesn't have virtual memory. They 14*1340Sbill * are used only to read the symbol table, which 15*1340Sbill * is simply kept in VM on VMUNIX. 16*1340Sbill */ 17*1340Sbill #include <pagsiz.h> 18*1340Sbill #include "bio.h" 19*1340Sbill 20*1340Sbill bread(brs, buff, nbytes) 21*1340Sbill struct brbuf *brs; char *buff; { 22*1340Sbill register int k, nb; 23*1340Sbill 24*1340Sbill if (nbytes > 0) { 25*1340Sbill for (nb=nbytes; nb>0; nb--) { 26*1340Sbill if (brs->nr == 0) { 27*1340Sbill brs->nr = read(brs->fd, brs->next=brs->b, BSIZE); 28*1340Sbill brs->nl = 0; 29*1340Sbill if (brs->nr < 0) return(-1); 30*1340Sbill if (brs->nr == 0) return(nbytes-nb); 31*1340Sbill } 32*1340Sbill *buff++ = *brs->next++; 33*1340Sbill brs->nr--; 34*1340Sbill brs->nl++; 35*1340Sbill } 36*1340Sbill } 37*1340Sbill else { 38*1340Sbill nbytes = -nbytes; 39*1340Sbill for (nb=nbytes; nb>0; nb--) { 40*1340Sbill if (brs->nl == 0) { 41*1340Sbill if ((k=tell(brs->fd)) >= BSIZE + brs->nr) { 42*1340Sbill lseek(brs->fd, (long) -(BSIZE + brs->nr), 1); 43*1340Sbill brs->nl = read(brs->fd, brs->b, BSIZE); 44*1340Sbill } else { 45*1340Sbill lseek(brs->fd, 0L, 0); 46*1340Sbill k = k - brs->nr; 47*1340Sbill if (k < 0) k = 0; 48*1340Sbill brs->nl = read(brs->fd, brs->b, k); 49*1340Sbill } 50*1340Sbill if (brs->nl == 0) return(nbytes-nb); 51*1340Sbill brs->next = brs->b + brs->nl; 52*1340Sbill brs->nr = 0; 53*1340Sbill } 54*1340Sbill *--buff = *--brs->next; 55*1340Sbill brs->nr++; 56*1340Sbill brs->nl--; 57*1340Sbill } 58*1340Sbill } 59*1340Sbill return(nbytes); 60*1340Sbill } 61*1340Sbill 62*1340Sbill blseek(brs, offset, flag) 63*1340Sbill struct brbuf *brs; long offset; { 64*1340Sbill brs->nl = 0; 65*1340Sbill brs->nr = 0; 66*1340Sbill return(lseek(brs->fd,offset,flag)); 67*1340Sbill } 68*1340Sbill 69*1340Sbill binit(brs) 70*1340Sbill struct brbuf *brs; { 71*1340Sbill brs->nl = brs->nr = 0; 72*1340Sbill } 73*1340Sbill 74*1340Sbill long 75*1340Sbill tell(fildes) { 76*1340Sbill return(lseek(fildes, 0L, 1)); 77*1340Sbill } 78*1340Sbill #endif 79