/*****************************************************************************/

#include "defines.h"

/*****************************************************************************/

unchar *cut1disp(unchar *buff,int wx,int wa,unsint *gram,unchar *bbuff)
/* カットファイル１行処理 */
{
int i,j,b;
unchar c,cc,*data,*buff2;
	b=*buff++; /* this line length */
	if (b==0x01) { /* １つ上の行と同じ */
		i=wx;
		for (j=0;j<i;j+=8) {
			wx=gput8(*bbuff++,gram,wx);
			if (wx<=0) break;
			gram+=8; /* １回のgput8()で８ドット書き込むから */
		}
		return(buff);
	}
	
	/* それ以外の行 */
	buff2=buff+b-1; /* next line data */
	data=buff+wa; /* データ先頭アドレス */
	for (j=0;j<wa;j++) { /* 圧縮フラグ分 */
		c=*buff++; /* 圧縮フラグ読み出し */
		b=BIT7;
		for (i=0;i<8;i++) { /* 圧縮８ビット展開 */
			if (c&b) { /* 圧縮フラグbit=1 : データ有り */
				cc=(*data++)^(*bbuff); /* １行上とXOR */
				wx=gput8(cc,gram,wx);
				*bbuff++=cc; /* 今の行 -> １つ上の行 */
			} else { /* bit=0 : データ＝0x00 */
				/* この行のデータは0x00なので、
				この行のデータ＝１つ上の行のデータ */
				wx=gput8(*bbuff++,gram,wx);
			}
			if (wx<=0) break;
			gram+=8; /* １回のgput8()で８ドット書き込むから */
			b>>=1;
		}
	}
	/* 本当はreturn(data)でよさそうだけど、一部のＣＵＴファイルには
	　１行データ内に画像に関係ないゴミデータが入っているものがあるため、
	　１行長さから計算した次の行の先頭アドレスを求めなければならない。*/
	return(buff2);
}

/*****************************************************************************/
