/* Wild Card Library */
#include <msdos.cf>
#include "wild.h"

DTA		*search(char *path,int mode,char *fname);
DTA		*next(char *path,int mode,char *fname);
char	*getext(char *arg);
char	*getname(char *arg);

/* Gloval vari. */

static DTA	dta;

DTA	*search(char *path,int mode,char *fname)
{
	char	*s,*d;
	
	Registers.AX.R = 0x1A00;		/* DTAアドレスの変更 */
	Registers.DX.R = (int)&dta;
	Registers.DS.R = getds();
	calldos(); 
	Registers.AX.R = 0x4E00;		/* 最初に一致するファイル名の検索 */
	Registers.CX.R = mode;
	Registers.DX.R = (int)path;
	Registers.DS.R = getds();
	calldos();

	if ((Registers.Flags&0x0001)!=0) {
		*fname = '\0';
		return NULL;
	}

	for(s=path,d=fname;*s!='\0';*d++=*s++);
	*d = '\0';
	for(s=dta.fname,d=getname(fname);*s!='\0';*d++=*s++);
	*d = '\0';
	return &dta;

}

DTA	*next(char *path,int mode,char *fname)
{
	char	*s,*d;

	Registers.AX.R = 0x4F00;		/* 次に一致するファイル名の検索 */
	calldos();

	if ((Registers.Flags&0x0001)!=0) {
		*fname = '\0';
		return NULL;
	}

	for(s=path,d=fname;*s!='\0';*d++=*s++);
	*d = '\0';
	for(s=dta.fname,d=getname(fname);*s!='\0';*d++=*s++);
	*d = '\0';
	return &dta;
}

char *getext(char *arg)
{
	char *p;
	
	for(p=arg;*arg!='\0';arg++)
		if (*arg=='\\') p=arg+1;
	for(;*p!='.'&&*p!='\0';p++);
	if (*p=='\0')
		return NULL;
	else
		return p+1;
}

char *getname(char *arg)
{
	char *p;
	
	for(p=arg;*arg!='\0';arg++)
		if (*arg=='\\'||*arg==':') p=arg+1;
	return p ;
}

