#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>
#include "sftlib.h"

int	DB_base = -1 ;
int	DB_baseTop = -1 ;
int	DB_menu = -1 ;
int	DB_menuI[4] = -1 ;
int	DB_menuM[4] = -1 ;
int	DB_menuI0[4] = -1 ;
int	DB_menuI1[5] = -1 ;
int	DB_menuI2[4] = -1 ;
int	DB_menuI3[6] = -1 ;
int	DB_baseTopBtns = -1 ;
int	DB_baseTopB[2] = -1 ;


/*	initDataMENU:DB_menuI0[0]:MJ_MITEML40の呼び出し関数	*/
int	DB_aboutFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	DB_Alert_call();
	return NOERR ;
}

/*	initDataMENU:DB_menuI0[3]:MJ_MITEML40の呼び出し関数	*/
/*	initDataMENU:DB_baseTopB[1]:MJ_ICONL40の呼び出し関数	*/
int	DB_quitFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_quit;

	DB_end();
	if( kobj == DB_menuI0[3] ){
		MMI_SetHaltFlag(True);
	}else {
		MMI_SendMessage( DB_quit, MM_ATTACH, 1, DB_base);
		MMI_SendMessage( DB_quit, MM_SHOW, 0);
	}
	return NOERR ;
}


/*	initDataMENU:DB_menuI1[0]:MJ_MITEML40の呼び出し関数	*/
/*	initDataMENU:DB_menuI1[1]:MJ_MITEML40の呼び出し関数	*/
/*	initDataMENU:DB_menuI1[2]:MJ_MITEML40の呼び出し関数	*/
/*	initDataMENU:DB_menuI1[3]:MJ_MITEML40の呼び出し関数	*/
/*	initDataMENU:DB_menuI1[4]:MJ_MITEML40の呼び出し関数	*/
int	DB_typedoc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	if( kobj == DB_menuI1[0] ) 
	    DB_typeAlertCall( "ヘルプとは",      DB_help0p );
	else if( kobj==DB_menuI1[1] )
	    DB_typeAlertCall( "ファイル出力とは",DB_help1p );
	else if( kobj==DB_menuI1[2] )
	    DB_typeAlertCall( "検索条件とは",    DB_help2p );
	else if( kobj==DB_menuI1[3] )
	    DB_typeAlertCall( "表示モードとは",  DB_help3p );
	else if( kobj==DB_menuI1[4] )
	    DB_typeAlertCall( "編集について",    DB_help4p );
	return NOERR ;
}

/*	initDataMENU:DB_menuI2[0]:MJ_MITEML40の呼び出し関数	*/
int	DB_foutFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_fout;
	MMI_SendMessage( DB_fout, MM_ATTACH, 1, DB_base);
	MMI_SendMessage( DB_fout, MM_SHOW, 0);
	return NOERR ;
}

/*	initDataMENU:DB_menuI2[1]:MJ_MITEML40の呼び出し関数	*/
int	DB_rcndFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_scond;
	MMI_SendMessage( DB_scond, MM_ATTACH, 1, DB_base);
	set_DB_search();
	MMI_SendMessage( DB_scond, MM_SHOW, 0);
	return NOERR ;
}

/*	initDataMENU:DB_menuI2[2]:MJ_MITEML40の呼び出し関数	*/
int	DB_pmodeFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_list;
	extern int DB_list_sc, DB_list, DB_Message[];
	int lstptr;
	int ret;
	ret=DB_pmode_call( &DB_cndmode, &DB_pmodec1, &DB_lstmode );
	if( ret==0 ) {
		DB_MakeList();         /* リスト作成   */
    	MMI_SendMessage( DB_list_sc, MM_ERASE, 0);
		MMI_SendMessage( DB_list_sc, MM_SHOW, 0);
		MMI_SendMessage( DB_list, MM_ERASE, 0);
		MMI_SendMessage( DB_list, MM_SHOW, 0);
		MMI_SendMessage( DB_Message[0], MM_ERASE, 0);
		MMI_SendMessage( DB_Message[0], MM_SHOW, 0);
	}
	return NOERR ;
}

