V10/cmd/spitbol/doset.c


/*
	doset( ioptr,offset,whence ) does an lssek on the file described
	by ioptr with offset and whence.  for output files, the buffer
	must be flushed before doing the lseek.  for input files, any 
	"unread" characters in the buffer must be lseeked back.
*/

#include "spitblks.h"
#include "spitio.h"

doset( ioptr,offset,whence )

struct	ioblk	*ioptr;
int	offset;
int	whence;

{
	struct	bfblk	*bfptr;

	if ( ioptr -> flg & IO_OUP ) {
		flush( ioptr );
	} else {
		ioptr -> flg &= ~IO_EOF;
		bfptr	= ioptr -> buf;
		if ( (bfptr -> rem != 0) && (whence == 1) )
			lseek( ioptr -> fdn,-(bfptr -> rem),1 );
		bfptr -> rem = 0;
		bfptr -> off = 0;
	}
	return lseek( ioptr -> fdn,offset,whence );
}