/* DIVIDE_START=main.c */
/*
	ＮＩＦＴＹのＬＯＧ整理				main.c
*/

	char	*Version = VERSION;

#define	MAIN	1
#include	"catlog.h"
#include	<time.h>

#define	TEST
#undef	TEST

extern	int		set_option_sw ;

#ifdef	TEST
void	main_loop_sub();
#endif

void	main_loop( )
{
#ifdef	TEST
	printf("次の設定でCATLOGを実行します。\n");
	main_loop_sub();
	get_yesno();
#endif

	ForcedEndCheck();

	print_now_time();

	/****************************************************/
	/* IDX_FILE_NAME がない場合は、新しい形式に変更する */
	/****************************************************/
	check_index_mode();				/* makeidx.c */
	check_MakeUpMAIL_mode();		/* sortlog.c */

	if ( ResortLogSw == YES ) {
		sortlog_main();				print_now_time();
		ResortLogSw = NO;
		return;
	};

	if ( SearchSayStartDateSw == YES && SearchSayEndDateSw == YES ) {
		if ( strcmp( SearchSayStartDate , SearchSayEndDate ) > 0 ) {
			strcpy( str , "検索する発言の年月日の指定に誤りがあります。"
							"指定し直して下さい。"
			);
			error_return( str );	return;
		};
	};

	if ( set_option_sw != YES ) {
		printf("\nオプションスイッチの指定が充分ではありません。"
				"\n再度設定のし直しをして下さい。"
		);
		exit( 1 );
	};

	/******************************************************************/
	/* 出力ディレクトリが指定されていない場合は入力ディレクトリとする */
	/******************************************************************/
	if ( *OutDir == '\0' ) {
		printf("\n\n出力ディレクトリが設定されていません。"
				"\n入力ディレクトリと同じ（%s）にします。いいですか？",
				InDir[ 0 ]
		);
		if ( get_yesno_mes() == YES ) {
			strcpy( OutDir , InDir[0] );
		} else {
			printf("\nカレントディレクトリに出力します。いいですか？");
			if ( get_yesno_mes() == NO ) {
				printf("\n処理を中断します。");
				exit( 1 );
			};
		};
	};

	if ( DoStage1Sw == YES && collect_main() == 0 ) {
		print_now_time();	return;	/* 発言数が 0 */
	};

	if ( DoStage2Sw == YES )		divide_main();

	if ( BreakCatlogSw == YES ) {
		print_now_time();	return;
	};

	if ( DoStage3Sw == YES )	catlog_main();

	print_now_time();
}

static	void	main_initial( )
{
	struct	tm		*timeptr;
			time_t	secsnow;

	error = NO;
	max_catlog = 0;

	MessSw = YES;						/* CATLOGの経過報告 */
	QuietSw = NO;						/* だまれ！ スイッチ */
	NotSearchSubDirSw = NO;						/* ｻﾌﾞ･ﾃﾞｨﾚｸﾄﾘの検索をしない */
	NoPartitionLineSw = NO;			/* 区切りの行なし */
	MakeNewFile001Sw = NO;			/* 001で新ﾌｧｲﾙを作る */
	MakeNewFileSmallSw = NO;		/* より小さな半減番号で新ﾌｧｲﾙを作る */
	DeleteOldFileSw = NO;			/* 今日より古いファイルの削除 */
	ForcedDeleteOldFileSw = NO;		/* 今日より古いファイルの強制削除 */
	search_all_file_sw = NO;			/* 全ﾌｧｲﾙの検索をしない */
	DisplayLogFileSw = NO;			/* ログ表示する */
	ResortLogSw = NO;
	BreakCatlogSw = NO;
	DelForumNameLineSw= 1;				/* - FRAV の行を削除する */
	collect_ID_sw = NO;					/* ＩＤの発言を集める */
	max_collect_ID = 0;					/* ＩＤの数 */
	NoTimeStampFile = NO;			/* CATLOGDT.TMPを作らない */
	ExtractLzhFileSw = NO;			/* *.lzhを解凍しながら実行 */
	Print_Del_Mes_Hyoudai = NO;			/* 削除した発言の表題を表示する */
	UpdateLzhFileSw = NO;			/* ログを凍結しながら実行 */

	QuoteAllSaySw = NO;
	DeleteDeletedSaySw = NO;
	catlog_mes_file_name_sw = NO;

	touroku_su = hatugen_su = 0;
	max_mojisu = MAX_MOJISU_0;		/* 初期値800Kﾊﾞｲﾄ */

	maxSearchFileName = maxInPutPath = 0;

	CatlogMesFileName[ 0 ] = DLListDir[ 0 ] =
	*OutDir= *InDir[0]= *TmpDir= *IndexDir= '\0';	/* clear */

	/********************************/
	/* 今日の日付をシステムから知る */
	/********************************/
	time( &secsnow );			/* 現在の時刻 */
	timeptr = localtime( &secsnow );	/* 構造体に変換 */
	sprintf( today , "%02d%02d%02d00" ,
			timeptr->tm_year,
			timeptr->tm_mon + 1,	/* 月は 1 小さい */
			timeptr->tm_mday
	);
	file_name_space_0( today );		/* file.c */
}