/*	initDataMENU:DB_menuI2[3]:MJ_MITEML40の呼び出し関数	*/
int	DB_sortmFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_list;
	extern int DB_list_sc, DB_list, DB_Message[];
	int lstptr;
	int ret;

	ret=AMI_PTGL_call( "設定","取消", &DB_sortmode, &DB_sortrev);
	if( ret==0 ) {
		DB_MakeList();         /* リスト作成   */
    	MMI_SendMessage( DB_list_sc, MM_ERASE, 0);
		MMI_SendMessage( DB_list_sc, MM_SHOW, 0);
		MMI_SendMessage( DB_list, MM_ERASE, 0);
		MMI_SendMessage( DB_list, MM_SHOW, 0);
		MMI_SendMessage( DB_Message[0], MM_ERASE, 0);
		MMI_SendMessage( DB_Message[0], MM_SHOW, 0);
	}
	return NOERR ;
}


PROTO int	DB_cmodeFunc(kobj, messId, argc, pev, trigger)/* 呼ぶのやめた */
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_list;
	extern int DB_list_sc, DB_list, DB_Message[];
	int lstptr;
    /* 259=off 260=on */
	if( DB_cndmode==0 ) {
		DB_cndmode=1;
	} else {
		DB_cndmode=0;
	}
	DB_getlstptr( &lstptr);
	DB_MakeList();         /* リスト作成   */
	DB_setlstptr( lstptr);
    MMI_SendMessage( DB_list_sc, MM_ERASE, 0);
	MMI_SendMessage( DB_list_sc, MM_SHOW, 0);
	MMI_SendMessage( DB_list, MM_ERASE, 0);
	MMI_SendMessage( DB_list, MM_SHOW, 0);
	MMI_SendMessage( DB_Message[0], MM_ERASE, 0);
	MMI_SendMessage( DB_Message[0], MM_SHOW, 0);
	DB_showData( );
	return NOERR ;
}

/*	initDataMENU:DB_menuI3[0]:MJ_MITEML40の呼び出し関数	*/
int	DB_menu_new(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_list;
	extern int DB_list_sc, DB_list, DB_Message[];
	int ret,n, lstptr;
	index ind;

	
	for( n=0; n< DB_datanum; n++ )
	{
		if( DB_dataary[n].system[0]=='C' ) break;
	}
	if( n < DB_datanum ) 	{
		ret=DB_mdfy_call( n, &ind );
		if( ret==0){
			DB_dataary[n]=ind;
			DB_dataary[n].system[0]='S';
			DB_getlstptr( &lstptr);
			DB_MakeList();         /* リスト作成   */
			DB_setlstptr( lstptr);
		    MMI_SendMessage( DB_list_sc, MM_ERASE, 0);
    		MMI_SendMessage( DB_list_sc, MM_SHOW, 0);
    		MMI_SendMessage( DB_list, MM_ERASE, 0);
    		MMI_SendMessage( DB_list, MM_SHOW, 0);
    		MMI_SendMessage( DB_Message[0], MM_ERASE, 0);
    		MMI_SendMessage( DB_Message[0], MM_SHOW, 0);
    		DB_showDataNum( n );
		}
	} else 	AMI_INFO_call_1( 
		"許して下さい\nこれ以上データを作れません｡\n"
		"もっとデータを作りたい人は、\nドキュメントをよんでね\n" );
	
	return NOERR ;
}

/*	initDataMENU:DB_menuI3[1]:MJ_MITEML40の呼び出し関数	*/
int	DB_menu_mdfy(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_list;
	extern int DB_list_sc, DB_list, DB_Message[];
	LISTITEML40 *listItem;
	int ret,n, r,c,lr, lc, lstptr;
	index ind;

	MMI_SendMessage( DB_list, MM_GETLMENUPTR, 5, &listItem, &r, &c, &lr,&lc);
	if( lr >=0 ) 	{
		n=DB_dataary[lr+lc*DB_lstline].dataid;
		ret=DB_mdfy_call( n, &ind );
		if( ret==0){
			DB_dataary[n]=ind;
			DB_getlstptr( &lstptr);
			DB_MakeList();         /* リスト作成   */
			DB_setlstptr( lstptr);
			
		    MMI_SendMessage( DB_list_sc, MM_ERASE, 0);
    		MMI_SendMessage( DB_list_sc, MM_SHOW, 0);
    		MMI_SendMessage( DB_list, MM_ERASE, 0);
    		MMI_SendMessage( DB_list, MM_SHOW, 0);
    		MMI_SendMessage( DB_Message[0], MM_ERASE, 0);
    		MMI_SendMessage( DB_Message[0], MM_SHOW, 0);
    		DB_showDataNum( n );
		}
	} else AMI_INFO_call_1("更新からの伝言\n\nリストから更新するデータを\n選んでじゃないといやです｡\n         v_(^^)" );
	
	return NOERR ;
}

