/*<Header>==============================================================
*
*	FILE MANAGER / "EIN_FL01.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

/* from EIN_ASM1.ASM */
extern void		EIN_setVector( unsigned long * );
extern void		EIN_resetVector( unsigned long * );

/*<Func>================================================================
*	int		EIN_chkDrv( int drv )
*
*	【概  要】	指定ドライブにアクセスできるか否かをチェックします
*
*	【機  能】	指定ドライブにアクセスできるか否かでNOERR/ERRORを返します。
*				int24hハンドラをフックしているので、ドライブにアクセス
*				できなかった場合でもシェルのアラートを出しません。
*
*	【入  力】
*				drv		:	チェックしたいドライブ番号(英大文字)
*							[例] size = EIN_chkDrv('A');
*								 size = EIN_chkDrv( EIN_fnameDrv("E:\\tmp") );
*
*	【出  力】
*
*	【関数値】	== 0		正常終了
*				!= 0		異常終了(ドライブにアクセス不可)
*
*	【注  意】	
*
*	【参  照】	
*
*-----------------------------------------------------------------------
*	V11L10	1994.07.08/Nam
*</Func>==============================================================*/
int		EIN_chkDrv( int drv )
{
	unsigned long	vect[3];	/* int24hハンドラの退避用 */
	FMDTA	dta;
	VECTOR	orgDta;
	char	path[8] = "A:\\*.*";
	register int		ret;
	
	if ( drv<'A' || drv>'Z' ){
		return ERROR;
	}
	path[0] = drv;
	FM_SaveDta( &orgDta );		/* 古いDTAを保存 */
	FM_SetDta( &dta );			/* DTAを設定 */
	EIN_setVector( vect );		/* int24をフック */
	ret = FM_SearchFirstFile( path, 0x00 );
	EIN_resetVector( vect );	/* int24ハンドラを復帰 */
	FM_RecovDta( &orgDta );		/* 古いDTAを復帰 */
	/* 0:ファイル発見,0x12:もうファイルは無い  ... 以外はERROR */
	return (ret==0 || ret==0x12) ?NOERR :ERROR;
}

