Implement switch /R for dir command.
It allows enumerating alternate data streams of files

Commit dedicated to Ged

svn path=/trunk/; revision=68823
This commit is contained in:
Pierre Schweitzer 2015-08-25 20:35:51 +00:00
parent b72e356c87
commit 6686b09385
21 changed files with 218 additions and 84 deletions

View file

@ -132,6 +132,9 @@
* Removed variables formerly in use to handle pagination
* Pagination belongs to ConOutPrintfPaging
* Removed already commented out code of old pagination
*
* 25-Aug-2015 (Pierre Schweitzer)
* Implemented /R switch
*/
#include "precomp.h"
@ -172,6 +175,7 @@ typedef struct _DirSwitchesFlags
BOOL bRecursive; /* Displays files in specified directory and all sub */
BOOL bShortName; /* Displays the sort name of files if exist */
BOOL b4Digit; /* Four digit year */
BOOL bDataStreams; /* Displays alternate data streams */
struct
{
DWORD dwAttribVal; /* The desired state of attribute */
@ -189,9 +193,21 @@ typedef struct _DirSwitchesFlags
} stTimeField; /* The time field to display or use for sorting */
} DIRSWITCHFLAGS, *LPDIRSWITCHFLAGS;
typedef struct _DIRFINDLISTNODE
typedef struct _DIRFINDSTREAMNODE
{
WIN32_FIND_STREAM_DATA stStreamInfo;
struct _DIRFINDSTREAMNODE *ptrNext;
} DIRFINDSTREAMNODE, *PDIRFINDSTREAMNODE;
typedef struct _DIRFINDINFO
{
WIN32_FIND_DATA stFindInfo;
PDIRFINDSTREAMNODE ptrHead;
} DIRFINDINFO, *PDIRFINDINFO;
typedef struct _DIRFINDLISTNODE
{
DIRFINDINFO stInfo;
struct _DIRFINDLISTNODE *ptrNext;
} DIRFINDLISTNODE, *PDIRFINDLISTNODE;
@ -325,6 +341,8 @@ DirReadParam(LPTSTR Line, /* [IN] The line with the parameters & s
lpFlags->bRecursive = ! bNegative;
else if (cCurUChar == _T('X'))
lpFlags->bShortName = ! bNegative;
else if (cCurChar == _T('R'))
lpFlags->bDataStreams = ! bNegative;
else if (cCurChar == _T('4'))
lpFlags->b4Digit = ! bNegative;
else if (cCurChar == _T('?'))
@ -838,7 +856,7 @@ getName(const TCHAR* file, TCHAR * dest)
* The function that prints in new style
*/
static VOID
DirPrintNewList(LPWIN32_FIND_DATA ptrFiles[], /* [IN]Files' Info */
DirPrintNewList(PDIRFINDINFO ptrFiles[], /* [IN]Files' Info */
DWORD dwCount, /* [IN] The quantity of files */
TCHAR *szCurPath, /* [IN] Full path of current directory */
LPDIRSWITCHFLAGS lpFlags) /* [IN] The flags used */
@ -850,17 +868,18 @@ DirPrintNewList(LPWIN32_FIND_DATA ptrFiles[], /* [IN]Files' Info */
TCHAR szTime[20];
INT iSizeFormat;
ULARGE_INTEGER u64FileSize;
PDIRFINDSTREAMNODE ptrCurStream;
for (i = 0; i < dwCount && !bCtrlBreak; i++)
{
/* Calculate size */
if (ptrFiles[i]->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
if (ptrFiles[i]->stFindInfo.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
{
/* Junction */
iSizeFormat = -14;
_tcscpy(szSize, _T("<JUNCTION>"));
}
else if (ptrFiles[i]->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
else if (ptrFiles[i]->stFindInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
/* Directory */
iSizeFormat = -14;
@ -870,18 +889,18 @@ DirPrintNewList(LPWIN32_FIND_DATA ptrFiles[], /* [IN]Files' Info */
{
/* File */
iSizeFormat = 14;
u64FileSize.HighPart = ptrFiles[i]->nFileSizeHigh;
u64FileSize.LowPart = ptrFiles[i]->nFileSizeLow;
u64FileSize.HighPart = ptrFiles[i]->stFindInfo.nFileSizeHigh;
u64FileSize.LowPart = ptrFiles[i]->stFindInfo.nFileSizeLow;
ConvertULargeInteger(u64FileSize.QuadPart, szSize, 20, lpFlags->bTSeperator);
}
/* Calculate short name */
szShortName[0] = _T('\0');
if (lpFlags->bShortName)
_stprintf(szShortName, _T(" %-12s"), ptrFiles[i]->cAlternateFileName);
_stprintf(szShortName, _T(" %-12s"), ptrFiles[i]->stFindInfo.cAlternateFileName);
/* Format date and time */
DirPrintFileDateTime(szDate, szTime, ptrFiles[i], lpFlags);
DirPrintFileDateTime(szDate, szTime, &ptrFiles[i]->stFindInfo, lpFlags);
/* Print the line */
DirPrintf(lpFlags, _T("%10s %-6s %*s%s %s\n"),
@ -890,7 +909,25 @@ DirPrintNewList(LPWIN32_FIND_DATA ptrFiles[], /* [IN]Files' Info */
iSizeFormat,
szSize,
szShortName,
ptrFiles[i]->cFileName);
ptrFiles[i]->stFindInfo.cFileName);
/* Now, loop on the streams */
ptrCurStream = ptrFiles[i]->ptrHead;
while (ptrCurStream)
{
ConvertULargeInteger(ptrCurStream->stStreamInfo.StreamSize.QuadPart, szSize, 20, lpFlags->bTSeperator);
/* Print the line */
DirPrintf(lpFlags, _T("%10s %-6s %*s%s %s%s\n"),
L"",
L"",
16,
szSize,
L"",
ptrFiles[i]->stFindInfo.cFileName,
ptrCurStream->stStreamInfo.cStreamName);
ptrCurStream = ptrCurStream->ptrNext;
}
}
}
@ -901,7 +938,7 @@ DirPrintNewList(LPWIN32_FIND_DATA ptrFiles[], /* [IN]Files' Info */
* The function that prints in wide list
*/
static VOID
DirPrintWideList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
DirPrintWideList(PDIRFINDINFO ptrFiles[], /* [IN] Files' Info */
DWORD dwCount, /* [IN] The quantity of files */
TCHAR *szCurPath, /* [IN] Full path of current directory */
LPDIRSWITCHFLAGS lpFlags) /* [IN] The flags used */
@ -919,16 +956,16 @@ DirPrintWideList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
iLongestName = 1;
for (i = 0; i < dwCount; i++)
{
if (ptrFiles[i]->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
if (ptrFiles[i]->stFindInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
/* Directories need 2 additinal characters for brackets */
if ((_tcslen(ptrFiles[i]->cFileName) + 2) > iLongestName)
iLongestName = _tcslen(ptrFiles[i]->cFileName) + 2;
if ((_tcslen(ptrFiles[i]->stFindInfo.cFileName) + 2) > iLongestName)
iLongestName = _tcslen(ptrFiles[i]->stFindInfo.cFileName) + 2;
}
else
{
if (_tcslen(ptrFiles[i]->cFileName) > iLongestName)
iLongestName = _tcslen(ptrFiles[i]->cFileName);
if (_tcslen(ptrFiles[i]->stFindInfo.cFileName) > iLongestName)
iLongestName = _tcslen(ptrFiles[i]->stFindInfo.cFileName);
}
}
@ -963,10 +1000,10 @@ DirPrintWideList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
if (temp >= dwCount) break;
if (ptrFiles[temp]->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
_stprintf(szTempFname, _T("[%s]"), ptrFiles[temp]->cFileName);
if (ptrFiles[temp]->stFindInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
_stprintf(szTempFname, _T("[%s]"), ptrFiles[temp]->stFindInfo.cFileName);
else
_stprintf(szTempFname, _T("%s"), ptrFiles[temp]->cFileName);
_stprintf(szTempFname, _T("%s"), ptrFiles[temp]->stFindInfo.cFileName);
DirPrintf(lpFlags, _T("%-*s"), iLongestName + 1, szTempFname);
}
@ -983,7 +1020,7 @@ DirPrintWideList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
* The function that prints in old style
*/
static VOID
DirPrintOldList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
DirPrintOldList(PDIRFINDINFO ptrFiles[], /* [IN] Files' Info */
DWORD dwCount, /* [IN] The quantity of files */
TCHAR * szCurPath, /* [IN] Full path of current directory */
LPDIRSWITCHFLAGS lpFlags) /* [IN] The flags used */
@ -999,21 +1036,21 @@ DirPrintOldList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
for (i = 0; i < dwCount && !bCtrlBreak; i++)
{
/* Broke 8.3 format */
if (*ptrFiles[i]->cAlternateFileName )
if (*ptrFiles[i]->stFindInfo.cAlternateFileName )
{
/* If the file is long named then we read the alter name */
getName( ptrFiles[i]->cAlternateFileName, szName);
_tcscpy(szExt, getExt( ptrFiles[i]->cAlternateFileName));
getName( ptrFiles[i]->stFindInfo.cAlternateFileName, szName);
_tcscpy(szExt, getExt( ptrFiles[i]->stFindInfo.cAlternateFileName));
}
else
{
/* If the file is not long name we read its original name */
getName( ptrFiles[i]->cFileName, szName);
_tcscpy(szExt, getExt( ptrFiles[i]->cFileName));
getName( ptrFiles[i]->stFindInfo.cFileName, szName);
_tcscpy(szExt, getExt( ptrFiles[i]->stFindInfo.cFileName));
}
/* Calculate size */
if (ptrFiles[i]->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
if (ptrFiles[i]->stFindInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
/* Directory, no size it's a directory*/
iSizeFormat = -17;
@ -1023,13 +1060,13 @@ DirPrintOldList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
{
/* File */
iSizeFormat = 17;
u64FileSize.HighPart = ptrFiles[i]->nFileSizeHigh;
u64FileSize.LowPart = ptrFiles[i]->nFileSizeLow;
u64FileSize.HighPart = ptrFiles[i]->stFindInfo.nFileSizeHigh;
u64FileSize.LowPart = ptrFiles[i]->stFindInfo.nFileSizeLow;
ConvertULargeInteger(u64FileSize.QuadPart, szSize, 20, lpFlags->bTSeperator);
}
/* Format date and time */
DirPrintFileDateTime(szDate,szTime,ptrFiles[i],lpFlags);
DirPrintFileDateTime(szDate,szTime,&ptrFiles[i]->stFindInfo,lpFlags);
/* Print the line */
DirPrintf(lpFlags, _T("%-8s %-3s %*s %s %s\n"),
@ -1048,7 +1085,7 @@ DirPrintOldList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
* The function that prints in bare format
*/
static VOID
DirPrintBareList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
DirPrintBareList(PDIRFINDINFO ptrFiles[], /* [IN] Files' Info */
DWORD dwCount, /* [IN] The number of files */
LPTSTR lpCurPath, /* [IN] Full path of current directory */
LPDIRSWITCHFLAGS lpFlags) /* [IN] The flags used */
@ -1057,8 +1094,8 @@ DirPrintBareList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
for (i = 0; i < dwCount && !bCtrlBreak; i++)
{
if ((_tcscmp(ptrFiles[i]->cFileName, _T(".")) == 0) ||
(_tcscmp(ptrFiles[i]->cFileName, _T("..")) == 0))
if ((_tcscmp(ptrFiles[i]->stFindInfo.cFileName, _T(".")) == 0) ||
(_tcscmp(ptrFiles[i]->stFindInfo.cFileName, _T("..")) == 0))
{
/* at bare format we don't print "." and ".." folder */
continue;
@ -1066,12 +1103,12 @@ DirPrintBareList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
if (lpFlags->bRecursive)
{
/* at recursive mode we print full path of file */
DirPrintf(lpFlags, _T("%s\\%s\n"), lpCurPath, ptrFiles[i]->cFileName);
DirPrintf(lpFlags, _T("%s\\%s\n"), lpCurPath, ptrFiles[i]->stFindInfo.cFileName);
}
else
{
/* if we are not in recursive mode we print the file names */
DirPrintf(lpFlags, _T("%s\n"), ptrFiles[i]->cFileName);
DirPrintf(lpFlags, _T("%s\n"), ptrFiles[i]->stFindInfo.cFileName);
}
}
}
@ -1083,7 +1120,7 @@ DirPrintBareList(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
* The functions that prints the files list
*/
static VOID
DirPrintFiles(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
DirPrintFiles(PDIRFINDINFO ptrFiles[], /* [IN] Files' Info */
DWORD dwCount, /* [IN] The quantity of files */
TCHAR *szCurPath, /* [IN] Full path of current directory */
LPDIRSWITCHFLAGS lpFlags) /* [IN] The flags used */
@ -1139,8 +1176,8 @@ DirPrintFiles(LPWIN32_FIND_DATA ptrFiles[], /* [IN] Files' Info */
* Compares 2 files based on the order criteria
*/
static BOOL
CompareFiles(LPWIN32_FIND_DATA lpFile1, /* [IN] A pointer to WIN32_FIND_DATA of file 1 */
LPWIN32_FIND_DATA lpFile2, /* [IN] A pointer to WIN32_FIND_DATA of file 2 */
CompareFiles(PDIRFINDINFO lpFile1, /* [IN] A pointer to WIN32_FIND_DATA of file 1 */
PDIRFINDINFO lpFile2, /* [IN] A pointer to WIN32_FIND_DATA of file 2 */
LPDIRSWITCHFLAGS lpFlags) /* [IN] The flags that we use to list */
{
ULARGE_INTEGER u64File1;
@ -1157,10 +1194,10 @@ CompareFiles(LPWIN32_FIND_DATA lpFile1, /* [IN] A pointer to WIN32_FIND_DATA of
{
case ORDER_SIZE: /* Order by size /o:s */
/* concat the 32bit integers to a 64bit */
u64File1.LowPart = lpFile1->nFileSizeLow;
u64File1.HighPart = lpFile1->nFileSizeHigh;
u64File2.LowPart = lpFile2->nFileSizeLow;
u64File2.HighPart = lpFile2->nFileSizeHigh;
u64File1.LowPart = lpFile1->stFindInfo.nFileSizeLow;
u64File1.HighPart = lpFile1->stFindInfo.nFileSizeHigh;
u64File2.LowPart = lpFile2->stFindInfo.nFileSizeLow;
u64File2.HighPart = lpFile2->stFindInfo.nFileSizeHigh;
/* In case that differnce is too big for a long */
if (u64File1.QuadPart < u64File2.QuadPart)
@ -1172,16 +1209,16 @@ CompareFiles(LPWIN32_FIND_DATA lpFile1, /* [IN] A pointer to WIN32_FIND_DATA of
break;
case ORDER_DIRECTORY: /* Order by directory attribute /o:g */
iComp = ((lpFile2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)-
(lpFile1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY));
iComp = ((lpFile2->stFindInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)-
(lpFile1->stFindInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY));
break;
case ORDER_EXTENSION: /* Order by extension name /o:e */
iComp = _tcsicmp(getExt(lpFile1->cFileName),getExt(lpFile2->cFileName));
iComp = _tcsicmp(getExt(lpFile1->stFindInfo.cFileName),getExt(lpFile2->stFindInfo.cFileName));
break;
case ORDER_NAME: /* Order by filename /o:n */
iComp = _tcsicmp(lpFile1->cFileName, lpFile2->cFileName);
iComp = _tcsicmp(lpFile1->stFindInfo.cFileName, lpFile2->stFindInfo.cFileName);
break;
case ORDER_TIME: /* Order by file's time /o:t */
@ -1190,24 +1227,24 @@ CompareFiles(LPWIN32_FIND_DATA lpFile1, /* [IN] A pointer to WIN32_FIND_DATA of
{
case TF_CREATIONDATE:
/* concat the 32bit integers to a 64bit */
u64File1.LowPart = lpFile1->ftCreationTime.dwLowDateTime;
u64File1.HighPart = lpFile1->ftCreationTime.dwHighDateTime ;
u64File2.LowPart = lpFile2->ftCreationTime.dwLowDateTime;
u64File2.HighPart = lpFile2->ftCreationTime.dwHighDateTime ;
u64File1.LowPart = lpFile1->stFindInfo.ftCreationTime.dwLowDateTime;
u64File1.HighPart = lpFile1->stFindInfo.ftCreationTime.dwHighDateTime ;
u64File2.LowPart = lpFile2->stFindInfo.ftCreationTime.dwLowDateTime;
u64File2.HighPart = lpFile2->stFindInfo.ftCreationTime.dwHighDateTime ;
break;
case TF_LASTACCESSEDDATE :
/* concat the 32bit integers to a 64bit */
u64File1.LowPart = lpFile1->ftLastAccessTime.dwLowDateTime;
u64File1.HighPart = lpFile1->ftLastAccessTime.dwHighDateTime ;
u64File2.LowPart = lpFile2->ftLastAccessTime.dwLowDateTime;
u64File2.HighPart = lpFile2->ftLastAccessTime.dwHighDateTime ;
u64File1.LowPart = lpFile1->stFindInfo.ftLastAccessTime.dwLowDateTime;
u64File1.HighPart = lpFile1->stFindInfo.ftLastAccessTime.dwHighDateTime ;
u64File2.LowPart = lpFile2->stFindInfo.ftLastAccessTime.dwLowDateTime;
u64File2.HighPart = lpFile2->stFindInfo.ftLastAccessTime.dwHighDateTime ;
break;
case TF_MODIFIEDDATE:
/* concat the 32bit integers to a 64bit */
u64File1.LowPart = lpFile1->ftLastWriteTime.dwLowDateTime;
u64File1.HighPart = lpFile1->ftLastWriteTime.dwHighDateTime ;
u64File2.LowPart = lpFile2->ftLastWriteTime.dwLowDateTime;
u64File2.HighPart = lpFile2->ftLastWriteTime.dwHighDateTime ;
u64File1.LowPart = lpFile1->stFindInfo.ftLastWriteTime.dwLowDateTime;
u64File1.HighPart = lpFile1->stFindInfo.ftLastWriteTime.dwHighDateTime ;
u64File2.LowPart = lpFile2->stFindInfo.ftLastWriteTime.dwLowDateTime;
u64File2.HighPart = lpFile2->stFindInfo.ftLastWriteTime.dwHighDateTime ;
break;
}
@ -1240,12 +1277,12 @@ CompareFiles(LPWIN32_FIND_DATA lpFile1, /* [IN] A pointer to WIN32_FIND_DATA of
* Sort files by the order criterias using quicksort method
*/
static VOID
QsortFiles(LPWIN32_FIND_DATA ptrArray[], /* [IN/OUT] The array with file info pointers */
QsortFiles(PDIRFINDINFO ptrArray[], /* [IN/OUT] The array with file info pointers */
int i, /* [IN] The index of first item in array */
int j, /* [IN] The index to last item in array */
LPDIRSWITCHFLAGS lpFlags) /* [IN] The flags that we will use to sort */
{
LPWIN32_FIND_DATA lpTemp; /* A temporary pointer */
PDIRFINDINFO lpTemp; /* A temporary pointer */
BOOL Way;
if (i < j)
@ -1289,8 +1326,9 @@ DirList(LPTSTR szPath, /* [IN] The path that dir starts */
BOOL fPoint; /* If szPath is a file with extension fPoint will be True*/
HANDLE hSearch; /* The handle of the search */
HANDLE hRecSearch; /* The handle for searching recursivly */
HANDLE hStreams; /* The handle for alternate streams */
WIN32_FIND_DATA wfdFileInfo; /* The info of file that found */
LPWIN32_FIND_DATA * ptrFileArray; /* An array of pointers with all the files */
PDIRFINDINFO * ptrFileArray; /* An array of pointers with all the files */
PDIRFINDLISTNODE ptrStartNode; /* The pointer to the first node */
PDIRFINDLISTNODE ptrNextNode; /* A pointer used for relatives refernces */
TCHAR szFullPath[MAX_PATH]; /* The full path that we are listing with trailing \ */
@ -1301,6 +1339,9 @@ DirList(LPTSTR szPath, /* [IN] The path that dir starts */
DWORD dwCountDirs; /* Counter for directories */
ULONGLONG u64CountBytes; /* Counter for bytes */
ULARGE_INTEGER u64Temp; /* A temporary counter */
WIN32_FIND_STREAM_DATA wfsdStreamInfo;
PDIRFINDSTREAMNODE * ptrCurNode; /* The pointer to the first stream */
PDIRFINDSTREAMNODE ptrFreeNode; /* The pointer used during cleanup */
/* Initialize Variables */
ptrStartNode = NULL;
@ -1363,6 +1404,12 @@ DirList(LPTSTR szPath, /* [IN] The path that dir starts */
while (ptrStartNode)
{
ptrNextNode = ptrStartNode->ptrNext;
while (ptrStartNode->stInfo.ptrHead)
{
ptrFreeNode = ptrStartNode->stInfo.ptrHead;
ptrStartNode->stInfo.ptrHead = ptrFreeNode->ptrNext;
cmd_free(ptrFreeNode);
}
cmd_free(ptrStartNode);
ptrStartNode = ptrNextNode;
dwCount--;
@ -1376,15 +1423,68 @@ DirList(LPTSTR szPath, /* [IN] The path that dir starts */
if (ptrNextNode->ptrNext)
{
/* Copy the info of search at linked list */
memcpy(&ptrNextNode->ptrNext->stFindInfo,
memcpy(&ptrNextNode->ptrNext->stInfo.stFindInfo,
&wfdFileInfo,
sizeof(WIN32_FIND_DATA));
/* If lower case is selected do it here */
if (lpFlags->bLowerCase)
{
_tcslwr(ptrNextNode->ptrNext->stFindInfo.cAlternateFileName);
_tcslwr(ptrNextNode->ptrNext->stFindInfo.cFileName);
_tcslwr(ptrNextNode->ptrNext->stInfo.stFindInfo.cAlternateFileName);
_tcslwr(ptrNextNode->ptrNext->stInfo.stFindInfo.cFileName);
}
/* No streams (yet?) */
ptrNextNode->ptrNext->stInfo.ptrHead = NULL;
/* Alternate streams are only displayed with new long list */
if (lpFlags->bNewLongList && lpFlags->bDataStreams)
{
/* Try to get stream information */
hStreams = FindFirstStreamW(wfdFileInfo.cFileName, FindStreamInfoStandard, &wfsdStreamInfo, 0);
if (hStreams != INVALID_HANDLE_VALUE)
{
/* We totally ignore first stream. It contains data about ::$DATA */
ptrCurNode = &ptrNextNode->ptrNext->stInfo.ptrHead;
while (FindNextStreamW(hStreams, &wfsdStreamInfo))
{
*ptrCurNode = cmd_alloc(sizeof(DIRFINDSTREAMNODE));
if (*ptrCurNode == NULL)
{
WARN("DEBUG: Cannot allocate memory for *ptrCurNode!\n");
while (ptrStartNode)
{
ptrNextNode = ptrStartNode->ptrNext;
while (ptrStartNode->stInfo.ptrHead)
{
ptrFreeNode = ptrStartNode->stInfo.ptrHead;
ptrStartNode->stInfo.ptrHead = ptrFreeNode->ptrNext;
cmd_free(ptrFreeNode);
}
cmd_free(ptrStartNode);
ptrStartNode = ptrNextNode;
dwCount--;
}
FindClose(hStreams);
FindClose(hSearch);
return 1;
}
memcpy(&(*ptrCurNode)->stStreamInfo, &wfsdStreamInfo,
sizeof(WIN32_FIND_STREAM_DATA));
/* If lower case is selected do it here */
if (lpFlags->bLowerCase)
{
_tcslwr((*ptrCurNode)->stStreamInfo.cStreamName);
}
ptrCurNode = &(*ptrCurNode)->ptrNext;
}
FindClose(hStreams);
*ptrCurNode = NULL;
}
}
/* Continue at next node at linked list */
@ -1415,13 +1515,19 @@ DirList(LPTSTR szPath, /* [IN] The path that dir starts */
ptrNextNode->ptrNext = NULL;
/* Calculate and allocate space need for making an array of pointers */
ptrFileArray = cmd_alloc(sizeof(LPWIN32_FIND_DATA) * dwCount);
ptrFileArray = cmd_alloc(sizeof(PDIRFINDINFO) * dwCount);
if (ptrFileArray == NULL)
{
WARN("DEBUG: Cannot allocate memory for ptrFileArray!\n");
while (ptrStartNode)
{
ptrNextNode = ptrStartNode->ptrNext;
while (ptrStartNode->stInfo.ptrHead)
{
ptrFreeNode = ptrStartNode->stInfo.ptrHead;
ptrStartNode->stInfo.ptrHead = ptrFreeNode->ptrNext;
cmd_free(ptrFreeNode);
}
cmd_free(ptrStartNode);
ptrStartNode = ptrNextNode;
dwCount --;
@ -1437,7 +1543,7 @@ DirList(LPTSTR szPath, /* [IN] The path that dir starts */
dwCount = 0;
while (ptrNextNode->ptrNext)
{
*(ptrFileArray + dwCount) = &ptrNextNode->ptrNext->stFindInfo;
*(ptrFileArray + dwCount) = &ptrNextNode->ptrNext->stInfo;
ptrNextNode = ptrNextNode->ptrNext;
dwCount++;
}
@ -1467,6 +1573,12 @@ DirList(LPTSTR szPath, /* [IN] The path that dir starts */
while (ptrStartNode)
{
ptrNextNode = ptrStartNode->ptrNext;
while (ptrStartNode->stInfo.ptrHead)
{
ptrFreeNode = ptrStartNode->stInfo.ptrHead;
ptrStartNode->stInfo.ptrHead = ptrFreeNode->ptrNext;
cmd_free(ptrFreeNode);
}
cmd_free(ptrStartNode);
ptrStartNode = ptrNextNode;
dwCount --;
@ -1543,6 +1655,7 @@ CommandDir(LPTSTR rest)
/* Initialize Switch Flags < Default switches are setted here!> */
stFlags.b4Digit = TRUE;
stFlags.bBareFormat = FALSE;
stFlags.bDataStreams = FALSE;
stFlags.bLowerCase = FALSE;
stFlags.bNewLongList = TRUE;
stFlags.bPause = FALSE;
@ -1620,6 +1733,7 @@ CommandDir(LPTSTR rest)
TRACE(" Order Criteria [%i]: %i (Reversed: %i)\n",i, stFlags.stOrderBy.eCriteria[i], stFlags.stOrderBy.bCriteriaRev[i] );
TRACE("(P) Pause : %i\n", stFlags.bPause );
TRACE("(Q) Owner : %i\n", stFlags.bUser );
TRACE("(R) Data stream : %i\n", stFlags.bDataStreams );
TRACE("(S) Recursive : %i\n", stFlags.bRecursive );
TRACE("(T) Time field : %i\n", stFlags.stTimeField.eTimeField );
TRACE("(X) Short names : %i\n", stFlags.bShortName );

View file

@ -148,7 +148,7 @@ DELAY [/m]n\n\n\
/m specifiy than n are milliseconds\n\
otherwise n are seconds\n"
STRING_DIR_HELP1 "DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[drive:][path][filename]\n\
Specifies drive, directory, and/or files to list.\n\n\
/A Displays files with specified attributes.\n\
@ -167,6 +167,7 @@ DELAY [/m]n\n\n\
G Group directories first - Prefix to reverse order\n\
/P Pauses after each screenful of information.\n\
/Q Display the owner of the file.\n\
/R Displays alternate data streams of the files.\n\
/S Displays files in specified directory and all subdirectories.\n\
/T Controls which time field displayed or used for sorting\n\
timefield C Creation\n\

View file

@ -142,7 +142,7 @@ DELAY [/m]n\n\n\
/m Millisekunden, ansonsten Sekunden\n"
STRING_DIR_HELP1 "Listet die Dateien und Unterverzeichnisse eines Verzeichnisses auf.\n\n\
DIR [Laufwerk:][Pfad][Dateiname] [/A[[:]Attribute]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]Reihenfolge]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[/O[[:]Reihenfolge]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[Laufwerk:][path][Dateiname]\n\
Bezeichnet Laufwerk, Verzeichnis und/oder Dateien.\n\n\
/A Listet Dateien mit angegebenen Attributen auf.\n\
@ -162,6 +162,7 @@ DIR [Laufwerk:][Pfad][Dateiname] [/A[[:]Attribute]] [/B] [/C] [/D] [/L] [/N]\n\
G Verzeichnisse zuerst - vorangestellt kehrt die\n\
/P Pausiert nach jeder vollen Bildschirmseite.\n\
/Q Gibt den Besitzer der Datei aus.\n\
/R Displays alternate data streams of the files.\n\
/S Listet Dateien und alle Unterverzeichnisse auf.\n\
/T Bestimmt welche Zeit verwendet wird.\n\
timefield C Erstellung\n\

View file

@ -147,7 +147,7 @@ DELAY [/m]n\n\n\
/m specifiy than n are milliseconds\n\
otherwise n are seconds\n"
STRING_DIR_HELP1 "DIR [δίσκος:][μονοπάτι][αρχείο] [/A[[:]χαρακτηριστικά]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[δίσκος:][μονοπάτι][αρχείο]\n\
Καθορίζει μονάδα δίσκου, κατάλογο ή/και αρχεία που θα παρατεθούν σε λίστα.\n\n\
/A Εμφανίζει αρχεία με τα καθορισμένα χαρακτηριστικά..\n\
@ -166,6 +166,7 @@ DELAY [/m]n\n\n\
G Πρώτα οι κατάλογοι ομάδων - Πρόθεμα για αντιστροφή της σειράς\n\
/P Σταματάει όταν οι πληροφορίες γεμίσουν μία οθόνη.\n\
/Q Εμφάνιση του ιδιοκτήτη του αρχείου.\n\
/R Displays alternate data streams of the files.\n\
/S Εμφανίζει τα αρχεία στον καθορισμένο κατάλογο και σε όλους τους υποκαταλόγους.\n\
/T Ελέγχει ποιο πεδίο χρόνου θα εμφανιστεί ή θα χρησιμοποιηθεί για την ταξινόμηση\n\
πεδίο χρόνου C Δημιουργία\n\

View file

@ -143,7 +143,7 @@ DELAY [/m]n\n\n\
/m specifiy than n are milliseconds\n\
otherwise n are seconds\n"
STRING_DIR_HELP1 "DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[drive:][path][filename]\n\
Specifies drive, directory, and/or files to list.\n\n\
/A Displays files with specified attributes.\n\
@ -162,6 +162,7 @@ DELAY [/m]n\n\n\
G Group directories first - Prefix to reverse order\n\
/P Pauses after each screenful of information.\n\
/Q Display the owner of the file.\n\
/R Displays alternate data streams of the files.\n\
/S Displays files in specified directory and all subdirectories.\n\
/T Controls which time field displayed or used for sorting\n\
timefield C Creation\n\

View file

@ -145,7 +145,7 @@ DELAY [/m]n\n\n\
/m Especifica que n son milisegundos\n\
En otro caso n son segundos\n"
STRING_DIR_HELP1 "DIR [unidad:][ruta][nombre de archivo] [/A[[:]atributos]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]orden]] [/P] [/Q] [/S] [/T[[:]fecha]] [/W] [/X] [/4]\n\n\
[/O[[:]orden]] [/P] [/Q] [/R] [/S] [/T[[:]fecha]] [/W] [/X] [/4]\n\n\
[unidad:][ruta][nombre de archivo]\n\
Especifica la unidad, el directorio o los archivos a listar.\n\n\
/A Muestra los archivos con los atributos especificados.\n\
@ -165,6 +165,7 @@ DELAY [/m]n\n\n\
G Los directorios primero - Prefijo para el orden inverso\n\
/P Pausa después de cada pantalla llena de información.\n\
/Q Muestra el propietario del archivo.\n\
/R Displays alternate data streams of the files.\n\
/S Muestra los archivos en el directorio especificado y sus subdirectorios.\n\
/T Controla que campo de tiempo se muestra o es usado para ordenar:\n\
campo de tiempo C Creación\n\

View file

@ -151,7 +151,7 @@ DELAY [/m]n\n\n\
/m spécifie que n est en millisecondes\n\
sinon n est en secondes"
STRING_DIR_HELP1 "DIR [lecteur:][chemin][fichier] [/A[[:]attributs]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]ordredetri]] [/P] [/Q] [/S] [/T[[:]heure]] [/W] [/X] [/4]\n\n\
[/O[[:]ordredetri]] [/P] [/Q] [/R] [/S] [/T[[:]heure]] [/W] [/X] [/4]\n\n\
[lecteur:][chemin][fichier]\n\
Spécifie le disque, le répertoire, et/ou les fichiers à lister.\n\n\
/A Affiche les fichiers avec les attributs indiqués.\n\
@ -173,6 +173,7 @@ DELAY [/m]n\n\n\
G Répertoires d'abord - Préfixe pour inverser l'ordre\n\
/P S'arrête après chaque page d'information.\n\
/Q Affiche le propriétaire du fichier.\n\
/R Affiche les flux de données alternatifs du fichier.\n\
/S Affiche les fichiers dans le répertoire indiqué et\n\
tous les sous-répertoires.\n\
/T Contrôle quel champ de temps sera affiché ou utilisé\n\

View file

@ -136,7 +136,7 @@ DELAY [/m]n\n\n\
/m specifiy than n are milliseconds\n\
otherwise n are seconds\n"
STRING_DIR_HELP1 "DIR [meghajtó:][elérési_út][állománynév] [/A[[:]attribútumok]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]rendezési_feltétel]] [/P] [/Q] [/S] [/T[[:]idõ]] [/W] [/X] [/4]\n\n\
[/O[[:]rendezési_feltétel]] [/P] [/Q] [/R] [/S] [/T[[:]idõ]] [/W] [/X] [/4]\n\n\
[meghajtó:][elérési_út][állományname]\n\
Az adott hely állományait és mappáit jeleníti meg.\n\n\
/A A megadott attribútumu állományokat jeleníti csak meg.\n\
@ -154,6 +154,7 @@ DELAY [/m]n\n\n\
G Mappák legelõl - ""Nem"" prefixel fordított rendezés\n\
/P Csak egy képernyõnyi adat megjelenítése egyszerre.\n\
/Q Állomány tulajdonsosának megjelenítése.\n\
/R Displays alternate data streams of the files.\n\
/S Almappák tartalmát is megjeleníti.\n\
/T Controls which time field displayed or used for sorting\n\
timefield C Létrehozás\n\

View file

@ -145,7 +145,7 @@ DELAY [/m]n\n\n\
/m menetapkan bahwa n adalah milidetik\n\
sebaliknya n adalah detik\n"
STRING_DIR_HELP1 "DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[drive:][path][filename]\n\
Menetapkan drive, direktori, dan/atau files ke daftar.\n\n\
/A Menampilkan file dengan atribut yang ditetapkan.\n\
@ -164,6 +164,7 @@ DELAY [/m]n\n\n\
G Grup direktori pertama - Prefiks untuk membalik urutan\n\
/P Menunda setelah setiap layar penuh informasi.\n\
/Q Menampilkan pemilik file.\n\
/R Displays alternate data streams of the files.\n\
/S Menampilkan file dalam direktori dan semua subdirektorinya.\n\
/T Mengontrol field waktu mana atau dipakai untuk mengurut\n\
timefield C Pembuatan\n\

View file

@ -143,7 +143,7 @@ DELAY [/m]n\n\n\
/m precisa che n è in millisecondi\n\
altrimenti n è in secondi\n"
STRING_DIR_HELP1 "DIR [disco:][percorso][nomefilen] [/A[[:]attributi]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]orderinamento]] [/P] [/Q] [/S] [/T[[:]tempo]] [/W] [/X] [/4]\n\n\
[/O[[:]orderinamento]] [/P] [/Q] [/R] [/S] [/T[[:]tempo]] [/W] [/X] [/4]\n\n\
[disco:][percorso][nomefilen]\n\
Indica disco, percorso e/o file da elencare.\n\n\
/A Visualizza i file con gli attributi indicati.\n\
@ -162,6 +162,7 @@ DELAY [/m]n\n\n\
G Le cartelle per prime - Prefisso per invertire l'ordine\n\
/P Pasa dopo ogni schermata piena.\n\
/Q Visualizza il proprietario del file.\n\
/R Displays alternate data streams of the files.\n\
/S Visualizza i file nella cartella indicata e nelle sottocartelle.\n\
/T Sceglie quale campo di tempo è usato per gli ordinamenti.\n\
timefield C Creazione\n\

View file

@ -148,7 +148,7 @@ DELAY [/m]n\n\n\
指定しない場合、単位には秒が使われます。\n"
STRING_DIR_HELP1 "ディレクトリ中のファイルとサブディレクトリを一覧表示します。\n\n\
DIR [ドライブ:][パス][ファイル名] [/A[[:]属性]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]ソート順]] [/P] [/Q] [/S] [/T[[:]タイムフィールド]] [/W] [/X] [/4]\n\n\
[/O[[:]ソート順]] [/P] [/Q] [/R] [/S] [/T[[:]タイムフィールド]] [/W] [/X] [/4]\n\n\
[ドライブ:][パス][ファイル名]\n\
一覧表示するドライブ、ディレクトリ、またはファイルを指定します。\n\
/A 指定された属性のファイルを表示します。\n\
@ -167,6 +167,7 @@ DIR [ドライブ:][パス][ファイル名] [/A[[:]属性]] [/B] [/C] [/D] [/L]
G グループ (ディレクトリから) - 降順\n\
/P 1 画面ごとに停止して表示します。\n\
/Q ファイルの所有者を表示します。\n\
/R Displays alternate data streams of the files.\n\
/S 指定されたディレクトリおよびそのサブディレクトリのすべての\n\
ファイルを表示します。\n\
/T どのタイムフィールドを表示するか、または並べ替えに使用するかを\n\

View file

@ -143,7 +143,7 @@ DELAY [/m]n\n\n\
/m spesifiserer at n er mikrosekunder\n\
ellers er n sekunder\n"
STRING_DIR_HELP1 "DIR [stasjon:][mappe][filnavn] [/A[[:]attributter]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]sortering]] [/P] [/Q] [/S] [/T[[:]tidsfelt]] [/W] [/X] [/4]\n\n\
[/O[[:]sortering]] [/P] [/Q] [/R] [/S] [/T[[:]tidsfelt]] [/W] [/X] [/4]\n\n\
[stasjon:][mappe][filnavn]\n\
Spesifisere stasjon, mappe, og/eller filer som skal listes.\n\n\
/A Vis filer ved å spesifisere attributter.\n\
@ -162,6 +162,7 @@ DELAY [/m]n\n\n\
G Gruppere mapper først - Prefiks for å reversere orden\n\
/P Pause etter hvert hele skjermbilde.\n\
/Q Viser hvem som eier filen.\n\
/R Displays alternate data streams of the files.\n\
/S Viser alle filer i angitt mappe og alle undermapper.\n\
/T Styrer hvilket tidsfelt som vises eller blir brukt for sortering\n\
timefelt C Opprettet \n\

View file

@ -151,7 +151,7 @@ DELAY [/m]n\n\n\
/m wymusza traktowanie n jako milisekund,\n\
w innym wypadku będzie traktowane jako sekundy\n"
STRING_DIR_HELP1 "DIR [napęd:][ścieżka][pliki] [/A[[:]atrybuty]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]porządek]] [/P] [/Q] [/S] [/T[[:]czas]] [/W] [/X] [/4]\n\n\
[/O[[:]porządek]] [/P] [/Q] [/R] [/S] [/T[[:]czas]] [/W] [/X] [/4]\n\n\
[napęd:][ścieżka][nazwa_pliku]\n\
Wyznacza literę napędu, katalog, i/lub pliki do wyświetlenia.\n\n\
/A Wyświetla pliki o określonych atrybutach.\n\
@ -170,6 +170,7 @@ DELAY [/m]n\n\n\
G Wyświetla najpierw katalogi - Odwraca kolejność\n\
/P Pauza po każdym pełnym ekranie.\n\
/Q Wyświetla właściciela plików\n\
/R Displays alternate data streams of the files.\n\
/S Wyświetla pliki w danym katalogu i wszystkich podkatalogach.\n\
/T Pole czasu, odpowiedzialne za wyświetlanie/sortowanie \n\
czas C Utworzenia\n\

View file

@ -160,7 +160,7 @@ DELAY [/m]n\n\n\
/m Specifică faptul că «n» sunt milisecunde\n\
altfel «n» sunt considerate secunde.\n"
STRING_DIR_HELP1 "DIR [unitate:][cale][fișier] [/A[[:]atribute]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]ordonare]] [/P] [/Q] [/S] [/T[[:]timp]] [/W] [/X] [/4]\n\n\
[/O[[:]ordonare]] [/P] [/Q] [/R] [/S] [/T[[:]timp]] [/W] [/X] [/4]\n\n\
[unitate:][cale][fișier]\n\
Specifică unitatea, directorul și/sau fișierele de enumerat.\n\n\
/A Afișează fișierele după atributele specificate.\n\
@ -182,6 +182,7 @@ DELAY [/m]n\n\n\
- Prefix pentru inversarea ordinii\n\
/P Pauză după un ecran de informații.\n\
/Q Afișează posesorul fișierului.\n\
/R Displays alternate data streams of the files.\n\
/S Afișează fișierele din directorul specificat și\n\
din toate subdirectoarele sale.\n\
/T Determină care timp este afișat sau folosit la ordonare\n\

View file

@ -146,7 +146,7 @@ DELAY [/m]n\n\n\
/m указывает, что n означает количество миллисекунд\n\
иначе n означает количество секунд\n"
STRING_DIR_HELP1 "DIR [диск:][путь][имя_файла] [/A[[:]атрибуты]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]сортировка]] [/P] [/Q] [/S] [/T[[:]время]] [/W] [/X] [/4]\n\n\
[/O[[:]сортировка]] [/P] [/Q] [/R] [/S] [/T[[:]время]] [/W] [/X] [/4]\n\n\
[диск:][путь][имя_файла]\n\
Диск, каталог и/или файлы, которые следует включить в список.\n\n\
/A Вывод файлов с указанными атрибутами.\n\
@ -165,6 +165,7 @@ DELAY [/m]n\n\n\
G Начать список с каталогов Префикс ""-"" обращает порядок\n\
/P Пауза после заполнения каждого экрана.\n\
/Q Вывод сведений о владельце файла.\n\
/R Displays alternate data streams of the files.\n\
/S Вывод списка файлов из указанного каталога и его подкаталогов.\n\
/T Выбор поля времени для отображения и сортировки\n\
время C Создание\n\

View file

@ -149,7 +149,7 @@ DELAY [/m]n\n\n\
/m specifiy than n are milliseconds\n\
otherwise n are seconds\n"
STRING_DIR_HELP1 "DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]\n\n\
[drive:][path][filename]\n\
Specifies drive, directory, and/or files to list.\n\n\
/A Displays files with specified attributes.\n\
@ -168,6 +168,7 @@ DELAY [/m]n\n\n\
G Group directories first - Prefix to reverse order\n\
/P Pauses after each screenful of information.\n\
/Q Display the owner of the file.\n\
/R Displays alternate data streams of the files.\n\
/S Displays files in specified directory and all subdirectories.\n\
/T Controls which time field displayed or used for sorting\n\
timefield C Creation\n\

View file

@ -147,7 +147,7 @@ DELAY [/m]n\n\n\
/m specifikoni se n janë millisekonda\n\
ndryshe n janë sekonda\n"
STRING_DIR_HELP1 "DIR [drive:][rrugë][emer] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]radhitje]] [/P] [/Q] [/S] [/T[[:]koha]] [/W] [/X] [/4]\n\n\
[/O[[:]radhitje]] [/P] [/Q] [/R] [/S] [/T[[:]koha]] [/W] [/X] [/4]\n\n\
[drive:][rrugë][emer]\n\
Përcakton, Drejtorin, dhe / ose dokumentin në listë.\n\n\
/A Shfaq dokumentat me atributet e specifikuara.\n\
@ -166,6 +166,7 @@ DELAY [/m]n\n\n\
G Grupi skedave se pari - Parashtese të kthejë renditjen\n\
/P Pauzo pas çdo informacioni në ekran.\n\
/Q Shfaq zotëruesin e dosjes.\n\
/R Displays alternate data streams of the files.\n\
/S Shfaq dokumentet në skedën e specifikuar dhe të gjitha nën-skedat.\n\
/T Kontrollon secilen fushë kohohore e shfaqura ose e përdorur për klasifikimin\n\
timefield C Krijim\n\

View file

@ -143,7 +143,7 @@ DELAY [/m]n\n\n\
/m anger at n är mikrosekunder\n\
annars är n sekunder\n"
STRING_DIR_HELP1 "DIR [enhet:][mapp][filnamn] [/A[[:]attribut]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]sortering]] [/P] [/Q] [/S] [/T[[:]tidsfält]] [/W] [/X] [/4]\n\n\
[/O[[:]sortering]] [/P] [/Q] [/R] [/S] [/T[[:]tidsfält]] [/W] [/X] [/4]\n\n\
[enhet:][mapp][filnamn]\n\
Anger enhet, mapp, och/eller filer som skall listes.\n\n\
/A Vis filer ved att ange attributter.\n\
@ -162,6 +162,7 @@ DELAY [/m]n\n\n\
G Gruppera mappar först - Prefix för omvänd ordning\n\
/P Pausa efter varje hel skärmbild.\n\
/Q Viser vem som äger filen.\n\
/R Displays alternate data streams of the files.\n\
/S Viser alla filer i angiven mapp och alla undermappar.\n\
/T Kontrollerar vilket tidsfält som visas eller blir använt för sortering\n\
timefelt C Skapelse \n\

View file

@ -146,7 +146,7 @@ DELAY [/m]n\n\n\
/m n milisâniye olarak belirtir\n\
yoksa n sâniyedir\n"
STRING_DIR_HELP1 "DIR [sürücü:][yol][kütük adı] [/A[[:]öz nitelikler]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]dizme düzeni]] [/P] [/Q] [/S] [/T[[:]zaman aralığı]] [/W] [/X] [/4]\n\n\
[/O[[:]dizme düzeni]] [/P] [/Q] [/R] [/S] [/T[[:]zaman aralığı]] [/W] [/X] [/4]\n\n\
[sürücü:][yol][kütük adı]\n\
Dizelgelenecek sürücü, dizin veyâ kütükleri belirtir.\n\n\
/A Belirtilen öz nitelikli kütükleri görüntüler.\n\
@ -166,6 +166,7 @@ DELAY [/m]n\n\n\
G Önce dizinleri öbekle - Ters dizme için ön ek\n\
/P Bir bilgi görüntülüğünden sonra duraklatır.\n\
/Q Kütüğün iyesini göster.\n\
/R Displays alternate data streams of the files.\n\
/S Belirtilen dizindeki ve tüm alt dizinlerdeki kütükleri\n\
görüntüler.\n\
/T Dizme için hangi zaman aralığının görüntüleneceğini ya da\n\

View file

@ -154,7 +154,7 @@ DELAY [/m]n\n\n\
/m вказує, що n це мiлiсекунди\n\
акше n це кiлькiсть секунд\n"
STRING_DIR_HELP1 "DIR [диск:][шлях][iм'я_файлу] [/A[[:]атрибути]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]порядок]] [/P] [/Q] [/S] [/T[[:]час]] [/W] [/X] [/4]\n\n\
[/O[[:]порядок]] [/P] [/Q] [/R] [/S] [/T[[:]час]] [/W] [/X] [/4]\n\n\
[диск:][шлях][iм'я_файлу]\n\
Визначає диск, директорію, та/чи файли для їх виведення в списку.\n\n\
/A Вображення файлiв з вказаними атрибутами.\n\
@ -173,6 +173,7 @@ DELAY [/m]n\n\n\
G Почати список з каталогiв Префiкс ""-"" для зворотнього порядку\n\
/P Пауза пiсля кожного заповнення екрану.\n\
/Q Вображення даних про власника файлу.\n\
/R Displays alternate data streams of the files.\n\
/S Вображення файлiв з вказаного каталогу та всiх пiдкаталогiв.\n\
/T Вибiр поля часу для вiдображення чи сортування\n\
час C Створення\n\

View file

@ -138,7 +138,7 @@ ERASE [/N /P /T /Q /S /W /Y /Z /A[[:]属性]] 文件 ...\n\n\
DELAY [/m]n\n\n\
/m 指定 n 的单位使用毫秒,否则为秒。\n"
STRING_DIR_HELP1 "DIR [驱动器:][路径][文件名] [/A[[:]属性]] [/B] [/C] [/D] [/L] [/N]\n\
[/O[[:]排序顺序]] [/P] [/Q] [/S] [/T[[:]时间字段]] [/W] [/X] [/4]\n\n\
[/O[[:]排序顺序]] [/P] [/Q] [/R] [/S] [/T[[:]时间字段]] [/W] [/X] [/4]\n\n\
[驱动器:][路径][文件名]\n\
指定要列表显示的驱动器、目录和/或文件。\n\n\
/A 显示具有指定属性的文件。\n\
@ -156,6 +156,7 @@ DELAY [/m]n\n\n\
G 分组目录在前 - 反转顺序的前缀\n\
/P 在每屏幕信息输出后停顿。\n\
/Q 显示文件的所有者。\n\
/R Displays alternate data streams of the files.\n\
/S 显示指定目录和所有子目录中的文件。\n\
/T 控制要显示或者用于排序的时间字段。\n\
时间字段 C 创建时间\n\