diff --git a/include/dos_inc.h b/include/dos_inc.h index 3256e64d..97deee81 100644 --- a/include/dos_inc.h +++ b/include/dos_inc.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_inc.h,v 1.80 2009-07-08 20:05:41 c2woody Exp $ */ +/* $Id: dos_inc.h,v 1.81 2009-07-09 20:06:56 c2woody Exp $ */ #ifndef DOSBOX_DOS_INC_H #define DOSBOX_DOS_INC_H @@ -489,7 +489,7 @@ private: class DOS_FCB: public MemStruct { public: - DOS_FCB(Bit16u seg,Bit16u off); + DOS_FCB(Bit16u seg,Bit16u off,bool allow_extended=true); void Create(bool _extended); void SetName(Bit8u _drive,char * _fname,char * _ext); void SetSizeDateTime(Bit32u _size,Bit16u _date,Bit16u _time); diff --git a/src/dos/dos_classes.cpp b/src/dos/dos_classes.cpp index 3add7df1..6057e02a 100644 --- a/src/dos/dos_classes.cpp +++ b/src/dos/dos_classes.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_classes.cpp,v 1.57 2009-05-27 09:15:41 qbix79 Exp $ */ +/* $Id: dos_classes.cpp,v 1.58 2009-07-09 20:06:57 c2woody Exp $ */ #include #include @@ -32,14 +32,14 @@ void DOS_ParamBlock::Clear(void) { } void DOS_ParamBlock::LoadData(void) { - exec.envseg=sGet(sExec,envseg); + exec.envseg=(Bit16u)sGet(sExec,envseg); exec.cmdtail=sGet(sExec,cmdtail); exec.fcb1=sGet(sExec,fcb1); exec.fcb2=sGet(sExec,fcb2); exec.initsssp=sGet(sExec,initsssp); exec.initcsip=sGet(sExec,initcsip); - overlay.loadseg=sGet(sOverlay,loadseg); - overlay.relocation=sGet(sOverlay,relocation); + overlay.loadseg=(Bit16u)sGet(sOverlay,loadseg); + overlay.relocation=(Bit16u)sGet(sOverlay,relocation); } void DOS_ParamBlock::SaveData(void) { @@ -143,7 +143,7 @@ void DOS_InfoBlock::SetDiskBufferHeadPt(Bit32u _dbheadpt) { } Bit16u DOS_InfoBlock::GetStartOfUMBChain(void) { - return sGet(sDIB,startOfUMBChain); + return (Bit16u)sGet(sDIB,startOfUMBChain); } void DOS_InfoBlock::SetStartOfUMBChain(Bit16u _umbstartseg) { @@ -151,7 +151,7 @@ void DOS_InfoBlock::SetStartOfUMBChain(Bit16u _umbstartseg) { } Bit8u DOS_InfoBlock::GetUMBChainState(void) { - return sGet(sDIB,chainingUMB); + return (Bit8u)sGet(sDIB,chainingUMB); } void DOS_InfoBlock::SetUMBChainState(Bit8u _umbchaining) { @@ -202,7 +202,7 @@ void DOS_PSP::MakeNew(Bit16u mem_size) { /* Init file pointer and max_files */ sSave(sPSP,file_table,RealMake(seg,offsetof(sPSP,files))); sSave(sPSP,max_files,20); - for (i=0;i<20;i++) SetFileHandle(i,0xff); + for (Bit16u ct=0;ct<20;ct++) SetFileHandle(ct,0xff); /* User Stack pointer */ // if (prevpsp.GetSegment()!=0) sSave(sPSP,stack,prevpsp.GetStack()); @@ -309,7 +309,7 @@ bool DOS_PSP::SetNumFiles(Bit16u fileNum) { sSave(sPSP,file_table,data); sSave(sPSP,max_files,fileNum); Bit16u i; - for (i=0; i<20; i++) SetFileHandle(i,sGet(sPSP,files[i])); + for (i=0; i<20; i++) SetFileHandle(i,(Bit8u)sGet(sPSP,files[i])); for (i=20; i #include @@ -768,11 +768,17 @@ static bool isvalid(const char in){ #define PARSE_RET_BADDRIVE 0xff Bit8u FCB_Parsename(Bit16u seg,Bit16u offset,Bit8u parser ,char *string, Bit8u *change) { - char * string_begin=string;Bit8u ret=0; - DOS_FCB fcb(seg,offset); + char * string_begin=string; + Bit8u ret=0; + if (!(parser & PARSE_DFLT_DRIVE)) { + // default drive forced, this intentionally invalidates an extended FCB + mem_writeb(PhysMake(seg,offset),0); + } + DOS_FCB fcb(seg,offset,false); // always a non-extended FCB bool hasdrive,hasname,hasext,finished; hasdrive=hasname=hasext=finished=false; - Bitu index=0;Bit8u fill=' '; + Bitu index=0; + Bit8u fill=' '; /* First get the old data from the fcb */ #ifdef _MSC_VER #pragma pack (1)