#include "acash.h"

int cash2_fseek(CFILE *fp,long seek,int prev)
/* ミニ キャッシュ２:fseek */
{
	if (!fp->cflag) return(fseek(fp->cfp,seek,prev));
	switch (prev) {
		case SEEK_SET: /* ０〜ファイル最後 */
			if (seek<0) return(1); /* error */
			if (seek<fp->csize) fp->cseek=seek;
			else fp->cseek=fp->csize-1; /* ファイル最後に移動 */
			break;
		case SEEK_CUR: /* ０〜ファイル現在位置〜最後 */
			if (seek>=0) { /* 後ろへ移動 */
				if (seek+fp->cseek>=fp->csize) fp->cseek=fp->csize-1; /* ファイル最後に移動 */
				else fp->cseek+=seek;
			} else { /* seek<0：前へ移動 */
				if (fp->cseek+seek<0) return(1); /* error */
				else fp->cseek+=seek;
			}
			break;
		case SEEK_END: /* ファイル最後〜０ */
			if (seek>0) fp->cseek=fp->csize-1; /* ファイル最後に移動 */
			else { /* seek<=0 */
				if (-seek>=fp->csize) return(1); /* error */
				fp->cseek=fp->csize+seek-1;
			}
			break;
	}
	return(0);
}
