Jason Edmeades : cmd.exe: Add DIR /T support.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Mar 13 07:56:11 CDT 2007
Module: wine
Branch: master
Commit: 577b8ef2338572076d5e4286a46fcc7bf33a42be
URL: http://source.winehq.org/git/wine.git/?a=commit;h=577b8ef2338572076d5e4286a46fcc7bf33a42be
Author: Jason Edmeades <us at edmeades.me.uk>
Date: Tue Mar 13 00:12:44 2007 +0000
cmd.exe: Add DIR /T support.
---
programs/cmd/directory.c | 35 ++++++++++++++++++++++++++++++++++-
1 files changed, 34 insertions(+), 1 deletions(-)
diff --git a/programs/cmd/directory.c b/programs/cmd/directory.c
index 32e69e9..eec4ba8 100644
--- a/programs/cmd/directory.c
+++ b/programs/cmd/directory.c
@@ -39,8 +39,16 @@ extern int echo_mode;
extern char quals[MAX_PATH], param1[MAX_PATH], param2[MAX_PATH];
extern DWORD errorlevel;
+typedef enum _DISPLAYTIME
+{
+ Creation = 0,
+ Access,
+ Written
+} DISPLAYTIME;
+
static int file_total, dir_total, recurse, wide, bare, max_width, lower;
static ULONGLONG byte_total;
+static DISPLAYTIME dirTime;
/*****************************************************************************
* WCMD_directory
@@ -55,9 +63,11 @@ void WCMD_directory (void) {
int status, paged_mode;
ULARGE_INTEGER avail, total, free;
CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
+ char *p;
byte_total = 0;
file_total = dir_total = 0;
+ dirTime = Written;
/* Handle args */
paged_mode = (strstr(quals, "/P") != NULL);
@@ -66,6 +76,23 @@ void WCMD_directory (void) {
bare = (strstr(quals, "/B") != NULL);
lower = (strstr(quals, "/L") != NULL);
+ if ((p = strstr(quals, "/T")) != NULL) {
+ p = p + 2;
+ if (*p==':') p++; /* Skip optional : */
+
+ if (*p == 'A') dirTime = Access;
+ else if (*p == 'C') dirTime = Creation;
+ else if (*p == 'W') dirTime = Written;
+
+ /* Support /T and /T: with no parms, default to written */
+ else if (*p == '/') dirTime = Written;
+ else {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ WCMD_print_error();
+ return;
+ }
+ }
+
/* Handle conflicting args and initialization */
if (bare) wide = FALSE;
@@ -212,7 +239,13 @@ void WCMD_list_directory (char *search_path, int level) {
while ( (*p = tolower(*p)) ) ++p;
}
- FileTimeToLocalFileTime (&(fd+i)->ftLastWriteTime, &ft);
+ if (dirTime == Written) {
+ FileTimeToLocalFileTime (&(fd+i)->ftLastWriteTime, &ft);
+ } else if (dirTime == Access) {
+ FileTimeToLocalFileTime (&(fd+i)->ftLastAccessTime, &ft);
+ } else {
+ FileTimeToLocalFileTime (&(fd+i)->ftCreationTime, &ft);
+ }
FileTimeToSystemTime (&ft, &st);
GetDateFormat (0, DATE_SHORTDATE, &st, NULL, datestring,
sizeof(datestring));
More information about the wine-cvs
mailing list