/* テキスト画面スクロール（スムース）*/

#include <iocslib.h>
#include "defines.h"
#include "aigs.h"

void TextScrollS(scrl,era,sx,sy,ex,ey,count,mode)
int sx,sy,ex,ey,count;
void (*scrl)(),(*era)();
{
int i,src,des,clr,y,xx,m,lines;
	ey++;
	lines=(ey-sy)*CL-1; /* コピーライン数（４ライン単位）*/
	clr=textadrs0(sx,sy); /* クリアアドレス */
	m=textadrs0(sx,ey)-CL*TLSIZE;
	xx=TWIDTH(&y);
	if (sx==0 && ex==xx-1) { /* ｘ全画面：ラスタコピー */
		if (mode&BIT0) { /* 下 */
			src=((ey*CL-2)<<8)|(ey*CL-1);
			m=BIT0|BIT1|BIT15;
		} else { /* 上 */
			src=((sy*CL+1)<<8)|(sy*CL);
			clr=m;
			m=BIT0|BIT1;
		}
		TXRASCPY(src,lines,m); /* SRC_DEST */
		if (!(mode&BIT5)) era(clr,xx,CL);
		for (i=1;i<count*CL;i++) {
			WAIT_VDISP(); /* vwait(1); wait */
			TXRASCPY(src,lines,m);
		}
	} else { /* ｘ全画面以外 */
		if (mode&BIT0) { /* 下 */
			des=m;
			src=des-CL*TLSIZE;
		} else { /* 上 */
			des=clr; /* DEST */
			src=des+CL*TLSIZE; /* SRC */
			clr=m;
		}
		xx=ex-sx+1; /* コピーＸ幅 */
		scrl(src,des,xx,lines);
		if (!(mode&BIT5)) era(clr,xx,CL);
		for (i=1;i<count*CL;i++) {
			WAIT_VDISP(); /* vwait(1); wait */
			scrl(src,des,xx,lines);
		}
	}
}
