#include "wsubformHTML.h"	//サブフォーム専用ヘッダファイルをインクルードする。
#include "fcgi_stdio.h"	//FastCGI用ヘッダファイルをインクルードする。

extern char gridtitles[MAX_POS][MAX_LEN];	//wsubformHTMLが利用するgridのタイトル。

extern TextBox	 *begin;	//textboxで使用する連鎖ポインタの開始位置
extern TextBox	 *tp;	//textboxで使用する連鎖ポインタ

typedef struct stat Dir;	//ファイル操作用
static Dir dirptr;
static Dir  *fptr = &dirptr;

char tmp[MAX_STR];
char COMMANDNAME[256];	//実行するCGI自身の名前
//autono[][]の最初の配列[0]にはjohoIDの数値が入り、次の配列[1]に配列番号が入る
int autono[10000][2];
int autoindex;

static int sqlcode = 0;	//PostgreSQLの返すコード

int DBcount[MAX_FORM];	//wsubformHTMLで利用するDBの現在の最大行数
extern char KEY[256][MAX_STR];	//INSERTとUPDATEが使用する更新項目

int DBConnect(void)
{
	// DB接続用変数宣言です。DB名、ユーザ名、パスワードを設定してください。
	EXEC SQL BEGIN DECLARE SECTION;
		char dbname[12];
		char user[12];
		char passwd[12];
	EXEC SQL END DECLARE SECTION;

	strcpy(dbname,"apsch");
	strcpy(user,"cms");
	strcpy(passwd,"cms");

#ifdef DEBUG
	// ECPGデバッグ文出力
	ECPGdebug (0, stderr);
#endif

	// 接続
	memset (sqlca.sqlstate, '0', 5);
	EXEC SQL CONNECT TO :dbname AS dbConnection user :user USING :passwd;
	if (memcmp (sqlca.sqlstate, "00000", 5) != 0)
	{
		sprintf(tmp,"%s->CONNECT エラー。終了します。:%d - %s",COMMANDNAME,sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
	//	logmsg(tmp);
		exit (EXIT_FAILURE);
	}
}

int Fetch_yakuzai_shiyoukijun_Fetch2(int no, int line)
{
	static char DBbuff[MAX_STR];
	int i = 0;
	char *qs;
	int qcount;

	DBConnect();

	memset (sqlca.sqlstate, '0', 5);

	EXEC SQL BEGIN DECLARE SECTION;
		int rec_count;
		char	 key[256][MAX_STR];
		int	 ikey[256];
		char	yakuzaimei[128 + 1];	//TEXT
		char	meishokubun[2 + 1];	//TEXT
		int		meishoedaban;		//NUMERIC
		int		kisyakubaisuu;		//NUMERIC
		int		shiyounissuu;		//NUMERIC
		int		shiyoukaisuu;		//NUMERIC
	EXEC SQL END DECLARE SECTION;

	sqlcode = 0;
	DBcount[no] = 0;

	rec_count = 0;

	if((qs = getenv("QUERY_STRING")) != (char *)NULL)
	{
		qcount = query_getHTML(qs,'&');
		for(i=0;i < qcount;i++)
		{
			sprintf(key[i],"%s",qt.get[i]);
		}
	}
	else
	{
		sprintf(key[0],"NONE");
		printf("%s<br>\n",key[0]);
	}

//	以下の部分はリレーションテーブルを利用する場合にコメントを外して使用可能にして利用してください。
//	sprintf(KEY[0],"%s",key[0]);

//	検索する対象は外部変数の場合splitDbbuffからホスト変数にコピーして利用しなければならない。
//	sprintf(key[0],"%s",ft[1].splitDBbuff[0][13]);

	// 検索するレコードの行数を取得
	EXEC SQL 
	SELECT 
	COUNT(*)
	INTO :rec_count
	FROM	yakuzai_shiyoukijun
	WHERE meishokubun = :key[0];


	// SELECTエラー 
	if(memcmp (sqlca.sqlstate, "00000", 5) != 0)
	{
		sprintf(tmp,"%s->SELECT COUNTエラー:%d - %s",COMMANDNAME,sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
	//	logmsg(tmp);
		return(-1) ;
	}

	DBcount[no] = rec_count;

	EXEC SQL DECLARE yakuzai_shiyoukijun_Fetch2_CURSOR CURSOR FOR 
	SELECT 
		coalesce(yakuzaimei,' ','0'),
		coalesce(meishokubun,' ','0'),
		meishoedaban,
		kisyakubaisuu,
		shiyounissuu,
		shiyoukaisuu
	FROM	yakuzai_shiyoukijun
	WHERE meishokubun = :key[0]
	ORDER BY meishokubun;

	// カーソルオープン
	EXEC SQL OPEN yakuzai_shiyoukijun_Fetch2_CURSOR;

	// CURSOR OPENエラー 
	if (memcmp (sqlca.sqlstate, "00000", 5) != 0)
	{
		sprintf(tmp,"%s->CURSOR OPENエラー:%d - %s",COMMANDNAME,sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
	//	logmsg(tmp);
		return(-1);
	}

	for(i=0;i<DBcount[no];i++)
	{
		EXEC SQL FETCH yakuzai_shiyoukijun_Fetch2_CURSOR INTO
			:yakuzaimei,
			:meishokubun,
			:meishoedaban,
			:kisyakubaisuu,
			:shiyounissuu,
			:shiyoukaisuu;

	// テーブル項目をsplitbDBbuff[][]にセットする
		sf_assgetDB(no,i,0,yakuzaimei,128 + 1);
		sf_assgetDB(no,i,1,meishokubun,2 + 1);
		sf_to_text(meishoedaban,DBbuff);	//NUMERIC型(int)を文字に変換する。
		sf_assgetDB(no,i,2,DBbuff,2 + 1);
		sf_to_text(kisyakubaisuu,DBbuff);	//NUMERIC型(int)を文字に変換する。
		sf_assgetDB(no,i,3,DBbuff,2 + 1);
		sf_to_text(shiyounissuu,DBbuff);	//NUMERIC型(int)を文字に変換する。
		sf_assgetDB(no,i,4,DBbuff,2 + 1);
		sf_to_text(shiyoukaisuu,DBbuff);	//NUMERIC型(int)を文字に変換する。
		sf_assgetDB(no,i,5,DBbuff,2 + 1);

	}
	// カーソルクローズ 
	EXEC SQL CLOSE yakuzai_shiyoukijun_Fetch2_CURSOR;

	DBcount[no] = rec_count;

	// 結果チェック
	if (sqlca.sqlcode == 0)
	{
		sprintf(tmp,"%s->FETCH結果チェック:%d - %s",COMMANDNAME,sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
	//	logmsg(tmp);
	}
	// 切断
	sqlca.sqlcode = 0;
	EXEC SQL DISCONNECT dbConnection;
	return(0);
}

// ★★DBから入出力(画面)ウインドウに書き込みます。
void yakuzai_shiyoukijun_Fetch2_text_writeHTML(int no, int post, int line,int maxcol, char **db_titles)
{
	int i;
	int j;
	int k;
	int x;
	char s[MAX_TMP];

	printf("Content-type: text/html; charset=utf-8\n\n");
	printf("<html lang=\"ja\">\n");
	printf("<head>\n");
	printf("<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n"); 
	printf("<title>form text_writeHTML page</title>\n");
	printf("<link rel=stylesheet type=\"text/css\" href=\"http://codoo2hk.corede.net/yakuzai_shiyoukijun_Fetch.css\">\n");

printf("<script language=\"JavaScript\">\n\n");
printf("<!--\n");
printf("function MkArray(n)\n");
printf("{\n");
printf("	this.length = n;\n");
printf("	for (var i=1;i<=n;i++)\n");
printf("	{\n");
printf("		this[i] = 0\n");
printf("		return this\n");
printf("	}\n");
printf("}\n");
printf("//-->\n");
printf("</script>\n\n");
	printf("</head>\n");
	printf("<body bgcolor=\"#ffffff\">\n");
	printf("<br>\n");
	printf("<hr size=\"3\" color=\"#000000\">");
	printf("<a name=\"form%05d\"></a>\n",line);
	printf("%05d\n",line+1);
	printf("<form name=\"menu\" action=\"\">\n");
	printf("<a href=\"http://codoo2hk.corede.net/index.html\" target=\"_parent\">[TOPへ]</a>\n");
	printf("<a href=\"#\" onClick=\"history.back(); return false;\">[前に戻る]</a>\n");
	printf("<form>\n");
// この下に実行するCGIへのPOSTメソッドを記述してください。以下がサンプルです。
	//	printf("<form name=\"Fetch\" method=\"post\" action=\"/cgi-bin/otodoke_Fetch.fcgi?field=%s\">\n",KEY[0]);
	//	printf("<input type=\"submit\" value=\"新規追加画面へ\"><br>\n");

	//送信はPOSTを使用します。
//テーブル名_Menu.pgc のコードを利用する場合、デバッグ時の送信試験はGETを使用すると便利です。
	printf("<form name=\"form%05d\" style=\"float:left\" method=\"post\" action=\"/cgi-bin/yakuzai_shiyoukijun_Update2.fcgi\">\n",line);
// 以下のサンプルは削除するかどうかの警告を行うダイアログを表示するサンプルです。
//	printf("<form name=\"yakuzai_shiyoukijun_Delete_all\" method=\"post\" action=\"/cgi-bin/yakuzai_shiyoukijun_Delete.fcgi?field00=%s\">\n",KEY[0]);
printf("<script type=\"text/javascript\">\n\n");
printf("<!--\n");
printf("function yakuzai_shiyoukijun_Delete(n)\n");
printf("{\n");
printf("	if(window.confirm(\"削除されます。よろしいですか？\") == true)\n");
printf("	{\n");
printf("		alert(\"この顧客に関連する全てを削除します。\")\n");
printf("		document.yakuzai_shiyoukijun_Delete_all.submit();\n");
printf("	}\n");
printf("}\n");
printf("//-->\n");
printf("</script>\n\n");
//	printf("<input tabindex=1 accesskey=\"A\" type=\"button\" value=\"顧客削除\" onclick=\"yakuzai_shiyoukijun_Delete()\">\n");
	printf("<input accesskey=\"C\" tabindex=1 type=\"submit\" style=\"float:left\" value=\"実行\" onclick=\"submit%d()\">\n",line);

	printf("<table border=0>\n");
	printf("<tr>\n");
	k = 0;
	sf_tbegin();
	for(i=0;tp->next !=(TextBox *)NULL;i++)
	{
		if(ft[no].splitDBbuff[line][i] != (char *)NULL)
		{
			switch(ft[no].pos[i].ftype)
			{
			case TEXT:
				if(ft[no].pos[i].stype == 1)
				{
					printf("%s:",*(db_titles+i));
				if(ft[no].pos[i].action == 0)
				{
//以下の部分はコンボボックスを定義する場合に利用して下さい。その場合 テーブル名_Menu.pgc のコードを利用します。
//テーブル名_Menu.pgc のコードはMakeTextBox()の関数呼び出しを省いて利用してください。
//連結先のDBcount[フォーム番号]は必ず確認してください。
#ifdef COMBOBOX
					switch(i)
					{
					case 0:
//この下に記述されているJavaScriptを実行することで更新後の表示行を元に戻ることが出来ます。
printf("<script language=\"JavaScript\">\n\n");
printf("<!--\n");
printf("function submit%d()\n",line);
printf("{\n");
printf("	document.form%05d.tmp.value = \"%05d\";\n",line,line);
printf("}\n");
printf("\n");
printf("function select_1st%d()\n",line);
printf("{\n");
printf("	var index1 = 0;\n");
printf("//	var index2 = 0;\n");
printf("	s1 = new MkArray(%d);\n",DBcount[3]);
printf("//	s2 = new MkArray(%d);\n",DBcount[3]);
for(x=0;x<DBcount[3];x++)
{
printf("		s1[%d] = \"%s\";\n",x,ft[3].splitDBbuff[x][1]);
printf("	//	s2[%d] = \"%s\";\n",x,ft[3].splitDBbuff[x][0]);
}
printf("	index1 = document.form%05d.field%02d.selectedIndex;\n",line,k);
printf("	index2 = document.form%05d.field%02d.selectedIndex;\n",line,k);
//printf("	alert(document.form%05d.field%02d.selectedIndex);\n",line,k);
printf("	document.form%05d.field%02d.value = s1[index1-1];\n",line,k+1);
printf("//	document.form%05d.field%02d.value = s2[index2-1];\n",line,k+3);
printf("	submit%d();\n",line);
printf("	document.form%05d.submit();\n",line);
printf("}\n");
printf("function select_2nd%d()\n",line);
printf("{\n");
printf("	submit%d();\n",line);
printf("	document.form%05d.submit();\n",line);
printf("}\n");
printf("\n");
printf("//-->\n");
printf("</script>\n\n");
						printf("<select name=\"field%02d\" size=\"1\" maxlength=\"64\" onchange=\"select_1st%d()\">\n",k,line);
						for(j=0;j<DBcount[連結先のフォーム番号を入れます];j++)
						{
							if(!strcmp(ft[no].splitDBbuff[line][i],ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます]))
								printf("<option value=\"%s\" selected> %s</option>\n",ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます],ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます]);
							else
								printf("<option value=\"%s\"> %s</option>\n",ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます],ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます]);
						}
						break;
					case 1:
				//	郵便番号
						printf("%s:",*(db_titles+i));
printf("<script type=\"text/javascript\">\n\n");
printf("<!--\n");
printf("function yubin_search%05d()\n",line);
printf("{\n");
printf("	var zipcode%05d = document.getElementById('zipcode%05d').value;\n",line,line);
printf("	window.open('http://codoo2hk.corede.net/cgi-bin/yubin_Fetch.cgi?field='+zipcode%05d+'&amp;field=%05d'+'&amp;field=2'+'&amp;field=3');\n",line,line);
printf("}\n");
printf("//-->\n");
printf("</script>\n\n");
						printf("<input type=\"text\" id=\"zipcode%05d\" name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" onchange=\"yubin_search%05d()\">\n",line,k,ft[no].pos[i].len/2,ft[no].splitDBbuff[line][i],ft[no].pos[i].len,line);
						break;
					case 2:
				//	都道府県
						printf("%s:",*(db_titles+i));
						printf("<select name=\"field%02d\" id=\"todofuken\" size=\"1\">\n",k);
						printf("<option value=\"\">選択なし</option>\n");
						for(j=0;j<26;j++)
						{
							if(!strcmp(ft[no].splitDBbuff[line][i],prefecture[j]))
							{
								printf("<option value=\"%s\" selected>%s</option>\n",prefecture[j],prefecture[j]);
							}
							else
							{
								printf("<option value=\"%s\">%s</option>\n",prefecture[j],prefecture[j]);
							}
						}
						printf("</select>\n");
						break;
					case 3:
				//	住所１
						printf("%s:",*(db_titles+i));
						printf("<input type=\"text\" id=\"address\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\">\n",k,k,k,ft[no].pos[i].len/2,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
						break;
						break;
					default:
						printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
						printf("</select>\n");
						break;
					}
#else
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
#endif
				}
				else
				{
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" readonly >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
				}
					k++;
				}
				break;
			case DATE:
				if(ft[no].pos[i].stype == 1)
				{
					printf("%s:",*(db_titles+i));
				if(ft[no].pos[i].action == 0)
				{
					printf("<input type=\"date\" tabindex=%d name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
				}
				else
				{
					printf("<input type=\"date\" tabindex=%d name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" readonly >\n",k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
				}
					k++;
				}
				break;
			case NUMERIC:
				if(ft[no].pos[i].stype == 1)
				{
					printf("%s:",*(db_titles+i));
				if(ft[no].pos[i].action == 0)
				{
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
				}
				else
				{
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" readonly >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
				}
					k++;
				}
				break;
			case BOOL:
				if(ft[no].pos[i].stype == 1)
				{
					printf("%s:",*(db_titles+i));
				if(ft[no].pos[i].action == 0)
				{
					if(ft[no].splitDBbuff[line][i][0] == 'f')
						printf("<input type=\"checkbox\" tabindex=%d name=\"field%02d\" value=\"t\">\n",k,k);
					else
						printf("<input type=\"checkbox\" tabindex=%d name=\"field%02d\" value=\"%s\" checked>\n",k,k,ft[no].splitDBbuff[line][i]);
				//	printf("<input type=\"text\" name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"10\">\n",k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
				}
				else
				{
				//この部分はチェックボックスに使用出来ますが更新や追加には使用出来ません。表示のみに利用可能です。
					if(ft[no].splitDBbuff[line][i][0] == 'f')
						printf("<input type=\"checkbox\" tabindex=%d name=\"field%02d\" value=\"%s\" readonly>\n",k,k,ft[no].splitDBbuff[line][i]);
					else
						printf("<input type=\"checkbox\" tabindex=%d name=\"field%02d\" value=\"%s\" checked readonly>\n",k,k,ft[no].splitDBbuff[line][i]);
				//	printf("<input type=\"text\" name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"10\" readonly>\n",k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
				}
					k++;
				}
				break;
			case CURRENCY:
				if(ft[no].pos[i].stype == 1)
				{
					printf("%s:",*(db_titles+i));
				if(ft[no].pos[i].action == 0)
				{
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"15\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
				}
				else
				{
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"15\" readonly >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
				}
					k++;
				}
				break;
			case DOUBLE:
				if(ft[no].pos[i].stype == 1)
				{
					printf("%s:",*(db_titles+i));
				if(ft[no].pos[i].action == 0)
				{
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
				}
				else
				{
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" readonly >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
				}
					k++;
				}
				break;
			default:
				if(ft[no].pos[i].stype == 1)
				{
					printf("%s:",*(db_titles+i));
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
					k++;
				}
				break;
			}
			sprintf(s,"%s",ft[no].splitDBbuff[line][i]);
			sf_tput(no,k,s);
			sf_tnext();
		}
		else
		{
			sf_tnext();
		}
	}
	if(ft[no].splitDBbuff[line][i] != (char *)NULL)
	{
		switch(ft[no].pos[i].ftype)
		{
		case TEXT:
			if(ft[no].pos[i].stype == 1)
			{
				printf("%s:",*(db_titles+i));
			if(ft[no].pos[i].action == 0)
			{
//以下の部分はコンボボックスを定義する場合に利用して下さい。その場合 テーブル名_Menu.pgc のコードを利用します。
//テーブル名_Menu.pgc のコードはMakeTextBox()の関数呼び出しを省いて利用してください。
//連結先のDBcount[フォーム番号]は必ず確認してください。
#ifdef COMBOBOX
				switch(i)
				{
				case 0:
//この下に記述されているJavaScriptを実行することで更新後の表示行を元に戻ることが出来ます。
printf("<script language=\"JavaScript\">\n\n");
printf("<!--\n");
printf("function submit%d()\n",line);
printf("{\n");
printf("	document.form%05d.tmp.value = \"%05d\";\n",line,line);
printf("}\n");
printf("\n");
printf("function select_1st%d()\n",line);
printf("{\n");
printf("	var index1 = 0;\n");
printf("//	var index2 = 0;\n");
printf("	s1 = new MkArray(%d);\n",DBcount[3]);
printf("//	s2 = new MkArray(%d);\n",DBcount[3]);
for(x=0;x<DBcount[3];x++)
{
printf("		s1[%d] = \"%s\";\n",x,ft[3].splitDBbuff[x][1]);
printf("	//	s2[%d] = \"%s\";\n",x,ft[3].splitDBbuff[x][0]);
}
printf("	index1 = document.form%05d.field%02d.selectedIndex;\n",line,k);
printf("//	index2 = document.form%05d.field%02d.selectedIndex;\n",line,k);
//printf("	alert(document.form%05d.field%02d.selectedIndex);\n",line,k);
printf("	document.form%05d.field%02d.value = s1[index1-1];\n",line,k+1);
printf("//	document.form%05d.field%02d.value = s2[index2-1];\n",line,k+3);
printf("	submit%d();\n",line);
printf("	document.form%05d.submit();\n",line);
printf("}\n");
printf("function select_2nd%d()\n",line);
printf("{\n");
printf("	submit%d();\n",line);
printf("	document.form%05d.submit();\n",line);
printf("}\n");
printf("\n");
printf("//-->\n");
printf("</script>\n\n");
					printf("<select name=\"field%02d\" tabindex=%d size=\"1\" maxlength=\"64\" onchange=\"select_1st%d()\">\n",k,k,line);
					for(j=0;j<DBcount[連結先のフォーム番号を入れます];j++)
					{
						if(!strcmp(ft[no].splitDBbuff[line][i],ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます]))
							printf("<option value=\"%s\" selected> %s</option>\n",ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます],ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます]);
						else
							printf("<option value=\"%s\"> %s</option>\n",ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます],ft[連結先のフォーム番号を入れます].splitDBbuff[j][連結先の項目番号を入れます]);
					}
					printf("</select>\n");
					break;
					case 1:
				//	郵便番号
						printf("%s:",*(db_titles+i));
printf("<script type=\"text/javascript\">\n\n");
printf("<!--\n");
printf("function yubin_search%05d()\n",line);
printf("{\n");
printf("	var zipcode%05d = document.getElementById('zipcode%05d').value;\n",line,line);
printf("	window.open('http://codoo2hk.corede.net/cgi-bin/yubin_Fetch.cgi?field='+zipcode%05d+'&amp;field=%05d'+'&amp;field=2'+'&amp;field=3');\n",line,line);
printf("}\n");
printf("//-->\n");
printf("</script>\n\n");
						printf("<input type=\"text\" id=\"zipcode%05d\" name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" onchange=\"yubin_search%05d()\">\n",line,k,ft[no].pos[i].len/2,ft[no].splitDBbuff[line][i],ft[no].pos[i].len,line);
						break;
					case 2:
				//	都道府県
						printf("%s:",*(db_titles+i));
						printf("<select name=\"field%02d\" id=\"todofuken\" size=\"1\">\n",k);
						printf("<option value=\"\">選択なし</option>\n");
						for(j=0;j<26;j++)
						{
							if(!strcmp(ft[no].splitDBbuff[line][i],prefecture[j]))
							{
								printf("<option value=\"%s\" selected>%s</option>\n",prefecture[j],prefecture[j]);
							}
							else
							{
								printf("<option value=\"%s\">%s</option>\n",prefecture[j],prefecture[j]);
							}
						}
						printf("</select>\n");
						break;
					case 3:
				//	住所１
						printf("%s:",*(db_titles+i));
						printf("<input type=\"text\" id=\"address\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\">\n",k,k,k,ft[no].pos[i].len/2,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
						break;
				default:
					printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
					break;
				}
#else
				printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
#endif
			}
			else
			{
				printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" readonly >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
			}
			}
			break;
		case DATE:
			if(ft[no].pos[i].stype == 1)
			{
				printf("%s:",*(db_titles+i));
			if(ft[no].pos[i].action == 0)
			{
				printf("<input type=\"date\" tabindex=%d name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
			}
			else
			{
				printf("<input type=\"date\" tabindex=%d name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" readonly >\n",k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
			}
			}
			break;
		case NUMERIC:
			if(ft[no].pos[i].stype == 1)
			{
				printf("%s:",*(db_titles+i));
			if(ft[no].pos[i].action == 0)
			{
				printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
			}
			else
			{
				printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" readonly >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
			}
			}
			break;
		case BOOL:
			if(ft[no].pos[i].stype == 1)
			{
				printf("%s:",*(db_titles+i));
			if(ft[no].pos[i].action == 0)
			{
				if(ft[no].splitDBbuff[line][i][0] == 'f')
					printf("<input type=\"checkbox\" tabindex=%d name=\"field%02d\" value=\"t\">\n",k,k);
				else
					printf("<input type=\"checkbox\" tabindex=%d name=\"field%02d\" value=\"%s\" checked>\n",k,k,ft[no].splitDBbuff[line][i]);
			//	printf("<input type=\"text\" name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"1\">\n",k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
			}
			else
			{
			//この部分はチェックボックスに使用出来ますが更新や追加には使用出来ません。表示のみに利用可能です。
				if(ft[no].splitDBbuff[line][i][0] == 'f')
					printf("<input type=\"checkbox\" tabindex=%d name=\"field%02d\" value=\"%s\" readonly>\n",k,k,ft[no].splitDBbuff[line][i]);
				else
					printf("<input type=\"checkbox\" tabindex=%d name=\"field%02d\" value=\"%s\" checked readonly>\n",k,k,ft[no].splitDBbuff[line][i]);
			//	printf("<input type=\"text\" name=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"1\" readonly>\n",k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
			}
			}
			break;
		case CURRENCY:
			if(ft[no].pos[i].stype == 1)
			{
				printf("%s:",*(db_titles+i));
			if(ft[no].pos[i].action == 0)
			{
				printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"15\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
			}
			else
			{
				printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"15\" readonly >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
			}
			}
			break;
		case DOUBLE:
			if(ft[no].pos[i].stype == 1)
			{
				printf("%s:",*(db_titles+i));
			if(ft[no].pos[i].action == 0)
			{
				printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
			}
			else
			{
				printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" maxlength=\"%d\" readonly >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i],ft[no].pos[i].len);
			}
			}
			break;
		default:
			if(ft[no].pos[i].stype == 1)
			{
				printf("%s:",*(db_titles+i));
				printf("<input type=\"text\" tabindex=%d name=\"field%02d\" class=\"field%02d\" size=\"%d\" value=\"%s\" >\n",k,k,k,ft[no].pos[i].len,ft[no].splitDBbuff[line][i]);
			}
			break;
		}
		sprintf(s,"%s",ft[no].splitDBbuff[line][i]);
		sf_tput(no,k,s);
	}
	printf("<input type=\"hidden\" tabindex=%d name=\"tmp\" size=\"4\" value=\"\" >\n");
	printf("</tr>\n");
	printf("</table>\n");
	printf("</form>\n");
}
// FETCHした後にHTMLのテーブルにDBの行列を書き込みます。
int yakuzai_shiyoukijun_Fetch2_grid_dispHTML(int no, int startline, int maxcol, int grid_ey, int grid_sy, int line)
{
	int i, j;
	char s[MAX_TMP];
	char hs[MAX_TMP];

	if((Fetch_yakuzai_shiyoukijun_Fetch2(no,line)) == 0)
	{
		for(i=startline;i<DBcount[no];i++)
		{
			for(j=0;j<maxcol;j++)
			{
				if(ft[no].cp[0][j].stype == 1)
					sf_gputDBHTML(no,i,j,startline,s);
			}
		}

		return(0);
	}
	else
	{
		return(-1);
	}
}


int subformHTML(void)
{
	int i;
	char s[MAX_STR];

	int startline;

	int line;
	setlocale(LC_ALL,"");

//----------------------------------------------------------------------------------
//下ののハイフンのラインまでの以下の関数はDBと画面の設計を実際のフォームに適用します。
//これらの関数が無い場合は設計情報はDB設計以外は反映されません。

	static int xcol = 141;
	static int rows = 25;

//for label
	static int label_length[] = {0};
	static int label_no[] = {0};
	static int label_align[] = {0};
	static char *label_text[1][128] = {""};
	static int label_x[] = {0};
	static int label_y[] = {0};
//for textbox
	static int textbox_length[] = {125,2,5,6,5,5,5,0};
	static int textbox_no[] = {0,1,2,3,4,5,6,0};
	static int textbox_align[] = {2,2,1,2,1,1,1,0};
	static int textbox_action[] = {0,0,0,0,0,0,0,0};
	static int textbox_skipstep[] = {1,1,1,1,1,1,1,0};
	static int textbox_field[] = {1,1,2,1,2,2,2,0};
	static int textbox_x[] = {0,0,0,0,0,0,0,0};
	static int textbox_y[] = {5,6,7,8,9,10,11,0};


//for grid
	static int cell_length[] = {123,2,2,2,2,2,0};
	static int cell_align[] = {2,2,1,1,1,1,0};
	static int cell_action[] = {0,0,0,0,0,0,0};
	static int grid_field[] = {1,1,2,2,2,2,0};
	static int grid_skipstep[] = {1,1,1,1,1,1,0};
	char *grid_titles[7][128] = {"Grid_1","Grid_2","Grid_3","Grid_4","Grid_5","Grid_6",""};
	static char *db_titles[7][128] = {"yakuzaimei","meishokubun","meishoedaban","kisyakubaisuu","shiyounissuu","shiyoukaisuu",0};
	static int grid_sx = 0;
	static int grid_ex = 137;
	static int grid_sy = 2;
	static int grid_ey = 2;

	static int maxtext;
	static int no = 0;

	char **gt;
	char **lt;

	gt = (char **)&grid_titles;

	xcol = MakeWsubFormHTML(no,xcol,rows,0,2,grid_sx,grid_sy,grid_ex,grid_ey,cell_length,cell_align,cell_action,grid_field,grid_skipstep,gt,6);

	lt = (char **)&label_text;

//	以下の関数は<SELECT>でコンボボックスを作成する場合、一つのCGIで重複して利用出来ませんのでどちらかを削除してください。
	maxtext = MakeTextBoxHTML(no,0,2,xcol,rows,label_no,lt,label_x,label_y,label_length,textbox_no,textbox_x,textbox_y,textbox_length,textbox_align,textbox_action,textbox_field,textbox_skipstep, 7);

//----------------------------------------------------------------------------------

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

	sf_startcell(0);

	startline = 0;	//画面初期行

	//Fetchした結果をsplitDBbuffに格納して表示に備える
	if(yakuzai_shiyoukijun_Fetch2_grid_dispHTML(no,startline,maxtext,grid_sy,grid_ey,line) == -1)
	{
		printf("grid_dispHTML():error\n");
	}

	//全ての顧客のjohoIDを取得
	 Fetch_yakuzai_shiyoukijun_all(10);

	//DBへの入力用フォームの作成
	for(i=startline;i<DBcount[no];i++)
	{
		yakuzai_shiyoukijun_Fetch2_text_writeHTML(no,0,i,maxtext,*db_titles);
	}

}

int main(int argc, char *argv[])
{
	sprintf(COMMANDNAME,"%s",argv[0]);
	while (FCGI_Accept() >= 0)
	{
		subformHTML();
	}
}

