/* Change Directory Direct (with make directory) */
/* cddという名前がコマンドで使われているので変更('92/04/18) */

#include <stdio.h>
#include <string.h>
#include <doslibm.h>
#include "defines.h"
#include "astring.h"

int chdir2(const unchar *path,int fmdir)
{
int dv,cdv;
unchar drv[MAXDRIVE],dir[MAXDIR],fname[MAXFILE],ext[MAXEXT],dir2[MAXDIR];
	/* カレントドライブ取得 */
	cdv=CURDRV();
	
	/* 指定ディレクトリ名分解 */
	strsfn2(path,drv,dir,fname,ext);
	if (drv[0]!=0) { /* ドライブ名指定がある */
		/* カレントドライブ変更 */
		dv=toupper(drv[0])-'A';
		if (CHGDRV(dv)<dv) return(1); /* このドライブは無い */
	}
	
	/* ドライブ名を除いて再結合 */
	strmfn(dir2,"",dir,fname,ext);
	if (CHDIR(dir2)<0) { /* ディレクトリチェンジ */
		if (fmdir) { /* 存在しないディレクトリは作ってそこに移動するモード */
			if (MKDIR(dir2)<0) { /* ディレクトリが作れない */
				CHGDRV(cdv); /* 元のドライブに戻る */
				return(3);
			}
			/* そこに移動する */
			if (CHDIR(dir2)<0) { /* 作ったのに移動できない */
				CHGDRV(cdv); /* 元のドライブに戻る */
				return(4);
			}
		} else { /* このディレクトリは存在しません */
			CHGDRV(cdv); /* 元のドライブに戻る */
			return(2);
		}
	}
	return(0);
}
