#include <stdio.h>
#include "defines.h"
#include "menubar.h"

int bar_width(x,y,ex,n,ms,bdata,tx,rsx)
/* メニューバー幅計算ルーチン */
int 	*x,*y,*ex;	/* メニューバー座標 */
int 	n;		/* 項目数 */
unchar 	*ms[];		/* 項目 */
_BAR_DATA *bdata;	/* メニューバーデータ */
int	*tx;		/* タイトル座標 */
int	rsx[];		/* 各項目表示Ｘ座標 */
{
int wx,w,l,otx,i,mlen;
	/* 座標修正 */
	wx=TWIDTH(&w);
	if (bdata->endx==0||bdata->endx>=wx) bdata->endx=wx-1;
	if (bdata->endy==0||bdata->endy>=w-2) bdata->endy=w-2;
	
	if (*x <bdata->startx) *x =bdata->startx;
	if (*y <bdata->starty) *y =bdata->starty;
	if (*y >bdata->endy)   *y =bdata->endy;
	if (*ex>bdata->endx)   *ex=bdata->endx;
	
	/* メニューバーの幅 */
	wx=(*ex)-(*x)+1;
	
	/* タイトルがあるかどうか */
	l=klen2(ms[0]);
	if (l>wx) return(-1); /* parameter error : title too long */
	*tx=-1; /* タイトルなしの印 */
	otx=0;
	if (l>0) { /* タイトル有り */
		if (bdata->ti_mode) { /* 右 */
			*tx=*ex-l;
		} else { /* 左 */
			*tx=*x; /* タイトル表示座標 */
			otx=l;
		}
	}
	
	switch (bdata->md_each) {
		case 2: /* 固定分配モード */
			w=bdata->wx;
			if (w==0) w=maxlen2(ms,n,1); /* タイトルを除く */
			goto BW1;
		case 0: /* 自動分配モード */
			/* １項目当りの幅 */
			w=(wx-l-bdata->wcol)/n; /* (バー幅 - タイトル幅 -wcol) / 項目数 */
						/* -wcolはバーの左端にも空きを入れるため */
		    BW1:
			/* １項目表示幅 */
			mlen=w-bdata->wcol;	 /* 表示時は項目の左にスペースが入るから */
			if (mlen<=0) return(-2); /* 幅が狭すぎる：エラー */
			
			/* 座標計算 */
			for(i=1;i<=n;i++) rsx[i]=*x+otx+(i-1)*w+bdata->wcol;
			break;
		case 1: /* 項目幅配分モード */
			mlen=0;
			/* 座標計算 */
			rsx[1]=*x+otx+bdata->wcol;
			for(i=2;i<=n;i++) rsx[i]=rsx[i-1]+klen2(ms[i-1])+bdata->wcol;
			break;
	}
	
	/* 情報 store */
	return(mlen);
}
