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

int mini_menu_mouse(btn,sp,sx,sy,ex,ey,mnlen,md,rcode)
/* mini_menu()でマウスの座標から何がセレクトされているかを調べる */
int btn,*sp,sx,sy,ex,ey,mnlen,rcode[2];
_MENU_DATA *md;
{
int x,y,x1,y1,lb,rb;
	/* ボタン状態 */
	rb=btn&0xffff;
	lb=btn>>16;
	
	/* 右ボタン */
	if (rb==-1) { /* 押されっぱなし */
		/* なおかつ、左は押されていないか押されっぱなし：無効 */
		if (lb!=1) return(0);
		/* 左が押された */
		rb=0; /* 右無効 */
	}
	if (rb==1) return(ESC); /* 押された */
	if ((md->mouse&BIT7) && !lb) return(0); /* 左ボタンが押されていなければ以後無効 */
	
	/* マウス座標取得 -> テキスト座標化 */
	x=MS_CURGT();
	y=(x&0xffff)/16;
	x>>=(16+3); /* >>16/8 */
	
	/* 項目選択有効座標範囲判定 */
	x1=sx+1+md->lcol;
	y1=sy+1+md->aline;
	
	if (x<x1 || x>(ex-1-md->rcol) || y<y1 || y>(ey-1-md->bline)) {
		/* 項目選択有効範囲ではない */
		rcode[0]=rcode[1]=-1;
		return(0); /* 無効 */
	}
	
	/* 相対座標化 */
	x-=x1;
	y-=y1;
	
	/* 位置決定 */
	x1=0;
	y1=rcode[0]&0xffff;
	
	if (x>=x1 && x<x1+mnlen) { /* この範囲内にあった */
		if (*sp!=y+1) { /* ポイントが動いた時のみ */
			/* キーによりポイントが移動したがマウスは動いていない時無効 */
			if (x1==y1 && y==rcode[1]) return(0); /* 無効 */
			*sp=y+1;
			rcode[0]=(x<<16)|x1;
			rcode[1]=y;
			return(2); /* 2 = point move */
		}
		/* ポイントは動いていない */
		rcode[0]=(x<<16)|x1;
		rcode[1]=y;
		/* 左ボタンが押されている：リターン */
		/* 左ボタンは押されていないか押されっぱなし：無効 */
		return(lb==1? CR:0);
	}
	/* 項目上にない */
	rcode[0]=rcode[1]=-1;
	return(0); /* 無効 */
}
