#include <iocslib.h>
#include "defines.h"
#include "menu.h"
#include "amacro.h"

#define	MLINE	4	/* １枠線パターン当たりの最大本数 */
static unsint xys[7][MLINE]={ /* 枠線相対座標表 */
	/* x1 y1 x2 y2 : 各16進4ビット：最大４組（本）まで */
	 {0x3748,0x0000,0x0000,0x0000}	/* 1=細枠線 */
	,{0x2659,0x4837,0x0000,0x0000}	/* 2=細２重枠線 */
	,{0x2659,0x3748,0x0000,0x0000}	/* 3=太枠線 */
	,{0x156a,0x5926,0x2659,0x4837}	/* 4=太２重枠線 */
	,{0x2758,0x3649,0x0000,0x0000}	/* 5=丸角太枠線 */
	,{0x2857,0x4639,0x0000,0x0000}	/* 6=丸角細２重枠線 */
	,{0x1966,0x552a,0x2857,0x4639}	/* 7=丸角太２重枠線 */
};

void make_waku(int sx,int sy,int ex,int ey,_MENU_DATA *mdata,MCOLORS *cols)
/* 枠作成 */
{
int x1,y1,x2,y2,wx,wy,sxx,syy,wxx,wyy;
int i,w,ww,c,cur;
unsint xy;
	cur=curoff();
	c=EX_COLOR(-1);
	
	x1=sx*8; y1=sy*16;
	x2=ex*8; y2=ey*16;
	wx=(ex-sx+1)*8;
	wy=(ey-sy-1)*16; /* 枠内のy幅 */
	if (!mdata->md_cls) fill_area(x1+8,y1+16,wx-16,wy,cols->back); /* 枠内部初期化 */
	if (mdata->cwaku) { /* 枠有の時のみ */
		/* 枠領域クリア */
		fill_area(x1,y1,wx,16,0);
		fill_area(x1,y2,wx,16,0);
		fill_area(x1,y1+16,8,wy,0);
		fill_area(x2,y1+16,8,wy,0);
		/* 枠描画 */
		w=cols->waku;
		ww=mdata->cwaku-1;
		if (ww>=0 && ww<7) {
		    i=0;
		    while ((xy=xys[ww][i++])!=0) {
			sxx=x1+(xy>>12);
			syy=y1+((xy>>8)&0x0f);
			wxx=(x2+((xy>>4)&0x0f))-sxx+1;
			wyy=(y2+(xy&0x0f))-syy+1;
			txbox(0,sxx,syy,wxx,wyy,(w&BIT0)?mdata->wptrn:0x0000);
			txbox(1,sxx,syy,wxx,wyy,(w&BIT1)?mdata->wptrn:0x0000);
			if (i>=MLINE) break; /* これ以上の線はない */
		    }
		}
		if (ww==8-1||w&REVERSE) { /* reverse waku */
			reverse_area(x1,y1,wx,16,w);
			reverse_area(x1,y2,wx,16,w);
			reverse_area(x1,y1+16,8,wy,w);
			reverse_area(x2,y1+16,8,wy,w);
		}
	}
	
	/* title & tale */
	EX_COLOR(cols->title);
	print_message(mdata->title,sx,sy,wx/8,mdata->ti_mode);
	EX_COLOR(cols->tale);
	print_message(mdata->tale ,sx,ey,wx/8,mdata->ta_mode);
	
	/* リターン時のカーソルの位置はテイルの直後！ */
	EX_COLOR(c);
	curmode(cur);
}

#if 0
#define TBLUE		TCYAN
#define	TRED		TYELLOW
#define	TMAGENTA	TYELLOW
static MCOLORS cl = {
	 TCYAN|REVERSE	,TCYAN|REVERSE	,TCYAN|REVERSE	,TWHITE|REVERSE
	,TWHITE|REVERSE	,TWHITE|REVERSE	,TWHITE|REVERSE
	,TYELLOW	,TYELLOW	,TYELLOW
	,TWHITE|REVERSE	,TWHITE|REVERSE	,TWHITE|REVERSE
	,TBLUE		,TBLUE		,TBLUE
	,TYELLOW	,TYELLOW	,TYELLOW
	,TYELLOW|REVERSE,TYELLOW|REVERSE,TYELLOW|REVERSE
	,TRED|REVERSE	,TRED|REVERSE	,TRED|REVERSE
	,TMAGENTA	,TMAGENTA	,TMAGENTA
	,TRED		,TRED		,TRED
	,TCYAN|REVERSE	,TCYAN|HLIGHT
};

main()
{
int c,i;
_MENU_DATA mdata;
	set_dmenu_data(&mdata);
	for (i=1;i<=8;i++) {
		cls();
		printf("cwaku=%d",i);
		mdata.cwaku=i;
		make_waku(5,5,20,20,&mdata,&cl);
		getch();
	}
}
#endif
