1*30496Slepreau #include	"../hdr/defines.h"
2*30496Slepreau 
3*30496Slepreau SCCSID(@(#)getline	2.1.1.1);
4*30496Slepreau /*
5*30496Slepreau 	Routine to read a line into the packet.  The main reason for
6*30496Slepreau 	it is to make sure that pkt->p_wrttn gets turned off,
7*30496Slepreau 	and to increment pkt->p_slnno.
8*30496Slepreau */
9*30496Slepreau 
10*30496Slepreau getline(pkt)
11*30496Slepreau register struct packet *pkt;
12*30496Slepreau {
13*30496Slepreau 	register int n;
14*30496Slepreau 	register char *p;
15*30496Slepreau 
16*30496Slepreau 	if(pkt->p_wrttn==0)
17*30496Slepreau 		putline(pkt,0);
18*30496Slepreau 	if ((n = fgets(pkt->p_line,sizeof(pkt->p_line),pkt->p_iop)) != NULL) {
19*30496Slepreau 		pkt->p_slnno++;
20*30496Slepreau 		pkt->p_wrttn = 0;
21*30496Slepreau 		for (p = pkt->p_line; *p; )
22*30496Slepreau 			pkt->p_chash =+ *p++;
23*30496Slepreau 	}
24*30496Slepreau 	else {
25*30496Slepreau 		if (!pkt->p_reopen) {
26*30496Slepreau 			fclose(pkt->p_iop);
27*30496Slepreau 			pkt->p_iop = 0;
28*30496Slepreau 		}
29*30496Slepreau 		if (!pkt->p_chkeof)
30*30496Slepreau 			fatal("premature eof (co5)");
31*30496Slepreau 		if (pkt->do_chksum && (pkt->p_chash ^ pkt->p_ihash)&0xFFFF)
32*30496Slepreau 			fatal("corrupted file (co6)");
33*30496Slepreau 		if (pkt->p_reopen) {
34*30496Slepreau 			fseek(pkt->p_iop,0L,0);
35*30496Slepreau 			pkt->p_reopen = 0;
36*30496Slepreau 			pkt->p_slnno = 0;
37*30496Slepreau 			pkt->p_ihash = 0;
38*30496Slepreau 			pkt->p_chash = 0;
39*30496Slepreau 			pkt->p_nhash = 0;
40*30496Slepreau 			pkt->p_keep = 0;
41*30496Slepreau 			pkt->do_chksum = 0;
42*30496Slepreau 		}
43*30496Slepreau 	}
44*30496Slepreau 	return(n);
45*30496Slepreau }
46