/* その文字コードがＸ６８で表示可能文字かどうかを厳しくチェックする */
/* シフトＪＩＳコードで判定 */
/* リターン値：１＝表示不可、０＝表示可 */

#include <jfctype.h>
#include "defines.h"
#include "acmp.h"

int check_moji(int c1,int c2,int mode)
/* c1=１バイト目 , c2=２バイト目 , １バイトコードの時はc1=0にする */
//	mode	０	全文字対象
//		BIT0	１／２，１／４角文字を存在しないことにする
//		BIT1	９８文字も有効にする（ただし、表示はできない）
//		BIT2	半角外字も有効にする(0xf4xx,0xf5xx)
{
	if (c1>=0x8000) { // ２バイトコードをc1だけで与えている
		c2=c1&0xff;
		c1=(c1>>8)&0xff;
	}
	if (c1==0) { /* １バイトコード */
		return((c2<0x20 || (c2>=0x7f && c2<=0x9f) || c2>=0xe0));
	}
	
	if (mode&BIT2) { // 半角外字を有効にする
		if (c1==0xf4||c1==0xf5) return(0);
	}
	if (is24(c1)) { /* １／２，１／４角文字：但し、半角外字はサポートしない */
		if (mode&BIT0) return(1); /* １／２，１／４角文字をサポートしないモード */
		if (c2==0xb0 && (c1==0x80 || c1==0xf1 || c1==0xf3)) return(1); /* ここには仮名の長音が無い */
		/* '92/05/15 : 実はxx81,xx82に文字があったのでこれに対応する */
		return(c2==0x00 || c2==0x7f || c2==0x80
				|| (c2>=0x83 && c2<=0x9f) || c2>=0xe0);
	}
	
	/* 全角文字 */
	if (mode&BIT1) { /* ９８文字も有効にする時 */
		if ((c1>=0x85 && c1<=0x87)||(c1>=0xed && c1<=0xee)) return(!iskanji2(c2));
	}
	if (c1<0x81 || (c1>=0x85 && c1<=0x87) || c1>=0xed) return(1); /* １バイト目がおかしい */
	/* １バイト目有りうる */
	if (
		((c1==0x88||c1==0xeb) && (c2>=0x40 && c2<=0x9e))
	    ||	(c1==0xec && c2>=0x9f)
		) return(1); /* このコードは無い */
	return(!iskanji2(c2)); /* ２バイト目チェック */
}
