From: Pierre Schweitzer Date: Tue, 25 Aug 2015 20:35:51 +0000 (+0000) Subject: [CMD] X-Git-Tag: ReactOS-0.4.0~1201 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=6686b09385a86c561cb35d115ba09756b63ed045 [CMD] Implement switch /R for dir command. It allows enumerating alternate data streams of files Commit dedicated to Ged svn path=/trunk/; revision=68823 --- diff --git a/reactos/base/shell/cmd/dir.c b/reactos/base/shell/cmd/dir.c index 1745ec063a0..c78ad8ced5c 100644 --- a/reactos/base/shell/cmd/dir.c +++ b/reactos/base/shell/cmd/dir.c @@ -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("")); } - 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 ); diff --git a/reactos/base/shell/cmd/lang/cs-CZ.rc b/reactos/base/shell/cmd/lang/cs-CZ.rc index dd989d72705..9ff59e8e49e 100644 --- a/reactos/base/shell/cmd/lang/cs-CZ.rc +++ b/reactos/base/shell/cmd/lang/cs-CZ.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/de-DE.rc b/reactos/base/shell/cmd/lang/de-DE.rc index a84326a4875..834613648b2 100644 --- a/reactos/base/shell/cmd/lang/de-DE.rc +++ b/reactos/base/shell/cmd/lang/de-DE.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/el-GR.rc b/reactos/base/shell/cmd/lang/el-GR.rc index ea97509d05c..8438f78c793 100644 --- a/reactos/base/shell/cmd/lang/el-GR.rc +++ b/reactos/base/shell/cmd/lang/el-GR.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/en-US.rc b/reactos/base/shell/cmd/lang/en-US.rc index 219cb7efc18..5edf46a2322 100644 --- a/reactos/base/shell/cmd/lang/en-US.rc +++ b/reactos/base/shell/cmd/lang/en-US.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/es-ES.rc b/reactos/base/shell/cmd/lang/es-ES.rc index 86e48e1100c..d5aa371ce7a 100644 --- a/reactos/base/shell/cmd/lang/es-ES.rc +++ b/reactos/base/shell/cmd/lang/es-ES.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/fr-FR.rc b/reactos/base/shell/cmd/lang/fr-FR.rc index aaea0c867bb..fea0529ff77 100644 --- a/reactos/base/shell/cmd/lang/fr-FR.rc +++ b/reactos/base/shell/cmd/lang/fr-FR.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/hu-HU.rc b/reactos/base/shell/cmd/lang/hu-HU.rc index a9f2478013f..29e7fa9b2b5 100644 --- a/reactos/base/shell/cmd/lang/hu-HU.rc +++ b/reactos/base/shell/cmd/lang/hu-HU.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/id-ID.rc b/reactos/base/shell/cmd/lang/id-ID.rc index 6bc9f162042..caa4cf52bb7 100644 --- a/reactos/base/shell/cmd/lang/id-ID.rc +++ b/reactos/base/shell/cmd/lang/id-ID.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/it-IT.rc b/reactos/base/shell/cmd/lang/it-IT.rc index 01a1423745c..615ec7921cd 100644 --- a/reactos/base/shell/cmd/lang/it-IT.rc +++ b/reactos/base/shell/cmd/lang/it-IT.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/ja-JP.rc b/reactos/base/shell/cmd/lang/ja-JP.rc index c23d9a5a51b..80c282b9b99 100644 --- a/reactos/base/shell/cmd/lang/ja-JP.rc +++ b/reactos/base/shell/cmd/lang/ja-JP.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/no-NO.rc b/reactos/base/shell/cmd/lang/no-NO.rc index ea13ce54975..0a588a19d75 100644 --- a/reactos/base/shell/cmd/lang/no-NO.rc +++ b/reactos/base/shell/cmd/lang/no-NO.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/pl-PL.rc b/reactos/base/shell/cmd/lang/pl-PL.rc index 4101f0a7888..2a4088184e9 100644 --- a/reactos/base/shell/cmd/lang/pl-PL.rc +++ b/reactos/base/shell/cmd/lang/pl-PL.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/ro-RO.rc b/reactos/base/shell/cmd/lang/ro-RO.rc index 6b7a7fd53c3..4929a524647 100644 --- a/reactos/base/shell/cmd/lang/ro-RO.rc +++ b/reactos/base/shell/cmd/lang/ro-RO.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/ru-RU.rc b/reactos/base/shell/cmd/lang/ru-RU.rc index 17a567fc9a1..ea4364a42cf 100644 --- a/reactos/base/shell/cmd/lang/ru-RU.rc +++ b/reactos/base/shell/cmd/lang/ru-RU.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/sk-SK.rc b/reactos/base/shell/cmd/lang/sk-SK.rc index 85ada8c53e4..e47c1335ac8 100644 --- a/reactos/base/shell/cmd/lang/sk-SK.rc +++ b/reactos/base/shell/cmd/lang/sk-SK.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/sq-AL.rc b/reactos/base/shell/cmd/lang/sq-AL.rc index deb956da16f..2e1815e84e9 100644 --- a/reactos/base/shell/cmd/lang/sq-AL.rc +++ b/reactos/base/shell/cmd/lang/sq-AL.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/sv-SE.rc b/reactos/base/shell/cmd/lang/sv-SE.rc index 92aa461c8e5..13e99026896 100644 --- a/reactos/base/shell/cmd/lang/sv-SE.rc +++ b/reactos/base/shell/cmd/lang/sv-SE.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/tr-TR.rc b/reactos/base/shell/cmd/lang/tr-TR.rc index 43629dcb4fa..a7faba2fc52 100644 --- a/reactos/base/shell/cmd/lang/tr-TR.rc +++ b/reactos/base/shell/cmd/lang/tr-TR.rc @@ -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\ diff --git a/reactos/base/shell/cmd/lang/uk-UA.rc b/reactos/base/shell/cmd/lang/uk-UA.rc index 9838d1aa9c0..f7f518c65c4 100644 --- a/reactos/base/shell/cmd/lang/uk-UA.rc +++ b/reactos/base/shell/cmd/lang/uk-UA.rc @@ -154,7 +154,7 @@ DELAY [/m]n\n\n\ /m вказує, що n це мiлiсекунди\n\ iнакше 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дображення файлiв з вказаними атрибутами.\n\ @@ -173,6 +173,7 @@ DELAY [/m]n\n\n\ G Почати список з каталогiв Префiкс ""-"" для зворотнього порядку\n\ /P Пауза пiсля кожного заповнення екрану.\n\ /Q Вiдображення даних про власника файлу.\n\ + /R Displays alternate data streams of the files.\n\ /S Вiдображення файлiв з вказаного каталогу та всiх пiдкаталогiв.\n\ /T Вибiр поля часу для вiдображення чи сортування\n\ час C Створення\n\ diff --git a/reactos/base/shell/cmd/lang/zh-CN.rc b/reactos/base/shell/cmd/lang/zh-CN.rc index 52d565e5fbc..d62b8b6ed50 100644 --- a/reactos/base/shell/cmd/lang/zh-CN.rc +++ b/reactos/base/shell/cmd/lang/zh-CN.rc @@ -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\