xref: /original-bsd/old/sdb/old.c (revision 7211505a)
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