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

int ShiftLeftPrint(_FNTBUF *fnt,int wt,int tm,int mode)
/* １フォント左シフト表示 */
/* フォント大きさは最大２４＊２４ */
{
_FNTBUF fnt2;
unchar buf[24/8*24];
unchar c,cc,c1,c2,bit=0;
int x,y,i,j,k,wx,p,cb,xy,xy1;
time_t t;
	fnt2.xl=fnt->xl;	/* xlコピー */
	fnt2.yl=fnt->yl;	/* ylコピー */
	wx=(fnt2.xl+7)/8;	/* 横バイト数 */
	cb=fnt2.xl&7;		/* ８ドット区切りでないフォントの余りドット数 */
	if (tm<=0||tm>=8||(fnt2.xl%tm)!=0) tm=1; /* 補正 */
	
	/* フォントコピー */
	memcpy(buf,fnt->buffer,wx*fnt2.yl);
	
	/* バッファークリア */
	memset(fnt2.buffer,0,wx*fnt2.yl);
	
	/* 桁上がりビットマスク */
	for (i=7;i>=8-tm;i--) bit|=(BIT0<<i);
	
	cursor(&x,&y);	/* 表示開始座標記録 */
	for (k=0;k<fnt2.xl/tm;k++) { /* 横全部 */
		t=clock();
		for (j=0;j<fnt2.yl;j++) { /* 縦全部ライン */
			/* 横１ライン左tmシフト */
			c1=0;
			c2=(buf[j*wx]&bit)>>(8-tm-cb); /* fnt -> fnt2 */
			for (i=wx-1;i>=0;i--) {
				p=j*wx+i;
				cc=fnt2.buffer[p];
				c=(cc&bit)>>(8-tm); /* bit check */
				fnt2.buffer[p]=(cc<<tm)|c2; /* shift left & 下の桁からの上がり */
				c2=c;
				cc=buf[p];
				c=(cc&bit)>>(8-tm); /* bit check */
				buf[p]=(cc<<tm)|c1; /* shift left & 下の桁からの上がり */
				c1=c;
			}
		}
		/* １フォント表示 */
		B_LOCATE(x,y);
		xy1=PutCGFonts(&fnt2,k,mode);
		if (k==0) {
			xy=xy1;
			if ((xy&0xffff)!=y) y=(xy&0xffff); /* スクロール対応 */
		}
		while (clock()-t<wt); /* ウエイト */
	}
	return(B_LOCATE_SC(xy,fnt2.yl,mode)); /* ｽｸﾛｰﾙｱｯﾌﾟ対応ｶｰｿﾙ移動 */
}
