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