diff --git a/src/dos/dos_files.cpp b/src/dos/dos_files.cpp index e3a0cd0f..b7cf1ca4 100644 --- a/src/dos/dos_files.cpp +++ b/src/dos/dos_files.cpp @@ -971,6 +971,20 @@ bool DOS_FCBOpen(Bit16u seg,Bit16u offset) { char shortname[DOS_FCBNAME];Bit16u handle; fcb.GetName(shortname); + /* Search for file if name has wildcards */ + if (strpbrk(shortname,"*?")) { + LOG(LOG_FCB,LOG_WARN)("Wildcards in filename"); + if (!DOS_FCBFindFirst(seg,offset)) return false; + DOS_DTA find_dta(dos.tables.tempdta); + DOS_FCB find_fcb(RealSeg(dos.tables.tempdta),RealOff(dos.tables.tempdta)); + char name[DOS_NAMELENGTH_ASCII],file_name[9],ext[4]; + Bit32u size;Bit16u date,time;Bit8u attr; + find_dta.GetResult(name,size,date,time,attr); + DTAExtendName(name,file_name,ext); + find_fcb.SetName(fcb.GetDrive()+1,file_name,ext); + find_fcb.GetName(shortname); + } + /* First check if the name is correct */ Bit8u drive; char fullname[DOS_PATHLENGTH];