130496Slepreau #include	"../hdr/defines.h"
230496Slepreau 
3*30497Slepreau static char Sccsid[] = "@(#)getline.c	1.2	02/15/87";
430496Slepreau /*
530496Slepreau 	Routine to read a line into the packet.  The main reason for
630496Slepreau 	it is to make sure that pkt->p_wrttn gets turned off,
730496Slepreau 	and to increment pkt->p_slnno.
830496Slepreau */
930496Slepreau 
getline(pkt)1030496Slepreau getline(pkt)
1130496Slepreau register struct packet *pkt;
1230496Slepreau {
1330496Slepreau 	register int n;
1430496Slepreau 	register char *p;
1530496Slepreau 
1630496Slepreau 	if(pkt->p_wrttn==0)
1730496Slepreau 		putline(pkt,0);
1830496Slepreau 	if ((n = fgets(pkt->p_line,sizeof(pkt->p_line),pkt->p_iop)) != NULL) {
1930496Slepreau 		pkt->p_slnno++;
2030496Slepreau 		pkt->p_wrttn = 0;
2130496Slepreau 		for (p = pkt->p_line; *p; )
22*30497Slepreau 			pkt->p_chash += *p++;
2330496Slepreau 	}
2430496Slepreau 	else {
2530496Slepreau 		if (!pkt->p_reopen) {
2630496Slepreau 			fclose(pkt->p_iop);
2730496Slepreau 			pkt->p_iop = 0;
2830496Slepreau 		}
2930496Slepreau 		if (!pkt->p_chkeof)
3030496Slepreau 			fatal("premature eof (co5)");
3130496Slepreau 		if (pkt->do_chksum && (pkt->p_chash ^ pkt->p_ihash)&0xFFFF)
3230496Slepreau 			fatal("corrupted file (co6)");
3330496Slepreau 		if (pkt->p_reopen) {
3430496Slepreau 			fseek(pkt->p_iop,0L,0);
3530496Slepreau 			pkt->p_reopen = 0;
3630496Slepreau 			pkt->p_slnno = 0;
3730496Slepreau 			pkt->p_ihash = 0;
3830496Slepreau 			pkt->p_chash = 0;
3930496Slepreau 			pkt->p_nhash = 0;
4030496Slepreau 			pkt->p_keep = 0;
4130496Slepreau 			pkt->do_chksum = 0;
4230496Slepreau 		}
4330496Slepreau 	}
4430496Slepreau 	return(n);
4530496Slepreau }
46