From 850edecdf2d64fe5622ef26aefdf6f1259a1b39b Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Fri, 21 Feb 2003 17:00:31 +0000 Subject: [PATCH] Lot's date and time fixes. Made Gcc3.2 happier Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@673 --- src/dos/dos.cpp | 2 +- src/dos/dos_classes.cpp | 3 ++- src/dos/dos_files.cpp | 13 ++++++++++++- src/dos/drive_local.cpp | 6 +++--- src/ints/int10.h | 3 ++- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/dos/dos.cpp b/src/dos/dos.cpp index 83f14cf6..de47fc6d 100644 --- a/src/dos/dos.cpp +++ b/src/dos/dos.cpp @@ -229,7 +229,7 @@ static Bitu DOS_21Handler(void) { break; case 0x22: /* Write random record to FCB */ reg_al=DOS_FCBRandomWrite(SegValue(ds),reg_dx,1,true); - LOG_DEBUG("DOS:0x28 FCB-Random write used, result:al=%d",reg_al); + LOG_DEBUG("DOS:0x22 FCB-Random write used, result:al=%d",reg_al); break; case 0x23: /* Get file size for FCB */ if (DOS_FCBGetFileSize(SegValue(ds),reg_dx,reg_cx)) reg_al = 0x00; diff --git a/src/dos/dos_classes.cpp b/src/dos/dos_classes.cpp index 9bace66c..97ee3ca3 100644 --- a/src/dos/dos_classes.cpp +++ b/src/dos/dos_classes.cpp @@ -314,7 +314,8 @@ void DOS_FCB::SetSizeDateTime(Bit32u _size,Bit16u _date,Bit16u _time) { void DOS_FCB::GetSizeDateTime(Bit32u & _size,Bit16u & _date,Bit16u & _time) { _size=sGet(sFCB,filesize); - + _date=sGet(sFCB,date); + _time=sGet(sFCB,time); } void DOS_FCB::GetRecord(Bit16u & _cur_block,Bit8u & _cur_rec) { diff --git a/src/dos/dos_files.cpp b/src/dos/dos_files.cpp index ea2b7f88..491d8cf2 100644 --- a/src/dos/dos_files.cpp +++ b/src/dos/dos_files.cpp @@ -22,6 +22,7 @@ #include #include "dosbox.h" +#include "bios.h" #include "mem.h" #include "cpu.h" #include "dos_inc.h" @@ -726,7 +727,17 @@ Bit8u DOS_FCBWrite(Bit16u seg,Bit16u offset,Bit16u recno) Bit32u size;Bit16u date,time; fcb.GetSizeDateTime(size,date,time); if (pos+towrite>size) size=pos+towrite; - //TODO Set time to current time? + //time doesn't keep track of endofday + date = DOS_PackDate(dos.date.year,dos.date.month,dos.date.day); + Bit32u ticks = mem_readd(BIOS_TIMER); + Bit32u seconds = (ticks*10)/182; + Bit16u hour = (Bit16u)(seconds/3600); + Bit16u min = (Bit16u)((seconds % 3600)/60); + Bit16u sec = (Bit16u)(seconds % 60); + time = DOS_PackTime(hour,min,sec); + Bit8u temp=RealHandle(fhandle); + Files[temp]->time=time; + Files[temp]->date=date; fcb.SetSizeDateTime(size,date,time); if (++cur_rec>127) { cur_block++;cur_rec=0; } fcb.SetRecord(cur_block,cur_rec); diff --git a/src/dos/drive_local.cpp b/src/dos/drive_local.cpp index f5afa6ee..446db74f 100644 --- a/src/dos/drive_local.cpp +++ b/src/dos/drive_local.cpp @@ -278,7 +278,7 @@ bool localDrive::FileStat(const char* name, FileStat_Block * const stat_block) { struct tm *time; if((time=localtime(&temp_stat.st_mtime))!=0) { stat_block->time=DOS_PackTime(time->tm_hour,time->tm_min,time->tm_sec); - stat_block->date=DOS_PackDate(time->tm_year,time->tm_mon,time->tm_mday); + stat_block->date=DOS_PackDate(time->tm_year+1900,time->tm_mon+1,time->tm_mday); } else { } @@ -364,9 +364,9 @@ localFile::localFile(const char* _name, FILE * handle,Bit16u devinfo) { struct tm * ltime; if((ltime=localtime(&temp_stat.st_mtime))!=0) { time=DOS_PackTime(ltime->tm_hour,ltime->tm_min,ltime->tm_sec); - date=DOS_PackDate(ltime->tm_year,ltime->tm_mon,ltime->tm_mday); + date=DOS_PackDate(ltime->tm_year+1900,ltime->tm_mon+1,ltime->tm_mday); } else { - time=0;date=0; + time=1;date=1; } size=(Bit32u)temp_stat.st_size; attr=DOS_ATTR_ARCHIVE; diff --git a/src/ints/int10.h b/src/ints/int10.h index 15439f53..1e634b54 100644 --- a/src/ints/int10.h +++ b/src/ints/int10.h @@ -211,4 +211,5 @@ struct Int10Data { VGAMODES * entry; }; -extern Int10Data int10; \ No newline at end of file +extern Int10Data int10; +