/* テキスト画面圧縮記録 */

#include "defines.h"

void gettext3(int sx,int sy,int ex,int ey,unchar *buff,unchar *cbuff)
/* sx,sy,ex,ey : テキスト座標で与えること */
{
#define MAX	256	/* ８ビットコード種類数（固定）*/
#define	JOUI	16	/* 圧縮対象上位コード数 */
unsint wx,wy,i,cur;
int adrs;
unint count[MAX];
#if 0
/* 本来は次のような構造体。ソートのためにunintで扱う */
typedef struct {
	unsint	cnt;	/* カウント（９６＊５１２は１６ビットで収まるから）*/
	unsint	code;	/* コード */
} CNT	count[MAX];	/* コード別カウンター */
#endif
	/* 幅計算 */
	*(unsint *)buff    =wx=(ex-sx+1);
	*(unsint *)(buff+2)=wy=(ey-sy+1);
	/* 圧縮領域ホーム座標 */
	adrs=TPLANE0+sx+sy*16*128;
	/* カーソルoff */
	cur=curmode(0);
	/* 画面上領域内のコード出現回数カウント */
	Tcount(count,adrs,wx,wy*16);
	/* 出現回数の多いもの順にソート */
	qusort1(count,MAX);
	/* 上位コード表書き込み */
	for (i=0;i<JOUI;i++) buff[i+12]=(unchar)count[i];
	/* 圧縮取り込み */
	_gettext3(adrs,buff,cbuff);
	/* カーソル復帰 */
	curmode(cur);
}
