#include "wsubform.h"	//サブフォーム専用ヘッダファイルをインクルードする。
#include <signal.h>

#define Textbox	1
#define Grid	2
#define Panel	3

#define Tret	199
#define Gret	299
#define Pret	399

#define FX	40
#define FY	15

extern int wmode;
extern char gridtitles[MAX_POS][MAX_LEN];

extern TextBox	 *begin;
extern TextBox	 *tp;

typedef struct stat Dir;
static Dir dirptr;
static Dir  *fileptr = &dirptr;

char tmp[256];

static char tategaki[] = "本ライブラリを使用することで、デ｜タベ｜ス等からの行列情報の表示及び、入出力操作を行うことが出来ます。操作出来るタイプの型として、現在のバ｜ジョンではテキスト型、通貨型、数値型の３つのタイプの値を操作可能になっています。まず、カ｜ソルをラベルを付ける左端位置まで移動します。ｓキ｜を押下し、次にラベルの右端を決定するためカ｜ソルを移動します。決定した左端位置には＾でマ｜クされます。このとき、カ｜ソルは１行以上下に移動してください。３行下に移動すると２行のラベルを作成することになります。決定は＾Ｅで行います。（と）で囲まれたラベルエリアが定義されます。";

int subform(void)
{
	int i,j,k,m,n;
	int ret;
	char f[128];
	int xcol,rows;
	int maxtext;
	char s[256];
	int len;
	int win;

//	signal(SIGINT,SIG_IGN);

	strcpy(f,"_genkou.def");

	initscr();

	xcol = COLS;
	rows = LINES;

	cbreak();
	noecho();
	keypad(stdscr, TRUE);
	meta(stdscr, TRUE);

	if(stat(f,fileptr) != 0)
	{
		echo();
		endwin();
		printf("canot find %s\n",f);
		exit(0);
	}

	for(i=0;i<MAX_POS;i++)
		memset(gridtitles[i],'\0',MAX_LEN);

	xcol = sf_wsubform(3,xcol,rows,5,5,f);
	wrefresh(xt[3].form);

	xcol = sf_wsubform(4,xcol,rows,10,10,f);
	wrefresh(xt[4].form);

	xcol = sf_wsubform(0,xcol,rows,FX,FY,f);

	maxtext = sf_textbox(3,5,5,f);
	sf_tcep(3,0,3,"０. はじめに");
	wrefresh(xt[3].form);

	maxtext = sf_textbox(4,10,10,f);
	sf_tcep(4,0,3,"０. はじめに");
	wrefresh(xt[4].form);

	maxtext = sf_textbox(0,FX,FY,f);
	sf_tcep(0,0,3,"０. はじめに");
	wrefresh(xt[0].form);

	xcol = sf_wsubform(2,140,rows,0,44,"_footer2.def");
	sf_gcep(2,0,0,3,"サブフォームのサンプル");
	wrefresh(xt[2].form);

	for(i=0;i<MAX_POS;i++)
		memset(gridtitles[i],'\0',MAX_LEN);

	len = strlen(tategaki);
	for(i=0,k=0,m=ft[0].lcol-1;i<ft[0].lcol;i++,m--)
	{
		for(j=0;j<(ft[0].ey-ft[0].sy)+1;j++)
		{
			if (len < k)
				break;
			sprintf(s,"%c%c",tategaki[k],tategaki[k+1]);
			sf_gput(0,m,j,s);
			k++;
			k++;
		}
	}

	xcol = sf_wsubform(1,xcol,rows,0,0,"_header2.def");
	sf_gcep(1,0,0,3,"サブフォームライブラリ詳細設計書（NCURSESを使用した画面設計ライブラリ）ｖ１．０．７");
	wrefresh(xt[1].form);

	ft[0].pos[0].col = 0;
	ft[0].pos[0].line = 0;
	ft[0].st[0][0].col = 0;
	ft[0].st[0][0].line = 0;

	win = 0;
	ret = Gret;
	tp = begin->next;

	while(TRUE)
	{
		if(ret == Tret || ret == Pret)//リターンコードでグリッドかテキストボックスを切り替える。
			ret = sf_grid(win,maxtext,xcol);
		else
			ret = sf_formtext(win,maxtext, xcol);
		if (win == 0)
			wrefresh(xt[0].form);
		switch(ret)
		{
		case -1:
			echo();
			endwin();
			exit(0);
			break;

	//for textbox
		case 100: //ESC　キーでプログラムを終了することにする。
		//	if(popmsg(FX+2,FY+2,"Exit textbox area in Subform?") == 1)
				goto end;
		//	ret = Gret;  //２つのウインドウ関数を同時に利用するためリターンコードをセットしておく。
			break;
		case 101: //F1
			ret = Gret;
			break;
		case 102: //F2
			ret = Gret;
			break;
		case 103: //F3　テキストボックス内の文字を左詰にする。
			i = sf_status(0,Textbox,'n');
			sprintf(tmp,"%s",tp->s);
			sf_tcep(0,i,2,tmp);
			ret = Gret;
			break;
		case 104: //F4
			break;
		case 105: //F5
			ret = Gret;
			break;
		case 106: //F6
			ret = Gret;
			break;
		case 107: //F7
			ret = Gret;
			break;
		case 108: //F8
			ret = Gret;
			break;
		case 109: //F9
			ret = Gret;
			break;
		case 110: //F10
			ret = Gret;
			break;
		case 111: //F11
			ret = Gret;
			break;

	//for grid
		case 200: //ESC　キーでプログラムを終了する。
		//	if(popmsg(FX+2,FY+2,"Exit grid area in Subform?") == 1)
				goto end;
			ret = Pret;
			break;
		case 201: //F1
			ret = Pret;
			break;
		case 202: //F2
			ret = Pret;
			break;
		case 203: //F3
			ret = Pret;
			break;
		case 204: //F4
			ret = Pret;
			break;
		case 205: //F5
			ret = Pret;
			break;
		case 206: //F6　セル内文字を読みとりメッセージウインドウに表示する。
			i = sf_status(0,Grid,'X');
			j = sf_status(0,Grid,'Y');
			sf_gget(0,i,j,tmp);
			errmsg(FX+2,FY+2,tmp);
			ret = Pret;
			break;
		case 207: //F7
			ret = Pret;
			break;
		case 208: //F8
			ret = Pret;
			break;
		case 209: //F9
			ret = Pret;
			break;
		case 210: //F10
			ret = Pret;
			break;
		case 211: //F11
			ret = Pret;
			break;
		case 299: //F11
			win++;
			if (win > 4)
				win = 0;
			ret = Pret;
			break;

		default:
			break;
		}
	}

end:
	echo();
	endwin();
}

int main(void)
{
	subform();
}

