#include "defines.h"
#include "menu.h"

int mini_menu_width(x,y,n,ms,md,code)
/* ミニメニュー幅計算ルーチン */
int 	x,y;	/* メニュー左上座標 */
int 	n;	/* 項目数 */
unchar 	*ms[];	/* 項目 */
_MENU_DATA *md;	/* メニューデータ */
int	code[];	/* メニュー状態情報 */
{
int xx,yy,c,wd,mlen,nlen,ex,ey,bline;
	/* 番号モードによる項目数制限 */
	switch (md->num) {
		case 1: /* A-Z */
			if (n>26) n=26;
			break;
		case 2: /* 1-9,A-Z */
			if (n>35) n=35;
			break;
	}
	
	/* メニュー縦幅 計算＆設定 */
	yy=2+(md->aline+md->bline); /* 枠＋上下空行 */
	yy+=n;
	
	/* メニュー横幅設定 */
	
	/* 必要桁数の算出：メニュー幅の内、項目を除いた部分の長さの合計 */
	wd=md->lcol+md->rcol+2; /* 左右空き桁＋枠 */
	
	/* 番号+":" */
	nlen=klen2(md->sep);
	c=md->num;
	if (c!=0) {
		nlen++; /* +1=番号桁数 */
		wd+=nlen; /* これを必要桁数に加える */
	}
	
	/* mlenは１項目当たりの長さ（１行ではない）*/
	mlen=maxlen2(ms,n,1); /* 項目のうち見た目で一番長いもの */
	
	/* メニュー全体幅計算 */
	xx=mlen+wd;
	
	/* タイトル、テイル長さでメニュー幅修正 */
	c=klen2(md->title);
	if (c<strlen(md->tale)) c=strlen(md->tale);
	if (c+2>xx) { /* +2=枠両端 */
		xx=c+2;
		mlen=xx-wd; /* 必ず１番長い項目より長くなる */
	}
	
	ex=x+xx-1; /* メニュー終点ｘ座標 */
	ey=y+yy-1; /* メニュー終点ｙ座標 */
	
	/* 情報 store */
	code[ 2]=xx;	code[ 3]=yy;
	code[ 4]=ex;	code[ 5]=ey;
	code[ 6]=x+md->lcol+1;	/* active window area sx */
	code[ 7]=y+md->aline+1;	/* active window area sy */
	code[ 8]=ex-md->rcol-1;	/* active window area ex */
	code[ 9]=ey-md->bline-1;/* active window area ey */
	code[10]=n;
	code[11]=nlen;
	return(mlen);
}
