/*<Header>==============================================================
*
*	FILE MANAGER / "EIN_FL06.C"
*
*		[ EIN(tm) project : ファイル操作補助関数群 ]
*
*	COPYRIGHT  Nam  1994, All rights reserved.
*
*-----------------------------------------------------------------------
*	V1.0L01α	94.07.07/Nam	プロトタイプ
*</Header>==============================================================*/
#include	<stdio.h>
#include 	<stdlib.h>
#include 	<string.h>
#include	<snd.h>
#include	<winb.h>
#include	<te.h>
#include	<fntb.h>
#include	<gui.h>

#define	EIN_FILE
#include	"..\eintm.h"

#ifndef NOERR
#define	NOERR	(0)
#endif
#ifndef ERROR
#define	ERROR	(1)
#endif

extern FILE	*EIN_fopen();
extern int	EIN_remove();

/*<Func>================================================================
*	int		EIN_makeBackupFile( char *fullpath, char *ext )
*
*	【概  要】	ファイルのバックアップを作成します
*
*	【機  能】	
*				int24hハンドラをフックしているので、ドライブにアクセス
*				できなかった場合でもシェルのアラートを出しません。
*
*	【入  力】
*				*fullpath	:	削除するファイル名文字列へのポインタ
*				*ext		:	バックアップファイルの拡張子(NULLなら"BAK")
*								[例] EIN_makeBackupFile("a:\\tmp.c", NULL);
*									 EIN_makeBackupFile("a:\\tmp.h", "OLD");
*
*	【出  力】
*
*	【関数値】	!= NULL		正常終了(ファイルポインタ)
*				== NULL		異常終了
*
*	【注  意】	
*
*	【参  照】	
*
*-----------------------------------------------------------------------
*	V11L10	1994.07.16/Nam
*</Func>==============================================================*/
int		EIN_makeBackupFile( char *fullpath, char *extname )
{
	FILE	*fp;
	char	backpath[128], ext[8];

	if ( fullpath == NULL ){
		return ERROR;
	}
	if ( extname != NULL ){
		strncpy( ext, extname, 4);
	}

	// バックアップファイル名を設定
	EIN_fnameNonExt( fullpath, backpath );
	strcat( backpath, ".");
	strcat( backpath, ext);
	#ifdef DEBUG
	printf("%s->%s\n", fullpath, backpath);
	#endif
	// セーブしたいファイル名が存在しないなら何もせず終了
	fp = EIN_fopen( fullpath, "rb" );
	if ( fp == NULL ){
		return NOERR;
	}
	fclose( fp );
	// 古いバックアップファイルがあれば削除する
	fp = EIN_fopen( backpath, "rb" );
	if ( fp != NULL ){
		fclose( fp );
		if ( EIN_remove( backpath ) != 0 ){
			#ifdef DEBUG
			printf("\t: 古いバックアップファイルを削除できませんでした.\n");
			printf("    %s\n", backpath );
			#endif
			return ERROR;
		}
	}
	// 現在のファイルをバックアップ名にリネームする
	if ( rename( fullpath, backpath ) != 0 ){
		#ifdef DEBUG
		printf("\t: バックアップファイルを作成できませんでした.\n");
		printf("    %s->%s\n", fullpath, backpath );
		#endif
		return ERROR;
	}
	return NOERR;
}