/*	initDataMENU:DB_menuI3[2]:MJ_MITEML40の呼び出し関数	*/
int	DB_menu_dlt(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_list;
	extern int DB_list_sc, DB_list, DB_Message[];
	LISTITEML40 *listItem;
	int ret,n, r,c,lr, lc, lstptr;
	soft data;
	FILE *fp1, *fp2;
	

	MMI_SendMessage( DB_list, MM_GETLMENUPTR, 5, &listItem, &r, &c, &lr,&lc);
	if( lr >=0 ) 	{
		char buf[512];

		n=DB_dataary[lr+lc*DB_lstline].dataid;
		sprintf(buf, "%s\nのデータを削除しますけどいいかな",
			DB_dataary[n].lstbf ); 
		ret=DB_YESNO_ALERTCall(buf);
		if( ret==0 ) {
			fp1=fopen( DB_sftlibp,"rb+");
			getcldata( &data );
			fseek( fp1, sizeof(soft)*n, SEEK_SET);
			fwrite( &data, sizeof(data),1,fp1);
			fseek( fp1, 0, SEEK_END);
			fclose(fp1);

			fp2=fopen(DB_indexp,"rb+");
			data2ind( &data, &DB_dataary[n] );
			DB_dataary[n].softno=n;
			fseek( fp2, sizeof(index)*n, SEEK_SET);
			fwrite( &(DB_dataary[n]), sizeof(index),1,fp2);
			fseek( fp2, 0, SEEK_END);
			fclose(fp2);

			DB_getlstptr( &lstptr);
			DB_MakeList();         /* リスト作成   */
			DB_setlstptr( lstptr);
	    	MMI_SendMessage( DB_list_sc, MM_ERASE, 0);
    		MMI_SendMessage( DB_list_sc, MM_SHOW, 0);
    		MMI_SendMessage( DB_list, MM_ERASE, 0);
    		MMI_SendMessage( DB_list, MM_SHOW, 0);
    		MMI_SendMessage( DB_Message[0], MM_ERASE, 0);
   	 		MMI_SendMessage( DB_Message[0], MM_SHOW, 0);
/*	   		DB_showData( );*/ /* 削除してもデータの表示を消さない */
		}
	} else AMI_INFO_call_1( "削除するには\n\nまずリストから削除するのを\n選んでからにしてね｡" );
	return NOERR ;
}


/*	initDataMENU:DB_menuI3[4]:MJ_MITEML40の呼び出し関数	*/
int	DB_dataDspFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
    DB_showData( );
	return NOERR ;
}

/*	initDataMENU:DB_menuI3[5]:MJ_MITEML40の呼び出し関数	*/
int	DB_baseDspFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	extern int DB_list;
	extern int DB_list_sc, DB_list;
/*	extern int DB_Message[]; */
	MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
   	MMI_SendMessage( DB_list_sc, MM_ERASE, 0);
	MMI_SendMessage( DB_list_sc, MM_SHOW, 0);
	MMI_SendMessage( DB_list, MM_ERASE, 0);
	MMI_SendMessage( DB_list, MM_SHOW, 0);
/*	MMI_SendMessage( DB_Message[0], MM_ERASE, 0);
**	MMI_SendMessage( DB_Message[0], MM_SHOW, 0);
*/	return NOERR ;
}

/*	initDataMENU:DB_baseTopB[0]:MJ_ICONL40の呼び出し関数	*/
int	DB_PltFunc(kobj, messId, argc, pev, trigger)
int		kobj ;
int		messId ;
int		argc ;
EVENT	*pev ;
int		trigger ;
{
	AMI_PLT_call( DB_page, NULL );
	return NOERR ;
}




/**/



int AMI_FILED_getpath_A( char path[], char *title,
		char *execstr, char *cnclstr, int base ) 
{
	int ret;
	
	MMI_SendMessage( base, MM_DETACH, 0);
	MMI_SendMessage( base, MM_ERASE, 0);
	MMI_SendMessage( DB_baseTop, MM_DETACH, 0);
	MMI_SendMessage( DB_base, MM_DETACH, 0);

	ret=AMI_FILED_getpath(path, title, execstr, cnclstr, MMI_GetBaseObj() );
	
	MMI_SendMessage( DB_base, MM_ATTACH, 1, MMI_GetBaseObj() );
	MMI_SendMessage( DB_baseTop, MM_ATTACH, 1, MMI_GetBaseObj() );
	MMI_SendMessage( base, MM_ATTACH, 1, DB_base );
	MMI_SendMessage( base, MM_SHOW, 0);
	return ret;
}

