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