This patch makes 4dos dir command show file stamps. Changelog: Added some long filename functions. Index: dlls/winedos/int21.c =================================================================== RCS file: /home/wine/wine/dlls/winedos/int21.c,v retrieving revision 1.34 diff -u -r1.34 int21.c --- dlls/winedos/int21.c 19 May 2003 21:40:05 -0000 1.34 +++ dlls/winedos/int21.c 20 May 2003 04:26:29 -0000 @@ -1730,7 +1730,7 @@ switch (AL_reg(context)) { case 0x0d: /* RESET DRIVE */ - INT_Int21Handler( context ); + INT_BARF( context, 0x21 ); break; case 0x39: /* LONG FILENAME - MAKE DIRECTORY */ @@ -1790,14 +1790,73 @@ case 0x6c: /* LONG FILENAME - CREATE OR OPEN FILE */ case 0xa0: /* LONG FILENAME - GET VOLUME INFORMATION */ case 0xa1: /* LONG FILENAME - "FindClose" - TERMINATE DIRECTORY SEARCH */ + INT_Int21Handler( context ); + break; + case 0xa6: /* LONG FILENAME - GET FILE INFO BY HANDLE */ + { + HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context)); + BY_HANDLE_FILE_INFORMATION *info = + CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx); + + TRACE( "LONG FILENAME - GET FILE INFO BY HANDLE\n" ); + + if (!GetFileInformationByHandle(handle, info)) + bSetDOSExtendedError = TRUE; + } + break; + case 0xa7: /* LONG FILENAME - CONVERT TIME */ + switch (BL_reg(context)) + { + case 0x00: /* FILE TIME TO DOS TIME */ + { + WORD date, time; + FILETIME *filetime = CTX_SEG_OFF_TO_LIN(context, + context->SegDs, + context->Esi); + + TRACE( "LONG FILENAME - FILE TIME TO DOS TIME\n" ); + + FileTimeToDosDateTime( filetime, &date, &time ); + + SET_DX( context, date ); + SET_CX( context, time ); + + /* + * FIXME: BH has number of 10-millisecond units + * past time in CX. + */ + SET_BH( context, 0 ); + } + break; + + case 0x01: /* DOS TIME TO FILE TIME */ + { + FILETIME *filetime = CTX_SEG_OFF_TO_LIN(context, + context->SegEs, + context->Edi); + + TRACE( "LONG FILENAME - DOS TIME TO FILE TIME\n" ); + + /* + * FIXME: BH has number of 10-millisecond units + * past time in CX. + */ + DosDateTimeToFileTime( DX_reg(context), CX_reg(context), + filetime ); + } + break; + + default: + INT_BARF( context, 0x21 ); + break; + } + break; + case 0xa8: /* LONG FILENAME - GENERATE SHORT FILENAME */ case 0xa9: /* LONG FILENAME - SERVER CREATE OR OPEN FILE */ case 0xaa: /* LONG FILENAME - SUBST */ - INT_Int21Handler( context ); - break; - default: INT_BARF( context, 0x21 ); } -- Jukka Heinonen <http://www.iki.fi/jhei/>