/* ｍｅｎｕｂａｒでマウスの座標から何がセレクトされているかを調べる */

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

int bar_mouse(btn,sp,y,n,mlen,tx,rsx,ms,xx,mode)
int btn,*sp,y,n,mlen,tx,rsx[],*xx,mode;
unchar *ms[];
{
int x,i,p,lb,rb;
	/* ボタン状態 */
	rb=btn&0xffff;
	lb=btn>>16;
	
	/* 右ボタン */
	if (rb==-1) { /* 押されっぱなし */
		/* なおかつ、左は押されていないか押されっぱなし：無効 */
		if (lb!=1) return(0);
		/* 左が押された */
		rb=0; /* 右無効 */
	}
	if (rb==1) return(ESC); /* 押された */
	if (mode && !lb) return(0); /* 左ボタンが押されていなければ以後無効 */
	
	/* マウス座標取得 -> テキスト座標化 */
	x=MS_CURGT();
	if ((x&0xffff)/16!=y) return(0); /* Ｙ座標判定：無効 */
	x>>=(16+3); /* >>16/8 */
	
	if (tx>0 && x>=tx && x<=tx+klen2(ms[0])-1) {
		/* タイトル中にいる：移動 */
		*xx=-1;
		
		/* 左ボタン */
		if (lb!=1) return(0); /* 押されていない/押されっぱなし：無効 */
		/* 左ボタンが押された */
		return(-CheckMESXY()); /* 移動 */
	}
	
	/* 位置決定 */
	for (i=1;i<=n;i++) {
		if (x>=rsx[i] && x<rsx[i]+(mlen>0? mlen:klen2(ms[i]))) {
			if (i!=*sp) { /* ポイントが動いた時のみ */
				/* キーによりポイントが移動したがマウスは動いていない時 */
				if (rsx[i]==(*xx&0xffff)) return(0); /* 無効 */
				*sp=i;
				*xx=(x<<16)|rsx[i];
				return(1); /* point move */
			}
			/* ポイントは動いていない */
			*xx=(x<<16)|rsx[i];
			/* 左ボタンが押されている：リターン */
			/* 左ボタンは押されていないか押されっぱなし：無効 */
			return(lb==1? CR:0);
		}
	}
	/* 項目上にない */
	*xx=-1;
	return(0); /* 無効 */
}
