#include	<stdio.h>
#include	<stdlib.h>
#include	<string.h>
#include	<winb.h>
#include	<te.h>
#include	<fntb.h>
#include	<gui.h>
#include	<egb.h>
#include	<guidbg.h>

//#include	<snd.h>
//#include	<msdos.cf>
//#include	<loader.h>
//#include	<math.h>
//#include	<io.h>

#include	"KH.H"

//#define DEBUG

//	初期32768色パレット変換テーブル(青系メニュー色)
unsigned int	paletteTable32k[16] = {
	0x00000000, 0x3cb73cb7, 0x37293729, 0x67f567f5,
	0x4e734e73, 0x640f640f, 0x67396739, 0x3def3def,
	0x14a514a5, 0x5e3b5e3b, 0x03600360, 0x00150015,
	0x2d6b2d6b, 0x7c1f7c1f, 0x6fe06fe0, 0x7fff7fff
};

//	初期1677万色パレット変換テーブル(青系メニュー色)
unsigned int	paletteTable16m[16] = {
	0x00000000, 0x00b02070, 0x0040c060, 0x00a0f0c0,
	0x00909090, 0x007000c0, 0x00c0c0c0, 0x00707070,
	0x00202020, 0x00e080b0, 0x0000d000, 0x00a00000,
	0x00505050, 0x00f000f0, 0x0000f0d0, 0x00ffffff
};

int	KH_initGuiColor(void)
{
	//	EGB_getTmenuPalette関数用
	typedef struct _TMENUCOLOR{
		unsigned int	colorNo;	//	パレットナンバー
		char			blue;		//	青(0〜255)
		char			red;		//	赤(0〜255)
		char			green;		//	緑(0〜255)
		char			dummy;
	} TMENUCOLOR;

	typedef struct _TMENUPALETTE{
	    unsigned int	maxColor;	//	読み取った色数
		TMENUCOLOR		color[16];
	} TMENUPALETTE;

	TMENUPALETTE	palette;
	unsigned int	*table;
	unsigned int	i,j;

	//	メニュー色読み取り
	EGB_getTmenuPalette( &palette ) ;

	//	256色パレットテーブルの設定
	table = MG_getColorTable( 1 );
	for( i = 0 ; i < 16 ; i++ )
	{
		table[i] = i +(i << 8) +(i<<16) +(i << 24 );
	}

	//	32768色パレットテーブルの設定
	for( i = 0 ; i < palette.maxColor ; i++ )
	{
		#ifdef DEBUG
		printf("color16(%d)=RGB(%d,%d,%d)\n",
		palette.color[i].red,palette.color[i].green,palette.color[i].blue);
		#endif
		j =   ((((palette.color[i].green+8)/8)-1)<<10)
			+ ((((palette.color[i].red  +8)/8)-1)<< 5)
			+  (((palette.color[i].blue +8)/8)-1)      ;
		#ifdef DEBUG
		printf("color(%d)=RGB(%02X:%02X:%02X)->",palette.color[i].colorNo,
			((paletteTable32k[palette.color[i].colorNo] & 0x02E0)>> 5),
			((paletteTable32k[palette.color[i].colorNo] & 0x7C00)>>10),
			 (paletteTable32k[palette.color[i].colorNo] & 0x001F)      );
		#endif
		paletteTable32k[palette.color[i].colorNo] = j +(j<<16) ;
		#ifdef DEBUG
		printf("(%02X:%02X:%02X)\n",
			((paletteTable32k[palette.color[i].colorNo] & 0x02E0)>> 5),
			((paletteTable32k[palette.color[i].colorNo] & 0x7C00)>>10),
			 (paletteTable32k[palette.color[i].colorNo] & 0x001F)      );
		#endif
	}
	table = MG_getColorTable( 2 );
	for( i = 0 ; i < 16 ; i++ )
	{
		table[i] = paletteTable32k[i];
	}

	//	1677万色パレットテーブルの設定(確認できず)
	for( i = 0 ; i < palette.maxColor ; i++ )
	{
		paletteTable16m[palette.color[i].colorNo] =
			  (palette.color[i].blue <<16)
			+ (palette.color[i].green<< 8)
			+  palette.color[i].red        ;
	}
	table = MG_getColorTable( 3 );
	for( i = 0 ; i < 16 ; i++ )
	{
		table[i] = paletteTable16m[i];
	}

	return NOERR;
}
