#include "defines.h"
#include "astring.h"
#include "fat32.h"

int strsfn32(unchar *path,unchar *drv,unchar *dir,unchar *fname,unchar *ext)
// FAT32対応ファイル名要素分解
// drv=LUN ID:		後ろに':'が付く
// dir=\dir1\dir2	前の'\'も残る（先頭に'\'がなければ前の'\'はなし）
// fname=fname
// ext=ext		'.'は付かない
{
unchar *p,c;
unlong id;
int ret=0;
	// SCSI-LUN+ID
	p=Path2ScsiID(path,&id);
	if (p==NULL) ret=1; // ID指定がない＝エラー
	else {
		while (path<p) {
			*drv++=*path++;
		}
	}
	*drv=0; // ':'まで入る
	// dir
	p=path;
	while (p=SplitDir(p,fname),fname[0]!=0); // 1ディレクトリ名はファイル名と同じ長さだからfnameが使える
	//if (*path=='\\') path++; // 先頭の'\'は残す
	while (path<p) {
		*dir++=*path++;
	}
	*(dir-1)=0; // 後ろの'\'は消す＋EOS
	//*dir=0; // EOS
	// ファイル名＋拡張子
		// SHIFT-JIS 2バイト目に'.'はない。
		// ロングファイル名では複数の'.'を認めるので、拡張子となるのは
		// 一番最後の'.'の後ろ３バイト以内に0x00がある時のみ。
	while ((c=*path++)!=0) {
		if (c=='.') { // '.'があった
			// 後ろ３バイトをチェック
			// EOSの後ろを調べないようにチェックは順番に行う
			if (path[1]==0x00) break;
			if (path[2]==0x00) break;
			if (path[3]==0x00) break;
		}
		*fname++=c;
	}
	*fname=0;
	if (c=='.') { // 拡張子がある
		do {
			c=*path++;
			*ext++=c;
		} while (c!=0);
	} else { // 拡張子はない
		*ext=0;
	}
	// 正常終了
	return(ret);
}

#if 0
#include "aparam.h"

void main(int argc,unchar *argv[])
{
int ret;
unchar *path;
	ret=getfname(argc,argv,1,NULL);
	if (ret==0) {
		printf("パス名が必要です\n");
		exit(1);
	}
	path=argv[ret];
	{
	unchar drv[MAXDRIVE32]; // LUNが入ると＋１桁必要だから
	unchar dir[MAXDIR32];
	unchar fname[MAXLONGFILE];
	unchar ext[MAXEXT32];
	unchar path2[MAXLONGFILE];
	strsfn32(path,drv,dir,fname,ext);
	printf("drv=%s,dir=%s,name=%s,ext=%s\n",drv,dir,fname,ext);
	strmfn32(path2,drv,dir,fname,ext);
	printf("path2=%s\n",path2);
	}
	exit(0);
}
#endif