void	def_file( char *filename )
{
	int	c;
	FILE	*fpi;
	char	command[ LINE ];

	ForcedEndCheck();

	printf("<%s>で処理を行います。\n",filename);

	if ( (fpi=fopen( filename , "r" )) == NULL ) {
		printf("%s が見つかりません。",filename);
		get_yesno();
		return;
	};

	forever {
		c = fscanf( fpi , "%s" , command );
		if ( c < 1 || c == EOF ) break;
		mess_check {
			if ( *command != ';' ) printf("\nCATLOG.DEF = <%s>" , command );
		};
		switch ( *command ) {
			case '@':	/* def file の入れ子を認める */
					def_file( command + 1 );			break;
			case '-':
					strcpy( file_name , filename );
					setOptions( command + 1 );				break;
			case ';':	do {
						c = fgetc(fpi);
					} while ( c != '\n' && c != EOF );	break;
			default:
					printf("\nError Option : <%s>\n\n" , command );
					main_mes();		error_end( );		break;
		};
	};
	fclose( fpi );
}

void	main( int argc , char *argv[] )
{
	FILE	*fpi;
	char	*p0 ;

	display_main();
	main_initial( );

	/* 起動ディレクトリを知る */
	strcpy( run_path_name , argv[0] );
	p0 = last_yen( run_path_name );
	if ( p0 != run_path_name ) *(p0+1) = '\0';

	if ( argc > 1 ) {
		/* オプションが指定されている時は、それだけを実行する */
		while ( --argc ) {
			argv++;
			if ( **argv == '-' )		setOptions( *argv + 1 );
		};
		exit( 0 );
	};

	/***************************************************/
	/* ここで起動ﾃﾞｨﾚｸﾄﾘを探して CATLOG.DEF を入力する */
	/***************************************************/
	/* 先ず、ｶﾚﾝﾄ･ﾃﾞｨﾚｸﾄﾘから CATLOG.DEF を探す */
	strcpy( file_name , "CATLOG.DEF" );
	if ( ( fpi = fopen( file_name , "r" ) ) != NULL ) {
			fclose( fpi );
			def_file( file_name );
	} else {
		/* 起動ドライブから得る */
		strcpy( file_name , run_path_name );
		strcat( file_name , "CATLOG.DEF" );
		if ( (fpi=fopen( file_name , "r" )) != NULL ) {
			fclose( fpi );
			def_file( file_name );
		} else {
			printf(	"\nＣＡＴＬＯＧ．ＤＥＦが見つかりません。"
					"\n\nＣＡＴＬＯＧ．ＥＸＰと同じディレクトリに置き、"
					"\n\tアイコンの登録の際、"
					"ディレクトリ移動有りに設定して下さい。"
			);
			error_end();
		};
	};

	if ( set_option_sw != YES ) {
		printf(	"\nＣＡＴＬＯＧ．ＤＥＦの設定が充分ではありません。"
		);
		exit( 1 );
	};
	exit( 0 );
}

/* DIVIDE_END */
