/*
	setkeyword.c
	KEYWORD 選択 メニュー
	1994/02/28 1994/03/05
*/

#include "fswch.h"

#define LEFT (29)
#define RIGHT (28)
#define UP (30)
#define DOWN (31)
#define EXEC (18)
#define QUIT (17)
#define ESCKEY (0x1b)

#define NOM "0m"
#define REV "7m"

char us_sk[50]; /* 表示フォーマット */
const int firstline = 14; /* 表示開始行 */
const int w = 4; /* 横並びの数 */

void locdisp_sk(int x,char a){
	const char *clr[]={ ESC_RED,ESC_WHITE,ESC_YELLOW,"" };
	const char *d[]={ "なし", "設定", "否定", "" }; /* 選択値 */
	if( a=='R' ) cputs(ESC REV);
	else
	if( a=='N' ) cputs(ESC NOM);
	else return;
	cprintf(us_sk,firstline+(x/w),(x%w)*(80/w),
		keyword[x],clr[skey[x]],d[skey[x]]);
}

void setkeyword( void ){ /* 設定メニュー */
	int m,i,b;
	char endf=OFF; /* メニュー終了フラグ */

	/* 出力書式の設定 */
	/* %d;%df [ ESC_SKYBULE %-W.Ws/%s%-4.4s ESC_WHITE ] */
	sprintf(us_sk,ESC "%%d;%%df[" ESC_SKYBULE
		"%%-%d.%ds/%%s%%-%d.%ds" ESC_WHITE "]",
		80/w-9,80/w-9,4,4);

	/* firstline 以降の消去 */
	cprintf(ESC"%d;0f"ESC"0J",firstline);

	/* 設定項目の表示 */
	for(m=0;keyword[m][0]!=NULL;m++)
		locdisp_sk(m,'N'); /* m : 設定項目の数 */

	i=b=0;
	/* カーソル選択 */
	while(endf==OFF){
		locdisp_sk(b,'N');
		locdisp_sk(i,'R');
		b = i;
		switch (getop()) {
		case LEFT: /* カーソル ← */
			i = (i+m-1) % m;
			break;
		case RIGHT: /* カーソル → */
			i = (i+1) % m;
			break;
		case UP: /* カーソル ↑ */
			i = (i+m-w) % m;
			break;
		case DOWN: /* カーソル ↓ */
			i = (i+w) % m;
			break;
		case EXEC: /* 実行 key */
		case 0x0d: /* RETkey */
			/* ちょっと危険な設定 OFF SELLECT NONSELLCT */
			/* トグル動作 */
			skey[i] = (skey[i]+1) % 3;
			break;
		case QUIT: /* 取消 key */
		case ESCKEY: /* ESC key */
			endf=ON;
			break;
		default: ;
		} /* switch */
	} /* while(endf==OFF) */
	locdisp_sk(i,'N');
	/* キー選択カウント */
	for(ckey=i=0;i<kno;i++)
		if(skey[i]==SELLECT) ckey++;
}
