Author: zguo
Date: Sun Dec 14 18:30:14 2014
New Revision: 65646

URL: http://svn.reactos.org/svn/reactos?rev=65646&view=rev
Log:
[TREE]
Cleanup of Tree utility by Lee Schroeder.
CORE-8908

Added:
    trunk/reactos/base/applications/cmdutils/tree/lang/
    trunk/reactos/base/applications/cmdutils/tree/lang/en-US.rc   (with props)
    trunk/reactos/base/applications/cmdutils/tree/resource.h   (with props)
    trunk/reactos/base/applications/cmdutils/tree/tree.rc   (with props)
Modified:
    trunk/reactos/base/applications/cmdutils/tree/CMakeLists.txt
    trunk/reactos/base/applications/cmdutils/tree/tree.c

Modified: trunk/reactos/base/applications/cmdutils/tree/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils/tree/CMakeLists.txt?rev=65646&r1=65645&r2=65646&view=diff
==============================================================================
--- trunk/reactos/base/applications/cmdutils/tree/CMakeLists.txt        
[iso-8859-1] (original)
+++ trunk/reactos/base/applications/cmdutils/tree/CMakeLists.txt        
[iso-8859-1] Sun Dec 14 18:30:14 2014
@@ -1,5 +1,6 @@
 
-add_executable(tree tree.c)
+add_executable(tree tree.c tree.rc)
 set_module_type(tree win32cui UNICODE)
+set_target_properties(tree PROPERTIES SUFFIX ".com")
 add_importlibs(tree msvcrt kernel32 user32)
 add_cd_file(TARGET tree DESTINATION reactos/system32 FOR all)

Added: trunk/reactos/base/applications/cmdutils/tree/lang/en-US.rc
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils/tree/lang/en-US.rc?rev=65646
==============================================================================
--- trunk/reactos/base/applications/cmdutils/tree/lang/en-US.rc (added)
+++ trunk/reactos/base/applications/cmdutils/tree/lang/en-US.rc [iso-8859-1] 
Sun Dec 14 18:30:14 2014
@@ -0,0 +1,12 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+STRINGTABLE
+BEGIN
+    IDS_USAGE "Visually displays the folder structure of a drive or path.\n\n\
+TREE [drive:][path] [/F] [/A]\n\n\
+\t/F   Display the names of the files in each folder.\n\
+\t/A   Use ASCII instead of extended characters.\n"
+    IDS_NO_SUBDIRECTORIES "No subdirectories exist"
+    IDS_FOLDER_PATH "Folder PATH Listing\n"
+    IDS_VOL_SERIAL "Volume serial number is %x:%x\n"
+END

Propchange: trunk/reactos/base/applications/cmdutils/tree/lang/en-US.rc
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/base/applications/cmdutils/tree/resource.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils/tree/resource.h?rev=65646
==============================================================================
--- trunk/reactos/base/applications/cmdutils/tree/resource.h    (added)
+++ trunk/reactos/base/applications/cmdutils/tree/resource.h    [iso-8859-1] 
Sun Dec 14 18:30:14 2014
@@ -0,0 +1,9 @@
+#ifndef RESOURCE_H
+#define RESOURCE_H
+
+#define IDS_USAGE              0
+#define IDS_NO_SUBDIRECTORIES  1
+#define IDS_FOLDER_PATH        2
+#define IDS_VOL_SERIAL         3
+
+#endif /* RESOURCE_H */

Propchange: trunk/reactos/base/applications/cmdutils/tree/resource.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/base/applications/cmdutils/tree/tree.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils/tree/tree.c?rev=65646&r1=65645&r2=65646&view=diff
==============================================================================
--- trunk/reactos/base/applications/cmdutils/tree/tree.c        [iso-8859-1] 
(original)
+++ trunk/reactos/base/applications/cmdutils/tree/tree.c        [iso-8859-1] 
Sun Dec 14 18:30:14 2014
@@ -9,16 +9,32 @@
 //
 #include <windows.h>
 #include <stdio.h>
+//#include <stdarg.h>
+
+#include "resource.h"
 
 #define STR_MAX 2048
-
-const wchar_t *HELP = L"\nGraphically displays the folder structure of a drive 
or path.  \n\nTREE [drive:][path] [/F] [/A]\n\n   /F   Display the names of the 
files in each folder.\n\n\n";
-const wchar_t *INVALID = L"No subfolders exist";
 
 static void DrawTree(const wchar_t* strPath, const WIN32_FIND_DATA *arrFolder, 
const size_t szArr, UINT width, const wchar_t *prevLine, BOOL drawfolder);
 static void GetDirectoryStructure(wchar_t* strPath, UINT width, const wchar_t* 
prevLine);
 
 BOOL bShowFiles = FALSE;  //if this flag is set to true, files will also be 
