xref: /csrg-svn/old/sdb/old.c (revision 1340)
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