From 764dc5c5435c4a702b7b76e167ca890d949e150f Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Mon, 11 Nov 2002 18:40:43 +0000 Subject: [PATCH] fixed some fcb errors: fcb-open and fcb-create created. fixed return values. fixed wildcmp Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@492 --- include/dos_inc.h | 3 ++- src/dos/dos.cpp | 6 +++--- src/dos/dos_classes.cpp | 2 +- src/dos/dos_files.cpp | 11 ++++++++++- src/dos/drive_local.cpp | 2 +- src/dos/drives.cpp | 1 + 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/include/dos_inc.h b/include/dos_inc.h index 26a1c047..ff3d7595 100644 --- a/include/dos_inc.h +++ b/include/dos_inc.h @@ -142,7 +142,8 @@ void DOS_FreeProcessMemory(Bit16u pspseg); Bit16u DOS_GetMemory(Bit16u pages); /* FCB stuff */ -bool DOS_FCBOpenCreate(Bit16u seg,Bit16u offset); +bool DOS_FCBOpen(Bit16u seg,Bit16u offset); +bool DOS_FCBCreate(Bit16u seg,Bit16u offset); bool DOS_FCBClose(Bit16u seg,Bit16u offset); bool DOS_FCBFindFirst(Bit16u seg,Bit16u offset); bool DOS_FCBFindNext(Bit16u seg,Bit16u offset); diff --git a/src/dos/dos.cpp b/src/dos/dos.cpp index 07ae0e9a..2093fb90 100644 --- a/src/dos/dos.cpp +++ b/src/dos/dos.cpp @@ -164,7 +164,7 @@ static Bitu DOS_21Handler(void) { reg_al=26; break; case 0x0f: /* Open File using FCB */ - if(DOS_FCBOpenCreate(SegValue(ds),reg_dx)){ + if(DOS_FCBOpen(SegValue(ds),reg_dx)){ reg_al=0; }else{ reg_al=0xff; @@ -208,8 +208,8 @@ static Bitu DOS_21Handler(void) { LOG_DEBUG("DOS:0x15 FCB-Write used, result:al=%d",reg_al); break; case 0x16: /* Create or truncate file using FCB */ - if (DOS_FCBOpenCreate(SegValue(ds),reg_dx)) reg_al = 0x00; - else reg_al = 0x01; + if (DOS_FCBCreate(SegValue(ds),reg_dx)) reg_al = 0x00; + else reg_al = 0xFF; LOG_DEBUG("DOS:0x16 FCB-Create used, result:al=%d",reg_al); break; case 0x17: /* Rename file using FCB */ diff --git a/src/dos/dos_classes.cpp b/src/dos/dos_classes.cpp index 3f1c7291..6025b28b 100644 --- a/src/dos/dos_classes.cpp +++ b/src/dos/dos_classes.cpp @@ -318,7 +318,7 @@ void DOS_FCB::SetRandom(Bit32u _random) { } void DOS_FCB::FileOpen(Bit8u _fhandle) { - sSave(sFCB,drive,GetDrive()); + sSave(sFCB,drive,GetDrive()+1); sSave(sFCB,file_handle,_fhandle); sSave(sFCB,cur_block,0); sSave(sFCB,rec_size,128); diff --git a/src/dos/dos_files.cpp b/src/dos/dos_files.cpp index 4af8f71a..42a0c08e 100644 --- a/src/dos/dos_files.cpp +++ b/src/dos/dos_files.cpp @@ -635,7 +635,16 @@ static void SaveFindResult(DOS_FCB & find_fcb) { fcb.SetSizeDateTime(size,date,time); } -bool DOS_FCBOpenCreate(Bit16u seg,Bit16u offset) { +bool DOS_FCBCreate(Bit16u seg,Bit16u offset) { + DOS_FCB fcb(seg,offset); + char shortname[DOS_FCBNAME];Bit16u handle; + fcb.GetName(shortname); + if (!DOS_CreateFile(shortname,2,&handle)) return false; + fcb.FileOpen((Bit8u)handle); + return true; +} + +bool DOS_FCBOpen(Bit16u seg,Bit16u offset) { DOS_FCB fcb(seg,offset); char shortname[DOS_FCBNAME];Bit16u handle; fcb.GetName(shortname); diff --git a/src/dos/drive_local.cpp b/src/dos/drive_local.cpp index 7dfd868d..28bf7c12 100644 --- a/src/dos/drive_local.cpp +++ b/src/dos/drive_local.cpp @@ -43,7 +43,7 @@ private: }; -bool localDrive:: FileCreate(DOS_File * * file,char * name,Bit16u attributes) { +bool localDrive::FileCreate(DOS_File * * file,char * name,Bit16u attributes) { //TODO Maybe care for attributes but not likely char newname[CROSS_LEN]; strcpy(newname,basedir); diff --git a/src/dos/drives.cpp b/src/dos/drives.cpp index 2785b18d..65d6483f 100644 --- a/src/dos/drives.cpp +++ b/src/dos/drives.cpp @@ -63,6 +63,7 @@ bool WildFileCmp(const char * file, const char * wild) r++; } checkext: + r=0; while (r<3) { if (wild_ext[r]=='*') return true; if (wild_ext[r]!='?' && wild_ext[r]!=file_ext[r]) return false;