[TREE] Attempt to fix some style & formatting crimes. Improve header inclusions. CORE-8529

svn path=/trunk/; revision=65786
This commit is contained in:
Amine Khaldi 2014-12-21 18:48:33 +00:00
parent 9d80e094b4
commit b37505476c
3 changed files with 156 additions and 134 deletions

View file

@ -2,5 +2,5 @@
add_executable(tree tree.c tree.rc) add_executable(tree tree.c tree.rc)
set_module_type(tree win32cui UNICODE) set_module_type(tree win32cui UNICODE)
set_target_properties(tree PROPERTIES SUFFIX ".com") set_target_properties(tree PROPERTIES SUFFIX ".com")
add_importlibs(tree msvcrt kernel32 user32) add_importlibs(tree user32 msvcrt kernel32)
add_cd_file(TARGET tree DESTINATION reactos/system32 FOR all) add_cd_file(TARGET tree DESTINATION reactos/system32 FOR all)

View file

@ -6,18 +6,22 @@
*/ */
#include <stdio.h> #include <stdio.h>
//#include <stdarg.h> #include <stdlib.h>
#include <windows.h> #include <windef.h>
#include <winbase.h>
#include <winuser.h>
#include "resource.h" #include "resource.h"
#define STR_MAX 2048 #define STR_MAX 2048
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); 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 /* 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 BOOL bShowFiles = FALSE;
/* if this flag is true, ASCII characters will be used instead of UNICODE ones */
BOOL bUseAscii = FALSE;
/* /*
* This takes strings from a resource string table * This takes strings from a resource string table
@ -50,28 +54,28 @@ static BOOL HasSubFolder(const wchar_t *strPath1)
BOOL ret = FALSE; BOOL ret = FALSE;
WIN32_FIND_DATA FindFileData; WIN32_FIND_DATA FindFileData;
HANDLE hFind = NULL; HANDLE hFind = NULL;
static wchar_t strPath[STR_MAX]= L""; static wchar_t strPath[STR_MAX] = L"";
ZeroMemory(strPath, sizeof(strPath)); ZeroMemory(strPath, sizeof(strPath));
wcscat(strPath,strPath1); wcscat(strPath, strPath1);
wcscat(strPath,L"\\*."); wcscat(strPath, L"\\*.");
hFind=FindFirstFile(strPath, &FindFileData); hFind = FindFirstFile(strPath, &FindFileData);
do do
{ {
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ {
if(wcscmp(FindFileData.cFileName, L".")==0 || if (wcscmp(FindFileData.cFileName, L".") == 0 ||
wcscmp(FindFileData.cFileName, L"..")==0 ) wcscmp(FindFileData.cFileName, L"..") == 0 )
{ {
continue; continue;
} }
ret=TRUE; //found subfolder ret = TRUE; //found subfolder
break; break;
} }
} }
while(FindNextFile(hFind, &FindFileData)); while (FindNextFile(hFind, &FindFileData));
FindClose(hFind); FindClose(hFind);
return ret; return ret;
@ -96,50 +100,57 @@ static BOOL HasSubFolder(const wchar_t *strPath1)
* @return * @return
* void * void
*/ */
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 DrawTree(const wchar_t* strPath,
const WIN32_FIND_DATA *arrFolder,
const size_t szArr,
UINT width,
const wchar_t *prevLine,
BOOL drawfolder)
{ {
BOOL bHasSubFolder = HasSubFolder(strPath); BOOL bHasSubFolder = HasSubFolder(strPath);
UINT i = 0; UINT i = 0;
//this will format the spaces required for correct formatting /* this will format the spaces required for correct formatting */
for(i = 0; i < szArr; ++i) for (i = 0; i < szArr; ++i)
{ {
wchar_t *consoleOut = (wchar_t*)malloc(sizeof(wchar_t) * STR_MAX); wchar_t *consoleOut = (wchar_t*)malloc(sizeof(wchar_t) * STR_MAX);
UINT j=0; UINT j = 0;
static wchar_t str[STR_MAX]; static wchar_t str[STR_MAX];
// As we do not seem to have the _s functions properly set up, use the non-secure version for now /* As we do not seem to have the _s functions properly set up, use the non-secure version for now */
//wcscpy_s(consoleOut, STR_MAX, L""); //wcscpy_s(consoleOut, STR_MAX, L"");
//wcscpy_s(str, STR_MAX, L""); //wcscpy_s(str, STR_MAX, L"");
wcscpy(consoleOut, L""); wcscpy(consoleOut, L"");
wcscpy(str, L""); wcscpy(str, L"");
for(j=0;j<width-1;++j) 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 the previous line has '├' or '│' then the current line will
if((BYTE)prevLine[j] == 195 || (BYTE)prevLine[j] == 179 || (BYTE)prevLine[j] == L'+' || (BYTE)prevLine[j] == L'|') add '' to continue the connecting line */
if ((BYTE)prevLine[j] == 195 || (BYTE)prevLine[j] == 179 ||
(BYTE)prevLine[j] == L'+' || (BYTE)prevLine[j] == L'|')
{ {
if (bUseAscii) if (bUseAscii)
{ {
wchar_t a[]={179,0}; wchar_t a[] = {179, 0};
wcscat(consoleOut,a); wcscat(consoleOut, a);
} }
else else
{ {
wcscat(consoleOut,L"|"); wcscat(consoleOut, L"|");
} }
} }
else else
{ {
wcscat(consoleOut,L" "); wcscat(consoleOut, L" ");
} }
} }
if(szArr - 1 != i) if (szArr - 1 != i)
{ {
if(drawfolder) if (drawfolder)
{ {
// will add '├───Folder name /* will add '├───Folder name */
if (bUseAscii) if (bUseAscii)
wsprintf(str, L"+---%s", (wchar_t*)arrFolder[i].cFileName); wsprintf(str, L"+---%s", (wchar_t*)arrFolder[i].cFileName);
else else
@ -147,9 +158,10 @@ static void DrawTree(const wchar_t* strPath, const WIN32_FIND_DATA *arrFolder, c
} }
else else
{ {
if(bHasSubFolder) if (bHasSubFolder)
{ {
// will add '│ FileNamw' //thie line is added to connect the belowfolder sub structure /* will add '│ FileNamw' //thie line is added to connect
the belowfolder sub structure */
if (bUseAscii) if (bUseAscii)
wsprintf(str,L"| %s", (wchar_t*)arrFolder[i].cFileName); wsprintf(str,L"| %s", (wchar_t*)arrFolder[i].cFileName);
else else
@ -157,16 +169,16 @@ static void DrawTree(const wchar_t* strPath, const WIN32_FIND_DATA *arrFolder, c
} }
else else
{ {
// will add ' FileNamw' /* will add ' FileNamw' */
wsprintf(str,L" %s", (wchar_t*)arrFolder[i].cFileName); wsprintf(str,L" %s", (wchar_t*)arrFolder[i].cFileName);
} }
} }
} }
else else
{ {
if(drawfolder) if (drawfolder)
{ {
// '└───Folder name' /* '└───Folder name' */
if (bUseAscii) if (bUseAscii)
wsprintf(str, L"\\---%s", (wchar_t*)arrFolder[i].cFileName); wsprintf(str, L"\\---%s", (wchar_t*)arrFolder[i].cFileName);
else else
@ -174,18 +186,18 @@ static void DrawTree(const wchar_t* strPath, const WIN32_FIND_DATA *arrFolder, c
} }
else else
{ {
if(bHasSubFolder) if (bHasSubFolder)
{ {
// '│ FileName' /* '│ FileName' */
if (bUseAscii) if (bUseAscii)
wsprintf(str,L"| %s", (wchar_t*)arrFolder[i].cFileName); wsprintf(str, L"| %s", (wchar_t*)arrFolder[i].cFileName);
else else
wsprintf(str,L"%c %s", 179, (wchar_t*)arrFolder[i].cFileName); wsprintf(str, L"%c %s", 179, (wchar_t*)arrFolder[i].cFileName);
} }
else else
{ {
// ' FileName' /* ' FileName' */
wsprintf(str,L" %s", (wchar_t*)arrFolder[i].cFileName); wsprintf(str, L" %s", (wchar_t*)arrFolder[i].cFileName);
} }
} }
} }
@ -193,15 +205,15 @@ static void DrawTree(const wchar_t* strPath, const WIN32_FIND_DATA *arrFolder, c
wcscat(consoleOut, str); wcscat(consoleOut, str);
wprintf(L"%s\n", consoleOut); wprintf(L"%s\n", consoleOut);
if(drawfolder) if (drawfolder)
{ {
wchar_t *str = (wchar_t*)malloc(STR_MAX * sizeof(wchar_t)); wchar_t *str = (wchar_t*)malloc(STR_MAX * sizeof(wchar_t));
ZeroMemory(str, STR_MAX*sizeof(wchar_t)); ZeroMemory(str, STR_MAX * sizeof(wchar_t));
wcscat(str, strPath); wcscat(str, strPath);
wcscat(str, L"\\"); wcscat(str, L"\\");
wcscat(str, arrFolder[i].cFileName); wcscat(str, arrFolder[i].cFileName);
GetDirectoryStructure(str, width+4, consoleOut); GetDirectoryStructure(str, width + 4, consoleOut);
free(str); free(str);
} }
@ -223,46 +235,45 @@ static void DrawTree(const wchar_t* strPath, const WIN32_FIND_DATA *arrFolder, c
* @return * @return
* void * void
*/ */
static void GetDirectoryStructure(wchar_t* strPath, UINT width, const wchar_t* prevLine) static void
GetDirectoryStructure(wchar_t* strPath, UINT width, const wchar_t* prevLine)
{ {
WIN32_FIND_DATA FindFileData; WIN32_FIND_DATA FindFileData;
HANDLE hFind = NULL; HANDLE hFind = NULL;
//DWORD err = 0; //DWORD err = 0;
//will fill up with names of all sub folders /* will fill up with names of all sub folders */
WIN32_FIND_DATA *arrFolder = NULL; WIN32_FIND_DATA *arrFolder = NULL;
UINT arrFoldersz = 0; UINT arrFoldersz = 0;
//will fill up with names of all sub folders /* will fill up with names of all sub folders */
WIN32_FIND_DATA *arrFile = NULL; WIN32_FIND_DATA *arrFile = NULL;
UINT arrFilesz = 0; UINT arrFilesz = 0;
ZeroMemory(&FindFileData,sizeof(FindFileData)); ZeroMemory(&FindFileData, sizeof(FindFileData));
{ {
static wchar_t tmp[STR_MAX]=L""; static wchar_t tmp[STR_MAX] = L"";
ZeroMemory(tmp,sizeof(tmp)); ZeroMemory(tmp, sizeof(tmp));
wcscat(tmp,strPath); wcscat(tmp, strPath);
wcscat(tmp,L"\\*.*"); wcscat(tmp, L"\\*.*");
hFind = FindFirstFile(tmp, &FindFileData);
hFind=FindFirstFile(tmp, &FindFileData);
//err = GetLastError(); //err = GetLastError();
} }
if(hFind == INVALID_HANDLE_VALUE) if (hFind == INVALID_HANDLE_VALUE)
return; return;
do do
{ {
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ {
if(wcscmp(FindFileData.cFileName, L".")==0 || if (wcscmp(FindFileData.cFileName, L".") == 0 ||
wcscmp(FindFileData.cFileName, L"..")==0 ) wcscmp(FindFileData.cFileName, L"..") == 0)
continue; continue;
++arrFoldersz; ++arrFoldersz;
arrFolder=(WIN32_FIND_DATA*)realloc(arrFolder, arrFoldersz * sizeof(FindFileData)); arrFolder = (WIN32_FIND_DATA*)realloc(arrFolder, arrFoldersz * sizeof(FindFileData));
if(arrFolder == NULL) if (arrFolder == NULL)
exit(-1); exit(-1);
arrFolder[arrFoldersz - 1] = FindFileData; arrFolder[arrFoldersz - 1] = FindFileData;
@ -271,7 +282,7 @@ static void GetDirectoryStructure(wchar_t* strPath, UINT width, const wchar_t* p
else else
{ {
++arrFilesz; ++arrFilesz;
arrFile=(WIN32_FIND_DATA*)realloc(arrFile, arrFilesz * sizeof(FindFileData)); arrFile = (WIN32_FIND_DATA*)realloc(arrFile, arrFilesz * sizeof(FindFileData));
if(arrFile == NULL) if(arrFile == NULL)
exit(-1); exit(-1);
@ -279,16 +290,18 @@ static void GetDirectoryStructure(wchar_t* strPath, UINT width, const wchar_t* p
arrFile[arrFilesz - 1] = FindFileData; arrFile[arrFilesz - 1] = FindFileData;
} }
} }
while(FindNextFile(hFind, &FindFileData)); while (FindNextFile(hFind, &FindFileData));
FindClose(hFind); FindClose(hFind);
if(bShowFiles) if (bShowFiles)
{ {
DrawTree(strPath, arrFile, arrFilesz, width, prevLine, FALSE); //will free(arrFile) /* will free(arrFile) */
DrawTree(strPath, arrFile, arrFilesz, width, prevLine, FALSE);
} }
DrawTree(strPath, arrFolder, arrFoldersz, width, prevLine, TRUE); //will free(arrFile) /* will free(arrFile) */
DrawTree(strPath, arrFolder, arrFoldersz, width, prevLine, TRUE);
free(arrFolder); free(arrFolder);
free(arrFile); free(arrFile);
@ -304,37 +317,43 @@ static void GetDirectoryStructure(wchar_t* strPath, UINT width, const wchar_t* p
int wmain( int argc, wchar_t *argv[]) int wmain( int argc, wchar_t *argv[])
{ {
DWORD dwSerial = 0; DWORD dwSerial = 0;
wchar_t t=0; wchar_t t = 0;
wchar_t *strPath = NULL; wchar_t *strPath = NULL;
DWORD sz = 0; DWORD sz = 0;
//wchar_t *context = NULL ; //wchar_t *context = NULL;
wchar_t *driveLetter = NULL; wchar_t *driveLetter = NULL;
int i; int i;
for(i = 1; i < argc; ++i) //parse the command line /* parse the command line */
for (i = 1; i < argc; ++i)
{ {
if (argv[i][0] == L'-' || argv[i][0] == L'/') if (argv[i][0] == L'-' || argv[i][0] == L'/')
{ {
switch (towlower(argv[i][1])) switch (towlower(argv[i][1]))
{ {
case L'?': case L'?':
PrintResourceString(IDS_USAGE); //will print help and exit after /* will print help and exit after */
PrintResourceString(IDS_USAGE);
return 0; return 0;
case L'f': case L'f':
bShowFiles=TRUE; //if set to true, will populate all the files within the folder structure /* if set to true, will populate all the files within the folder structure */
bShowFiles = TRUE;
break; break;
case L'a': case L'a':
bUseAscii=TRUE; bUseAscii = TRUE;
break;
default:
break; break;
default:break;
} }
} }
else else
{ {
//this must be path to some folder /* this must be path to some folder */
BOOL b=SetCurrentDirectoryW(argv[i]); //will set the current directory for this executable
if(b==FALSE) /* will set the current directory for this executable */
BOOL b = SetCurrentDirectoryW(argv[i]);
if (b == FALSE)
{ {
PrintResourceString(IDS_NO_SUBDIRECTORIES); PrintResourceString(IDS_NO_SUBDIRECTORIES);
return 1; return 1;
@ -347,25 +366,29 @@ int wmain( int argc, wchar_t *argv[])
GetVolumeInformation(NULL, NULL, 0, &dwSerial, NULL, NULL, NULL, 0); GetVolumeInformation(NULL, NULL, 0, &dwSerial, NULL, NULL, NULL, 0);
PrintResourceString(IDS_VOL_SERIAL, dwSerial >> 16, dwSerial & 0xffff); PrintResourceString(IDS_VOL_SERIAL, dwSerial >> 16, dwSerial & 0xffff);
sz = GetCurrentDirectory(1, &t); //get the buffer size /* get the buffer size */
strPath = (wchar_t*)malloc(sizeof(wchar_t) * sz); //must not return before calling delete[] sz = GetCurrentDirectory(1, &t);
/* must not return before calling delete[] */
strPath = (wchar_t*)malloc(sizeof(wchar_t) * sz);
GetCurrentDirectory(sz, strPath); //get the current directory /* get the current directory */
GetCurrentDirectory(sz, strPath);
/* get the drive letter , must not return before calling delete[] */
driveLetter = (wchar_t*)malloc(sizeof(wchar_t) * sz);
driveLetter = (wchar_t*)malloc(sizeof(wchar_t) * sz); //get the drive letter , must not return before calling delete[] /* As we do not seem to have the _s functions properly set up, use the non-secure version for now */
// As we do not seem to have the _s functions properly set up, use the non-secure version for now
//wcscpy_s(driveLetter,sz,strPath); //wcscpy_s(driveLetter,sz,strPath);
//wcstok_s(driveLetter,L":", &context); //parse for the drive letter //wcstok_s(driveLetter,L":", &context); //parse for the drive letter
wcscpy(driveLetter,strPath); wcscpy(driveLetter, strPath);
wcstok(driveLetter, L":"); wcstok(driveLetter, L":");
wprintf(L"%s:.\n",driveLetter); wprintf(L"%s:.\n", driveLetter);
free(driveLetter); free(driveLetter);
GetDirectoryStructure(strPath, 1, L" "); //get the sub directories within this current folder /* get the sub directories within this current folder */
GetDirectoryStructure(strPath, 1, L" ");
free(strPath); free(strPath);
wprintf(L"\n"); wprintf(L"\n");

View file

@ -1,5 +1,4 @@
#include <windef.h> #include <windef.h>
#include <winuser.h>
#include "resource.h" #include "resource.h"