listed
+BOOL bUseAscii = FALSE; //if this flag is true, ASCII characters will be used 
instead of UNICODE ones
+
+/*
+ * This takes strings from a resource string table
+ * and outputs it to the console.
+ */
+VOID PrintResourceString(INT resID, ...)
+{
+    WCHAR tmpBuffer[STR_MAX];
+    va_list arg_ptr;
+
+    va_start(arg_ptr, resID);
+    LoadStringW(GetModuleHandle(NULL), resID, tmpBuffer, STR_MAX);
+    vfwprintf(stdout, tmpBuffer, arg_ptr);
+    va_end(arg_ptr);
+}
 
 /**
 * @name: HasSubFolder
@@ -101,10 +117,17 @@
         for(j=0;j<width-1;++j)
         {
             //if the previous line has '├' or '│' then the current line 
will add '│' to continue the connecting line
-            if((BYTE)prevLine[j] == 195 || (BYTE)prevLine[j] == 179)
-            {
-                wchar_t a[]={179,0};
-                wcscat(consoleOut,a);
+            if((BYTE)prevLine[j] == 195 || (BYTE)prevLine[j] == 179 || 
(BYTE)prevLine[j] == L'+' || (BYTE)prevLine[j] == L'|')
+            {
+                if (bUseAscii)
+                {
+                    wchar_t a[]={179,0};
+                    wcscat(consoleOut,a);
+                }
+                else
+                {
+                    wcscat(consoleOut,L"|");
+                }
             }
             else
             {
@@ -117,14 +140,20 @@
             if(drawfolder)
             {
                 // will add '├───Folder name
-                wsprintf(str, L"%c%c%c%c%s", 195, 196, 196, 196, 
(wchar_t*)arrFolder[i].cFileName);
+                if (bUseAscii)
+                    wsprintf(str, L"+---%s", (wchar_t*)arrFolder[i].cFileName);
+                else
+                    wsprintf(str, L"%c%c%c%c%s", 195, 196, 196, 196, 
(wchar_t*)arrFolder[i].cFileName);
             }
             else
             {
                 if(bHasSubFolder)
                 {
                     // will add '│   FileNamw'  //thie line is added to 
connect the belowfolder sub structure
-                    wsprintf(str,L"%c   %s", 179, 
(wchar_t*)arrFolder[i].cFileName);
+                    if (bUseAscii)
+                        wsprintf(str,L"|   %s", 
(wchar_t*)arrFolder[i].cFileName);
+                    else
+                        wsprintf(str,L"%c   %s", 179, 
(wchar_t*)arrFolder[i].cFileName);
                 }
                 else
                 {
@@ -138,14 +167,20 @@
             if(drawfolder)
             {
                 // '└───Folder name'
-                wsprintf(str, L"%c%c%c%c%s", 192, 196, 196, 196, 
(wchar_t*)arrFolder[i].cFileName);
+                if (bUseAscii)
+                    wsprintf(str, L"\\---%s", 
(wchar_t*)arrFolder[i].cFileName);
+                else
+                    wsprintf(str, L"%c%c%c%c%s", 192, 196, 196, 196, 
(wchar_t*)arrFolder[i].cFileName);
             }
             else
             {
                 if(bHasSubFolder)
                 {
                     // '│   FileName'
-                    wsprintf(str,L"%c   %s", 179, 
(wchar_t*)arrFolder[i].cFileName);
+                    if (bUseAscii)
+                        wsprintf(str,L"|   %s", 
(wchar_t*)arrFolder[i].cFileName);
+                    else
+                        wsprintf(str,L"%c   %s", 179, 
(wchar_t*)arrFolder[i].cFileName);
                 }
                 else
                 {
@@ -279,14 +314,21 @@
     
     for(i = 1; i < argc; ++i)   //parse the command line
     {
-        if(wcscmp(argv[i], L"/?") == 0)
-        {
-            wprintf(HELP);  //will print help and exit after
-            return 0;
-        } 
-        else if(wcscmp(argv[i],L"/F")==0 || wcscmp(argv[i],L"/f")==0)
-        {
-            bShowFiles=TRUE;  //if set to true, will populate all the files 
within the folder structure
+        if (argv[i][0] == L'-' || argv[i][0] == L'/')
+        {
+            switch (towlower(argv[i][1]))
+            {
+            case L'?':
+                PrintResourceString(IDS_USAGE); //will print help and exit 
after
+                return 0;
+            case L'f':
+                bShowFiles=TRUE;  //if set to true, will populate all the 
files within the folder structure
+                break;
+            case L'a':
+                bUseAscii=TRUE;
+                break;
+            default:break;
+            }
         }
         else
         {
@@ -294,16 +336,16 @@
             BOOL b=SetCurrentDirectoryW(argv[i]);  //will set the current 
directory for this executable
             if(b==FALSE)
             {
-                wprintf(INVALID);
+                PrintResourceString(IDS_NO_SUBDIRECTORIES);
                 return 1;
             }
         }
     }
 
-    wprintf(L"Folder PATH listing\n");
+    PrintResourceString(IDS_FOLDER_PATH);
 
     GetVolumeInformation(NULL, NULL, 0, &dwSerial, NULL, NULL, NULL, 0);
-    wprintf(L"Volume serial number is %x:%x\n", dwSerial >> 16, dwSerial & 
0xffff);
+    PrintResourceString(IDS_VOL_SERIAL,  dwSerial >> 16, dwSerial & 0xffff);
 
     sz = GetCurrentDirectory(1, &t);  //get the buffer size
     strPath = (wchar_t*)malloc(sizeof(wchar_t) * sz);     //must not return 
before calling delete[]

Added: trunk/reactos/base/applications/cmdutils/tree/tree.rc
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils/tree/tree.rc?rev=65646
==============================================================================
--- trunk/reactos/base/applications/cmdutils/tree/tree.rc       (added)
+++ trunk/reactos/base/applications/cmdutils/tree/tree.rc       [iso-8859-1] 
Sun Dec 14 18:30:14 2014
@@ -0,0 +1,17 @@
+#include <windef.h>
+#include <winuser.h>
+
+#include "resource.h"
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_STR_FILE_DESCRIPTION    "ReactOS Tree Walk Utility"
+#define REACTOS_STR_INTERNAL_NAME       "tree"
+#define REACTOS_STR_ORIGINAL_FILENAME   "tree.exe"
+#include <reactos/version.rc>
+
+/* UTF-8 */
+#pragma code_page(65001)
+#ifdef LANGUAGE_EN_US
+    #include "lang/en-US.rc"
+#endif

Propchange: trunk/reactos/base/applications/cmdutils/tree/tree.rc
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to