#include <iocslib.h>
#include <time.h>
#include "defines.h"
#include "amacro.h"
#include "aexprint.h"

int ShiftRightPrints(_FNTBUF fnt[],int no,int wt,int tm,int mode)
/* 複数フォント右シフト表示 */
/* 各フォント大きさは全て同じであること（そうでないとtm分配ができないから）*/
/* 元のフォントは破壊される（fnt[].buffer）*/
{
unchar c,cc,c2,bit=0,cb=0;
int x,y,i,j,k,l,wx,xl,yl,p,xy;
time_t t;
	/* フォントサイズ（一定）*/
	xl=fnt[0].xl;
	yl=fnt[0].yl;
	wx=(xl+7)/8;	/* 横バイト数 */
	/* ８ドット区切でないフォントのはみだし部分クリア用ビットマスク */
	for (i=0;i<8-(fnt[0].xl&7);i++) cb|=(BIT7>>i);
	if (tm<=0||tm>=8||(xl%tm)!=0) tm=1; /* tm補正 */
	
	/* 桁下がりビットマスク */
	for (i=0;i<tm;i++) bit|=(BIT0<<i);
	
	cursor(&x,&y);	/* 表示開始座標記録 */
	for (k=0;k<xl/tm;k++) { /* 横全部 */
		t=clock();
		B_LOCATE(x,y);
		for (l=0;l<no;l++) {
		    for (j=0;j<yl;j++) { /* 縦全部ライン */
			/* 横１ライン右tmシフト */
			c2=0;
			for (i=0;i<wx;i++) {
				p=j*wx+i;
				cc=fnt[l].buffer[p];
				c=(cc&bit)<<(8-tm); /* bit check */
				fnt[l].buffer[p]=(cc>>tm)|c2; /* shift right & 桁下がり */
				c2=c;
			}
			fnt[l].buffer[p]&=cb; /* はみだし部分を消す */
		    }
		    /* １フォント表示 */
		    xy=PutCGFonts(&fnt[l],0,mode);
		    B_LOCATE_SC(xy,yl,mode); /* ｽｸﾛｰﾙｱｯﾌﾟ対応ｶｰｿﾙ移動 */
		}
		if ((xy&0xffff)!=y) y=(xy&0xffff); /* スクロール対応 */
		while (clock()-t<wt); /* ウエイト */
	}
	return(poslin());
}
