#include "libc.h"

fseek(stream,pos,mode)
register FILE *stream; long pos;
{
	register int i, offset;

	if ( flush_(stream,0) )
		return EOF;

	switch ( mode ) {
	case 0:
		stream->_curpos = 0;
		break;
	case 1:
		pos += stream->_bp - stream->_buff;
		break;
	case 2:
		stream->_curpos = fsize(stream->_unit);
		break;
	}
	stream->_curpos += pos/_SCTSIZE;
	offset = pos % _SCTSIZE;

	stream->_flags &= ~_ATEND;
	posit(stream->_unit,stream->_curpos);
	i = read(stream->_unit, stream->_buff, _SCTSIZE);
	stream->_bp = stream->_buff + offset;
	stream->_bend = stream->_buff + i;
	if (i <= 0) {
		stream->_flags |= _ATEND;
		if (i < 0 || offset != 0)
			return EOF;
	}
	return 0;
}

long
ftell(stream)
register FILE *stream;
{
	return ((long)stream->_curpos << _SCTSHFT) + (stream->_bp - stream->_buff);
}
