/***************************************
*                                      *
*          ＦＩＬＥ ＯＰＥＮ           *
*                                      *
*                                      *
***************************************/

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <stdio.h>
#include <string.h>
#include "snaps.h"
#include "file_open.h"
#include "cntl.h"

// 入力ファイル管理
// 厚年試算番号
#define HIYOUSYADATA          "9030"

// 国年試算番号
#define KOKUNENDATA           "9030"

// 経済要素
#define	ECON                  "9121"

// 外枠
#define SOTOWAKU              "9111"

// 住宅融資債権納付分
#define YUUSHI                "/rev26/bas/base_data/yuushi26.csv"

// 保険料
#define HOKEN                 "/rev26/bas/base_data/hoken16900-280.csv"


void file_open()
{
	char filename[250];
	time_t t;
	
	using namespace std;
	
	t = time( NULL );
	fprintf( fp_settei , "\n" );
	fprintf( fp_settei , "%s\n" , ctime(&t) );
	
	// 入力ファイル
	// 国民年金
	sprintf( filename , "/rev26/nat/data/KISONENKIN%s-%s-%s" , KOKUNENDATA , ECON , SOTOWAKU );
	if( ( fpin[KOKUNEN] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "国民年金ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	read_headder( fpin[KOKUNEN] );
	fprintf( fp_settei , "国年入力ファイル    %s\n" , filename );
	
	// 厚生年金
	sprintf( filename , "/rev26/emp/rslt/u-rev/kiso/kiso.%s-%s-%s_kou" , HIYOUSYADATA , ECON , SOTOWAKU );
	if( ( fpin[KOUNEN] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "厚生年金ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	read_headder( fpin[KOUNEN] );
	fprintf( fp_settei , "厚年入力ファイル    %s\n" , filename );
	
	// 国共済
	sprintf( filename , "/rev26/emp/rslt/u-rev/kiso/kiso.%s-%s-%s_kok" , HIYOUSYADATA , ECON , SOTOWAKU );
	if( ( fpin[KOKKYO] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "国共済ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	read_headder( fpin[KOKKYO] );
	fprintf( fp_settei , "国共済入力ファイル    %s\n" , filename );
	
	// 地共済
	sprintf( filename , "/rev26/emp/rslt/u-rev/kiso/kiso.%s-%s-%s_ren" , HIYOUSYADATA , ECON , SOTOWAKU );
	if( ( fpin[CHIKYO] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "地共済ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	read_headder( fpin[CHIKYO] );
	fprintf( fp_settei , "地共済入力ファイル    %s\n" , filename );
	
	// 私学
	sprintf( filename , "/rev26/emp/rslt/u-rev/kiso/kiso.%s-%s-%s_sig" , HIYOUSYADATA , ECON , SOTOWAKU );
	if( ( fpin[SHIGAKU] = fopen( filename , "r" ) ) == NULL )
	{
		cout << " 私学ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	read_headder( fpin[SHIGAKU] );
	fprintf( fp_settei , "私学共済入力ファイル    %s\n" , filename );
	
	// 調整率ファイル
	if( suikei == 2 )
	{
		sprintf( filename , "/rev26/emp/rslt/ez_arev/cutr/cuta-%s-%s-%s-%s-%s.csv" , HIYOUSYADATA , KOKUNENDATA , ECON , SOTOWAKU , Version_cut );
		if( ( fp_cut = fopen( filename , "r" ) ) == NULL )
		{
			cout << "調整率用のオープンに失敗しました" << endl;
			exit(1);
		}
	}
	
	// 出力ファイル
	sprintf( filename , "/rev26/bas/data/KYOSHUTUKIN%s" , Version );
	if( ( fpout = fopen( filename , "w" ) ) == NULL )
	{
		cout << "出力ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	
	// 経済要素
	sprintf( filename , "/rev26/emp/data/u-rev/econ/econ-%s.csv" , ECON );
	if( ( fp_econ = fopen( filename , "r" ) ) == NULL )
	{
		cout << "経済要素ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "経済     %s\n" , filename );
	
	// 年金改定率
	sprintf( filename , "/rev26/nat/data/KOKUKAITE-%sE.csv" , ECON );
	if( ( fp_kaitei = fopen( filename , "r" ) ) == NULL )
	{
		cout << "年金改定率ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "年金改定率     %s\n" , filename );
	
	// 単年調整率
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-m.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_cut_rate = fopen( filename , "r" ) ) == NULL )
	{
		cout << "調整率ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "単年調整率     %s\n" , filename );
	
	
	// 外枠
	// 国年１号（強制＋任意）
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-10.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[0] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（１号）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（１号）   %s\n" , filename );
	
	// 厚年２号
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-40.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[1] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（２号厚年）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（２号厚年）   %s\n" , filename );
	
	// ２号国共済
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-03.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[2] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（２号国共）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（２号国共）   %s\n" , filename );
	
	// ２号地共済
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-04.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[3] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（２号地共）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（２号地共）   %s\n" , filename );
	
	// ２号私学共済
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-05.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[4] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（２号私学）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（２号私学）   %s\n" , filename );
	
	// ３号厚年１、２種
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-11.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[5] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号厚年、１、２種）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号厚年、１、２種）   %s\n" , filename );
	
	// ３号厚年３種
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-12.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[6] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号厚年、３種）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号厚年、３種）   %s\n" , filename );
	
	// ３号国共済
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-13.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[7] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号国共）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号国共）   %s\n" , filename );
	
	// ３号地共済
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-14.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[8] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号地共）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号地共）   %s\n" , filename );
	
	// ３号私学共済
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-15.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[9] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号私学）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号私学）   %s\n" , filename );
	
	// ２号JR（厚年の再掲）
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-06.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[10] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（２号JR）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（２号JR）     %s\n" , filename );
	
	// ２号JT（厚年の再掲）
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-07.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[11] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（２号JT）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（２号JT）     %s\n" , filename );
	
	// ２号農林（厚年の再掲）
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-08.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[12] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（２号農林）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（２号農林）   %s\n" , filename );
	
	// ３号JR（厚年の再掲）
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-16.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[13] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号JR）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号JR）     %s\n" , filename );
	
	// ３号JT（厚年の再掲）
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-17.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[14] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号JT）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号JT）     %s\n" , filename );
	
	// ３号農林（厚年の再掲）
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-18.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku[15] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号農林）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号農林）   %s\n" , filename );
	
	// パート適用拡大関係
	// １号→パート適用対象者
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-33.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku_part[0] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（１号→パート）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（１号→パート）   %s\n" , filename );
	
	// パート適用対象となり厚年加入者
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-32.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku_part[1] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（パート→厚年）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（パート→厚年）   %s\n" , filename );
	
	// ３号厚年→パート適用対象者
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-41.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku_part[2] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号厚年→パート）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号厚年→パート）   %s\n" , filename );
	
	// ３号国共済→パート適用対象者
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-42.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku_part[3] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号国共済→パート）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号国共済→パート）   %s\n" , filename );
	
	// ３号地共済→パート適用対象者
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-43.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku_part[4] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号地共済→パート）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号地共済→パート）   %s\n" , filename );
	
	// ３号私学共済→パート適用対象者
	sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-44.csv" , SOTOWAKU , SOTOWAKU );
	if( ( fp_sotowaku_part[5] = fopen( filename , "r" ) ) == NULL )
	{
		cout << "外枠ファイル（３号私学共済→パート）のオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "外枠ファイル（３号私学共済→パート）   %s\n" , filename );
	
	if( Option2 == 1 || Option2 == 2 )
	{
		// 更なる適用拡大
		// １号→パート適用対象者
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-37.csv" , SOTOWAKU , SOTOWAKU );
		if( ( fp_sotowaku_part[6] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（１号→パート）のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（１号→パート）   %s\n" , filename );
		
		// パート適用対象となり厚年加入者
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-36.csv" , SOTOWAKU , SOTOWAKU );
		if( ( fp_sotowaku_part[7] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（パート→厚年（再拡大））のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（パート→厚年（再拡大））   %s\n" , filename );
		
		// ３号厚年→パート適用対象者
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-45.csv" , SOTOWAKU , SOTOWAKU );
		if( ( fp_sotowaku_part[8] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（３号厚年→パート（再拡大））のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（３号厚年→パート（再拡大））   %s\n" , filename );
		
		// ３号国共済→パート適用対象者
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-46.csv" , SOTOWAKU , SOTOWAKU );
		if( ( fp_sotowaku_part[9] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（３号国共済→パート（再拡大））のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（３号国共済→パート（再拡大））   %s\n" , filename );
		
		// ３号地共済→パート適用対象者
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-47.csv" , SOTOWAKU , SOTOWAKU );
		if( ( fp_sotowaku_part[10] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（３号地共済→パート（再拡大））のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（３号地共済→パート（再拡大））   %s\n" , filename );
		
		// ３号私学共済→パート適用対象者
		sprintf( filename , "/rev26/wakuc/rslt/ver_5/rslt%s/waku%s-48.csv" , SOTOWAKU , SOTOWAKU );
		if( ( fp_sotowaku_part[11] = fopen( filename , "r" ) ) == NULL )
		{
			cout << "外枠ファイル（３号私学共済→パート（再拡大））のオープンに失敗しました" << endl;
			exit(1);
		}
		fprintf( fp_settei , "外枠ファイル（３号私学共済→パート（再拡大））   %s\n" , filename );
	}
	
	// 妻積
	strncpy( Version_tumatumi, Version_cut + 5, 3 );
	
	sprintf( filename , "/rev26/bas/rslt/TUMATUMI-%s-%s-%s-%s-00.csv" , KOKUNENDATA , ECON , SOTOWAKU , Version_tumatumi );
	if( ( fp_tumatumi = fopen( filename , "w" ) ) == NULL )
	{
		cout << "プリントアウトファイル（妻積み）のオープンに失敗しました" << endl;
		exit(1);
	}
	
	// プリントアウト
	sprintf( filename , "/rev26/bas/rslt/kekka%s-%sb.csv" , Version , Version_cut );
	if( ( fpprintout = fopen( filename , "w" ) ) == NULL )
	{
		cout << "プリントアウトファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	
	sprintf( filename , "/rev26/bas/rslt/kekka_kokko%s-%sb.csv" , Version , Version_cut );
	if( ( fpprintout_kokko = fopen( filename , "w" ) ) == NULL )
	{
		cout << "プリントアウトファイル（年度前後半別）のオープンに失敗しました" << endl;
		exit(1);
	}
	
	sprintf( filename , "/rev26/bas/rslt/kekka%s-%sa.csv" , Version , Version_cut );
	if( ( fpprintout_2 = fopen( filename , "w" ) ) == NULL )
	{
		cout << "プリントアウトファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	
	sprintf( filename , "/rev26/bas/rslt/kekka_kokko%s-%sa.csv" , Version , Version_cut );
	if( ( fpprintout_kokko_2 = fopen( filename , "w" ) ) == NULL )
	{
		cout << "プリントアウトファイル（年度前後半別）のオープンに失敗しました" << endl;
		exit(1);
	}
	
	if( suikei == 1 )
	{
		sprintf( filename , "/rev26/bas/rslt/tokubetu_nendokan%s.csv" , Version );
		if( ( fp_tokubetu_nendokan = fopen( filename , "w" ) ) == NULL )
		{
			cout << "プリントアウト（特別国庫）ファイルのオープンに失敗しました" << endl;
			exit(1);
		}
		sprintf( filename , "/rev26/bas/rslt/tokubetu_nendomatu%s.csv" , Version );
		if( ( fp_tokubetu_nendomatu = fopen( filename , "w" ) ) == NULL )
		{
			cout << "プリントアウト（特別国庫）ファイルのオープンに失敗しました" << endl;
			exit(1);
		}
		
		sprintf( filename , "/rev26/bas/rslt/tokubetu_nendokan%s-%s.csv" , Version , Version_cut);
		if( ( fp_tokubetu_nendokan2 = fopen( filename , "w" ) ) == NULL )
		{
			cout << "プリントアウト（特別国庫）ファイルのオープンに失敗しました" << endl;
			exit(1);
		}
		sprintf( filename , "/rev26/bas/rslt/tokubetu_nendomatu%s-%s.csv" , Version , Version_cut );
		if( ( fp_tokubetu_nendomatu2 = fopen( filename , "w" ) ) == NULL )
		{
			cout << "プリントアウト（特別国庫）ファイルのオープンに失敗しました" << endl;
			exit(1);
		}
	}
	
	// 独自給付
	sprintf( filename , "/rev26/nat/data/DOKUZI%s-%s-%s.csv" , KOKUNENDATA , ECON , SOTOWAKU );
	if( ( fp_dokuzi = fopen( filename , "r" ) ) == NULL )
	{
		cout << "独自給付ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	read_headder( fp_dokuzi );
	fprintf( fp_settei , "独自給付     %s\n" , filename );
	
	// 保険料
	if( ( fp_hoken = fopen( HOKEN , "r" ) ) == NULL )
	{
		cout << "保険料ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "保険料     %s\n" , HOKEN );
	
	// 住宅融資債権
	if( ( fp_yuushi = fopen( YUUSHI , "r" ) ) == NULL )
	{
		cout << "住宅融資債権ファイルのオープンに失敗しました" << endl;
		exit(1);
	}
	fprintf( fp_settei , "住宅融資債権     %s\n" , YUUSHI );
	
	if( suikei == 1 )
	{
		// 給付水準調整計算用出力ファイル
		sprintf( filename , "/rev26/bas/rslt/cuta-%s-%s.csv" , Version , Version_cut );
		if( ( fp_cuta = fopen( filename , "w" ) ) == NULL )
		{
			cout << "付水準調整計算用ファイルのオープンに失敗しました" << endl;
			exit(1);
		}
	}
}
