USG_PG3/usr/source/sccsutil2/putl.c

#include "../sccshead/sfile.h"
char putl____[] "~|^`putl.c:	4.1";
/*
	Routine to create and open a file for output.
*/

crtl(buf,file,mode,fd)
struct Obufr *buf;
char file[];
int mode, fd;
{
	if(nargs() == 4) buf->Ofildes = fd;
	else buf->Ofildes = xcreat(file,mode);

	buf->Orecptr = buf->Obuff1;
	buf->Oend = buf->Orecptr + 511;
	return(0);
}


/*
	Routine to write a line to a "normal" ASCII file.  Second
	argument must point to a newline-terminated string.
*/

putl(buf,rec)
struct Obufr *buf;
char *rec;
{
	register char *p, *r, *e;

	p = buf->Orecptr;
	e = buf->Oend;
	r = rec;
	while(1) {
		while(p <= e)
			if((*p++ = *r++) == '\n') {
				buf->Orecptr = p;
				return(0);
			}

		xwrite(buf->Ofildes,p=buf->Obuff1,512);
	}
}


/*
	Routine to dump output buffer.  Must be called if putl is used.
*/

flshl(buf)
struct Obufr *buf;
{
	register int n;

	n = buf->Orecptr - buf->Obuff1;
	xwrite(buf->Ofildes,buf->Orecptr=buf->Obuff1,n);
	return(0);
}