https://git.reactos.org/?p=reactos.git;a=commitdiff;h=432854ee18eb002049a05…
commit 432854ee18eb002049a058b5b233d8acc25ce76f
Author: Eric Kohl <eric.kohl(a)reactos.org>
AuthorDate: Sat Sep 21 11:39:01 2019 +0200
Commit: Eric Kohl <eric.kohl(a)reactos.org>
CommitDate: Sat Sep 21 11:41:15 2019 +0200
[ATTRIB][CMD] Convert the 'attrib' command into a standalone executable
CORE-9444
---
base/applications/cmdutils/CMakeLists.txt | 1 +
base/applications/cmdutils/attrib/CMakeLists.txt | 8 +
base/applications/cmdutils/attrib/attrib.c | 392 +++++++++++++++++++++++
base/applications/cmdutils/attrib/attrib.rc | 77 +++++
base/applications/cmdutils/attrib/lang/cs-CZ.rc | 25 ++
base/applications/cmdutils/attrib/lang/de-DE.rc | 22 ++
base/applications/cmdutils/attrib/lang/el-GR.rc | 25 ++
base/applications/cmdutils/attrib/lang/en-US.rc | 20 ++
base/applications/cmdutils/attrib/lang/es-ES.rc | 22 ++
base/applications/cmdutils/attrib/lang/fr-FR.rc | 22 ++
base/applications/cmdutils/attrib/lang/hu-HU.rc | 22 ++
base/applications/cmdutils/attrib/lang/id-ID.rc | 22 ++
base/applications/cmdutils/attrib/lang/it-IT.rc | 20 ++
base/applications/cmdutils/attrib/lang/ja-JP.rc | 20 ++
base/applications/cmdutils/attrib/lang/no-NO.rc | 20 ++
base/applications/cmdutils/attrib/lang/pl-PL.rc | 29 ++
base/applications/cmdutils/attrib/lang/ro-RO.rc | 22 ++
base/applications/cmdutils/attrib/lang/ru-RU.rc | 22 ++
base/applications/cmdutils/attrib/lang/sk-SK.rc | 26 ++
base/applications/cmdutils/attrib/lang/sq-AL.rc | 24 ++
base/applications/cmdutils/attrib/lang/sv-SE.rc | 20 ++
base/applications/cmdutils/attrib/lang/tr-TR.rc | 22 ++
base/applications/cmdutils/attrib/lang/uk-UA.rc | 28 ++
base/applications/cmdutils/attrib/lang/zh-CN.rc | 21 ++
base/applications/cmdutils/attrib/lang/zh-TW.rc | 22 ++
base/applications/cmdutils/attrib/resource.h | 7 +
base/shell/cmd/CMakeLists.txt | 1 -
base/shell/cmd/attrib.c | 344 --------------------
base/shell/cmd/cmd.h | 3 -
base/shell/cmd/cmdtable.c | 4 -
base/shell/cmd/config.h | 1 -
base/shell/cmd/lang/cs-CZ.rc | 13 -
base/shell/cmd/lang/de-DE.rc | 13 -
base/shell/cmd/lang/el-GR.rc | 13 -
base/shell/cmd/lang/en-US.rc | 13 -
base/shell/cmd/lang/es-ES.rc | 13 -
base/shell/cmd/lang/fr-FR.rc | 13 -
base/shell/cmd/lang/hu-HU.rc | 13 -
base/shell/cmd/lang/id-ID.rc | 13 -
base/shell/cmd/lang/it-IT.rc | 13 -
base/shell/cmd/lang/ja-JP.rc | 13 -
base/shell/cmd/lang/no-NO.rc | 13 -
base/shell/cmd/lang/pl-PL.rc | 13 -
base/shell/cmd/lang/ro-RO.rc | 13 -
base/shell/cmd/lang/ru-RU.rc | 13 -
base/shell/cmd/lang/sk-SK.rc | 13 -
base/shell/cmd/lang/sq-AL.rc | 13 -
base/shell/cmd/lang/sv-SE.rc | 13 -
base/shell/cmd/lang/tr-TR.rc | 13 -
base/shell/cmd/lang/uk-UA.rc | 13 -
base/shell/cmd/lang/zh-CN.rc | 12 -
base/shell/cmd/lang/zh-TW.rc | 12 -
base/shell/cmd/resource.h | 1 -
53 files changed, 961 insertions(+), 625 deletions(-)
diff --git a/base/applications/cmdutils/CMakeLists.txt
b/base/applications/cmdutils/CMakeLists.txt
index 2ca3a2b9004..20f8529aa78 100644
--- a/base/applications/cmdutils/CMakeLists.txt
+++ b/base/applications/cmdutils/CMakeLists.txt
@@ -1,4 +1,5 @@
add_subdirectory(at)
+add_subdirectory(attrib)
add_subdirectory(chcp)
add_subdirectory(clip)
add_subdirectory(comp)
diff --git a/base/applications/cmdutils/attrib/CMakeLists.txt
b/base/applications/cmdutils/attrib/CMakeLists.txt
new file mode 100644
index 00000000000..a2b75f4ec5f
--- /dev/null
+++ b/base/applications/cmdutils/attrib/CMakeLists.txt
@@ -0,0 +1,8 @@
+
+include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
+
+add_executable(attrib attrib.c attrib.rc)
+set_module_type(attrib win32cui UNICODE)
+target_link_libraries(attrib conutils ${PSEH_LIB})
+add_importlibs(attrib user32 msvcrt kernel32)
+add_cd_file(TARGET attrib DESTINATION reactos/system32 FOR all)
diff --git a/base/applications/cmdutils/attrib/attrib.c
b/base/applications/cmdutils/attrib/attrib.c
new file mode 100644
index 00000000000..141ad497285
--- /dev/null
+++ b/base/applications/cmdutils/attrib/attrib.c
@@ -0,0 +1,392 @@
+/*
+ * ATTRIB.C - attrib internal command.
+ *
+ *
+ * History:
+ *
+ * 04-Dec-1998 Eric Kohl
+ * started
+ *
+ * 09-Dec-1998 Eric Kohl
+ * implementation works, except recursion ("attrib /s").
+ *
+ * 05-Jan-1999 Eric Kohl
+ * major rewrite.
+ * fixed recursion ("attrib /s").
+ * started directory support ("attrib /s /d").
+ * updated help text.
+ *
+ * 14-Jan-1999 Eric Kohl
+ * Unicode ready!
+ *
+ * 19-Jan-1999 Eric Kohl
+ * Redirection ready!
+ *
+ * 21-Jan-1999 Eric Kohl
+ * Added check for invalid filenames.
+ *
+ * 23-Jan-1999 Eric Kohl
+ * Added handling of multiple filenames.
+ *
+ * 02-Apr-2005 (Magnus Olsen <magnus(a)greatlord.com>)
+ * Remove all hardcoded strings in En.rc
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <wincon.h>
+#include <winuser.h>
+
+#include <conutils.h>
+
+#include "resource.h"
+
+CON_SCREEN StdOutScreen = INIT_CON_SCREEN(StdOut);
+
+static
+VOID
+ErrorMessage(
+ DWORD dwErrorCode,
+ LPWSTR szFormat,
+ ...)
+{
+ WCHAR szMsg[RC_STRING_MAX_SIZE];
+ WCHAR szMessage[1024];
+ LPWSTR szError;
+ va_list arg_ptr;
+
+ if (dwErrorCode == ERROR_SUCCESS)
+ return;
+
+ if (szFormat)
+ {
+ va_start(arg_ptr, szFormat);
+ vswprintf(szMessage, szFormat, arg_ptr);
+ va_end(arg_ptr);
+ }
+
+ if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPWSTR)&szError, 0, NULL))
+ {
+ ConPrintf(StdErr, L"%s %s\n", szError, szMessage);
+ if (szError)
+ LocalFree(szError);
+ return;
+ }
+
+ /* Fall back just in case the error is not defined */
+ LoadStringW(GetModuleHandle(NULL), STRING_CONSOLE_ERROR, szMsg, ARRAYSIZE(szMsg));
+ if (szFormat)
+ ConPrintf(StdErr, L"%s -- %s\n", szMsg, szMessage);
+ else
+ ConPrintf(StdErr, L"%s\n", szMsg);
+}
+
+static
+INT
+PrintAttribute(
+ LPWSTR pszPath,
+ LPWSTR pszFile,
+ BOOL bRecurse)
+{
+ WIN32_FIND_DATAW findData;
+ HANDLE hFind;
+ WCHAR szFullName[MAX_PATH];
+ LPWSTR pszFileName;
+
+ /* prepare full file name buffer */
+ wcscpy(szFullName, pszPath);
+ pszFileName = szFullName + wcslen(szFullName);
+
+ /* display all subdirectories */
+ if (bRecurse)
+ {
+ /* append file name */
+ wcscpy(pszFileName, pszFile);
+
+ hFind = FindFirstFileW(szFullName, &findData);
+ if (hFind == INVALID_HANDLE_VALUE)
+ {
+ ErrorMessage(GetLastError(), pszFile);
+ return 1;
+ }
+
+ do
+ {
+ if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+ continue;
+
+ if (!wcscmp(findData.cFileName, L".") ||
+ !wcscmp(findData.cFileName, L".."))
+ continue;
+
+ wcscpy(pszFileName, findData.cFileName);
+ wcscat(pszFileName, L"\\");
+ PrintAttribute(szFullName, pszFile, bRecurse);
+ }
+ while(FindNextFileW(hFind, &findData));
+ FindClose(hFind);
+ }
+
+ /* append file name */
+ wcscpy(pszFileName, pszFile);
+
+ /* display current directory */
+ hFind = FindFirstFileW(szFullName, &findData);
+ if (hFind == INVALID_HANDLE_VALUE)
+ {
+ ErrorMessage(GetLastError(), pszFile);
+ return 1;
+ }
+
+ do
+ {
+ if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ continue;
+
+ wcscpy(pszFileName, findData.cFileName);
+
+ ConPrintf(StdOut,
+ L"%c %c%c%c %s\n",
+ (findData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) ? L'A'
: L' ',
+ (findData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) ? L'S'
: L' ',
+ (findData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) ? L'H'
: L' ',
+ (findData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ?
L'R' : L' ',
+ szFullName);
+ }
+ while(FindNextFileW(hFind, &findData));
+ FindClose(hFind);
+
+ return 0;
+}
+
+
+static
+INT
+ChangeAttribute(
+ LPWSTR pszPath,
+ LPWSTR pszFile,
+ DWORD dwMask,
+ DWORD dwAttrib,
+ BOOL bRecurse,
+ BOOL bDirectories)
+{
+ WIN32_FIND_DATAW findData;
+ HANDLE hFind;
+ DWORD dwAttribute;
+ WCHAR szFullName[MAX_PATH];
+ LPWSTR pszFileName;
+
+ /* prepare full file name buffer */
+ wcscpy(szFullName, pszPath);
+ pszFileName = szFullName + wcslen(szFullName);
+
+ /* change all subdirectories */
+ if (bRecurse)
+ {
+ /* append file name */
+ wcscpy(pszFileName, L"*.*");
+
+ hFind = FindFirstFileW(szFullName, &findData);
+ if (hFind == INVALID_HANDLE_VALUE)
+ {
+ ErrorMessage(GetLastError(), pszFile);
+ return 1;
+ }
+
+ do
+ {
+ if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ {
+ if (!wcscmp(findData.cFileName, L".") ||
+ !wcscmp(findData.cFileName, L".."))
+ continue;
+
+ wcscpy(pszFileName, findData.cFileName);
+ wcscat(pszFileName, L"\\");
+
+ ChangeAttribute(szFullName, pszFile, dwMask,
+ dwAttrib, bRecurse, bDirectories);
+ }
+ }
+ while (FindNextFileW(hFind, &findData));
+ FindClose(hFind);
+ }
+
+ /* append file name */
+ wcscpy(pszFileName, pszFile);
+
+ hFind = FindFirstFileW(szFullName, &findData);
+ if (hFind == INVALID_HANDLE_VALUE)
+ {
+ ErrorMessage(GetLastError(), pszFile);
+ return 1;
+ }
+
+ do
+ {
+ if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ continue;
+
+ wcscpy(pszFileName, findData.cFileName);
+
+ dwAttribute = GetFileAttributes (szFullName);
+
+ if (dwAttribute != 0xFFFFFFFF)
+ {
+ dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+ SetFileAttributes(szFullName, dwAttribute);
+ }
+ }
+ while (FindNextFileW(hFind, &findData));
+ FindClose(hFind);
+
+ return 0;
+}
+
+
+int wmain(int argc, WCHAR *argv[])
+{
+ INT i;
+ WCHAR szPath[MAX_PATH];
+ WCHAR szFileName [MAX_PATH];
+ BOOL bRecurse = FALSE;
+ BOOL bDirectories = FALSE;
+ DWORD dwAttrib = 0;
+ DWORD dwMask = 0;
+
+ /* Initialize the Console Standard Streams */
+ ConInitStdStreams();
+
+ /* Print help */
+ if (argc > 1 && wcscmp(argv[1], L"/?") == 0)
+ {
+ ConResPuts(StdOut, STRING_ATTRIB_HELP);
+ return 0;
+ }
+
+ /* check for options */
+ for (i = 1; i < argc; i++)
+ {
+ if (wcsicmp(argv[i], L"/s") == 0)
+ bRecurse = TRUE;
+ else if (wcsicmp(argv[i], L"/d") == 0)
+ bDirectories = TRUE;
+ }
+
+ /* create attributes and mask */
+ for (i = 1; i < argc; i++)
+ {
+ if (*argv[i] == L'+')
+ {
+ if (wcslen(argv[i]) != 2)
+ {
+ ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
+ return -1;
+ }
+
+ switch (towupper(argv[i][1]))
+ {
+ case L'A':
+ dwMask |= FILE_ATTRIBUTE_ARCHIVE;
+ dwAttrib |= FILE_ATTRIBUTE_ARCHIVE;
+ break;
+
+ case L'H':
+ dwMask |= FILE_ATTRIBUTE_HIDDEN;
+ dwAttrib |= FILE_ATTRIBUTE_HIDDEN;
+ break;
+
+ case L'R':
+ dwMask |= FILE_ATTRIBUTE_READONLY;
+ dwAttrib |= FILE_ATTRIBUTE_READONLY;
+ break;
+
+ case L'S':
+ dwMask |= FILE_ATTRIBUTE_SYSTEM;
+ dwAttrib |= FILE_ATTRIBUTE_SYSTEM;
+ break;
+
+ default:
+ ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
+ return -1;
+ }
+ }
+ else if (*argv[i] == L'-')
+ {
+ if (wcslen(argv[i]) != 2)
+ {
+ ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
+ return -1;
+ }
+
+ switch (towupper(argv[i][1]))
+ {
+ case L'A':
+ dwMask |= FILE_ATTRIBUTE_ARCHIVE;
+ dwAttrib &= ~FILE_ATTRIBUTE_ARCHIVE;
+ break;
+
+ case L'H':
+ dwMask |= FILE_ATTRIBUTE_HIDDEN;
+ dwAttrib &= ~FILE_ATTRIBUTE_HIDDEN;
+ break;
+
+ case L'R':
+ dwMask |= FILE_ATTRIBUTE_READONLY;
+ dwAttrib &= ~FILE_ATTRIBUTE_READONLY;
+ break;
+
+ case L'S':
+ dwMask |= FILE_ATTRIBUTE_SYSTEM;
+ dwAttrib &= ~FILE_ATTRIBUTE_SYSTEM;
+ break;
+
+ default:
+ ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
+ return -1;
+ }
+ }
+ }
+
+ if (argc == 1)
+ {
+ DWORD len;
+
+ len = GetCurrentDirectory(MAX_PATH, szPath);
+ if (szPath[len-1] != L'\\')
+ {
+ szPath[len] = L'\\';
+ szPath[len + 1] = UNICODE_NULL;
+ }
+ wcscpy(szFileName, L"*.*");
+ PrintAttribute(szPath, szFileName, bRecurse);
+ return 0;
+ }
+
+ /* get full file name */
+ for (i = 1; i < argc; i++)
+ {
+ if ((*argv[i] != L'+') && (*argv[i] != L'-') &&
(*argv[i] != L'/'))
+ {
+ LPWSTR p;
+
+ GetFullPathName(argv[i], MAX_PATH, szPath, NULL);
+ p = wcsrchr(szPath, L'\\') + 1;
+ wcscpy(szFileName, p);
+ *p = L'\0';
+
+ if (dwMask == 0)
+ PrintAttribute(szPath, szFileName, bRecurse);
+ else
+ ChangeAttribute(szPath, szFileName, dwMask,
+ dwAttrib, bRecurse, bDirectories);
+ }
+ }
+
+ return 0;
+}
diff --git a/base/applications/cmdutils/attrib/attrib.rc
b/base/applications/cmdutils/attrib/attrib.rc
new file mode 100644
index 00000000000..a199d758c18
--- /dev/null
+++ b/base/applications/cmdutils/attrib/attrib.rc
@@ -0,0 +1,77 @@
+#include <windef.h>
+
+#include "resource.h"
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Attribute Command"
+#define REACTOS_STR_INTERNAL_NAME "attrib"
+#define REACTOS_STR_ORIGINAL_FILENAME "attrib.exe"
+#include <reactos/version.rc>
+
+/* UTF-8 */
+#pragma code_page(65001)
+
+#ifdef LANGUAGE_CS_CZ
+ #include "lang/cs-CZ.rc"
+#endif
+#ifdef LANGUAGE_DE_DE
+ #include "lang/de-DE.rc"
+#endif
+#ifdef LANGUAGE_EL_GR
+ #include "lang/el-GR.rc"
+#endif
+#ifdef LANGUAGE_EN_US
+ #include "lang/en-US.rc"
+#endif
+#ifdef LANGUAGE_ES_ES
+ #include "lang/es-ES.rc"
+#endif
+#ifdef LANGUAGE_FR_FR
+ #include "lang/fr-FR.rc"
+#endif
+#ifdef LANGUAGE_HU_HU
+ #include "lang/hu-HU.rc"
+#endif
+#ifdef LANGUAGE_ID_ID
+ #include "lang/id-ID.rc"
+#endif
+#ifdef LANGUAGE_IT_IT
+ #include "lang/it-IT.rc"
+#endif
+#ifdef LANGUAGE_NB_NO
+ #include "lang/no-NO.rc"
+#endif
+#ifdef LANGUAGE_JA_JP
+ #include "lang/ja-JP.rc"
+#endif
+#ifdef LANGUAGE_PL_PL
+ #include "lang/pl-PL.rc"
+#endif
+#ifdef LANGUAGE_RO_RO
+ #include "lang/ro-RO.rc"
+#endif
+#ifdef LANGUAGE_RU_RU
+ #include "lang/ru-RU.rc"
+#endif
+#ifdef LANGUAGE_SK_SK
+ #include "lang/sk-SK.rc"
+#endif
+#ifdef LANGUAGE_SV_SE
+ #include "lang/sv-SE.rc"
+#endif
+#ifdef LANGUAGE_SQ_AL
+ #include "lang/sq-AL.rc"
+#endif
+#ifdef LANGUAGE_TR_TR
+ #include "lang/tr-TR.rc"
+#endif
+#ifdef LANGUAGE_UK_UA
+ #include "lang/uk-UA.rc"
+#endif
+#ifdef LANGUAGE_ZH_CN
+ #include "lang/zh-CN.rc"
+#endif
+#ifdef LANGUAGE_ZH_TW
+ #include "lang/zh-TW.rc"
+#endif
diff --git a/base/applications/cmdutils/attrib/lang/cs-CZ.rc
b/base/applications/cmdutils/attrib/lang/cs-CZ.rc
new file mode 100644
index 00000000000..d67fffd3dfb
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/cs-CZ.rc
@@ -0,0 +1,25 @@
+/* FILE: base/shell/cmd/lang/cs-CZ.rc
+ * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
+ * UPDATED: 2015-04-12
+ */
+
+LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+ [/S [/D]]\n\n\
+ + Sets an attribute\n\
+ - Clears an attribute\n\
+ R Read-only file attribute\n\
+ A Archive file attribute\n\
+ S System file attribute\n\
+ H Hidden file attribute\n\
+ /S Processes matching files in the current directory\n\
+ and all subdirectories\n\
+ /D Processes directories as well\n\n\
+Type ATTRIB without a parameter to display the attributes of all files.\n"
+ STRING_CONSOLE_ERROR "Neznámá chyba: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Neplatný formát parametru - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/de-DE.rc
b/base/applications/cmdutils/attrib/lang/de-DE.rc
new file mode 100644
index 00000000000..44791186be6
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/de-DE.rc
@@ -0,0 +1,22 @@
+/* German language file by Klemens Friedl <frik85> 2005-06-03 */
+
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Zeigt Dateiattribute an oder ändert sie.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] Dateiname ...\n\
+ [/S [/D]]\n\n\
+ + Setzt ein Attribut\n\
+ - Löscht ein Attribut\n\
+ R Attribut für 'schreibgeschützte Datei'\n\
+ A Attribut für 'zu archivierende Datei'\n\
+ S Attribut für 'Systemdatei'\n\
+ H Attribut für 'versteckte Datei'\n\
+ /S Verarbeitet übereinstimmende Dateien im aktuellen Ordner\n\
+ und in allen Unterordnern.\n\
+ /D Verarbeitet auch die Ordner.\n\n\
+ATTRIB ohne Parameter zeigt die derzeit gesetzten Attribute aller Dateien an."
+ STRING_CONSOLE_ERROR "Unbekannter Fehler: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Ungültiges Parameterformat - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/el-GR.rc
b/base/applications/cmdutils/attrib/lang/el-GR.rc
new file mode 100644
index 00000000000..dcfc19fb746
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/el-GR.rc
@@ -0,0 +1,25 @@
+/*
+ * Αρχική έκδοση - Ημιτελής.
+ * Ελληνική μετάφραση - Απόστολος Αλεξιάδης
+ */
+
+LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Προβολή ή αλλαγή των χαρακτηριστικών των αρχείων.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+ [/S [/D]]\n\n\
+ + Ορισμός ενός χαρακτηριστικού.\n\
+ - Απαλοιφή ενός χαρακτηριστικού.\n\
+ R Χαρακτηριστικό αρχείου μόνο για ανάγνωση.\n\
+ A Χαρακτηριστικό φύλαξης αρχείου.\n\
+ S Χαρακτηριστικό αρχείου συστήματος.\n\
+ H Χαρακτηριστικό κρυφού αρχείου.\n\
+ /S Επεξεργασία των αρχείων που ταιριάζουν στον τρέχοντα κατάλογο\n\
+ και σε όλους τους υποκαταλόγους.\n\
+ /D Επεξεργασία καταλόγων επίσης.\n\n\
+Πληκτρολογήστε ATTRIB χωρίς παράμετρο, για να εμφανιστούν τα χαρακτηριστικά όλων των
αρχείων.\n"
+ STRING_CONSOLE_ERROR "Άγνωστο σφάλμα: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Μη έγκυρο φορμά παραμέτρου - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/en-US.rc
b/base/applications/cmdutils/attrib/lang/en-US.rc
new file mode 100644
index 00000000000..692b04c013c
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/en-US.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+ [/S [/D]]\n\n\
+ + Sets an attribute\n\
+ - Clears an attribute\n\
+ R Read-only file attribute\n\
+ A Archive file attribute\n\
+ S System file attribute\n\
+ H Hidden file attribute\n\
+ /S Processes matching files in the current directory\n\
+ and all subdirectories\n\
+ /D Processes directories as well\n\n\
+Type ATTRIB without a parameter to display the attributes of all files.\n"
+ STRING_CONSOLE_ERROR "Unknown error: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Invalid parameter format - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/es-ES.rc
b/base/applications/cmdutils/attrib/lang/es-ES.rc
new file mode 100644
index 00000000000..8271d4784cb
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/es-ES.rc
@@ -0,0 +1,22 @@
+/* Spanish translation by HUMA2000, Jose Pedro Fernández Pascual e Ismael Ferreras
Morezuelas (Swyter) */
+
+LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Muestra o cambia los atributos de los archivos.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+ [/S [/D]]\n\n\
+ + Añade un atributo\n\
+ - Borra un atributo\n\
+ R Atributo de sólo lectura\n\
+ A Atributo de archivo\n\
+ S Atributo de archivo de sistema\n\
+ H Atributo de archivo oculto\n\
+ /S Procesa los archivos coincidentes en el directorio actual \n\
+ y sus subdirectorios\n\
+ /D Procesa también los directorios\n\n\
+Type ATTRIB without a parameter to display the attributes of all files.\n"
+ STRING_CONSOLE_ERROR "Error desconocido: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Formato de parámetro erróneo - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/fr-FR.rc
b/base/applications/cmdutils/attrib/lang/fr-FR.rc
new file mode 100644
index 00000000000..d330ba51f3b
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/fr-FR.rc
@@ -0,0 +1,22 @@
+/* French translation by Sylvain Pétréolle, Pierre Schweitzer */
+
+LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Affiche ou change des attributs de fichiers.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+ [/S [/D]]\n\n\
+ + Positionne un attribut\n\
+ - Enlève un attribut\n\
+ R Fichier en lecture seule\n\
+ A Fichier archive\n\
+ S Fichier système\n\
+ H Fichier caché\n\
+ /S Traite les fichiers correspondants dans le répertoire courant\n\
+ et tous les sous-répertoires\n\
+ /D Traite également les répertoires\n\n\
+Taper ATTRIB sans paramètre pour afficher les attributs de tous les fichiers."
+ STRING_CONSOLE_ERROR "Erreur inconnue : %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Format de paramètre incorrect - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/hu-HU.rc
b/base/applications/cmdutils/attrib/lang/hu-HU.rc
new file mode 100644
index 00000000000..37d8d22ad96
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/hu-HU.rc
@@ -0,0 +1,22 @@
+/* Hungarian translation by Robert Horvath (talley at cubeclub.hu) 2005 */
+
+LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Állományok attribútumok megjelenítése vagy
beállításai.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] állomány ...\n\
+ [/S [/D]]\n\n\
+ + bekapcsol egy attribútumot\n\
+ - kikapcsol egy attribútumot\n\
+ R Írásvédett állomány\n\
+ A Archiválandó állomány\n\
+ S Rendszer állomány\n\
+ H Rejtett állomány\n\
+ /S Minden állomány módosítása a mappában és minden\n\
+ almappábanban\n\
+ /D Mappákra is érvényesíti\n\n\
+Ha ATTRIB-ot paraméter nélkül írod be, megjeleníti a mappában található összes állományt
és annak attribútumát.\n"
+ STRING_CONSOLE_ERROR "Ismeretlen hiba: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Érvénytelen paraméter megadás - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/id-ID.rc
b/base/applications/cmdutils/attrib/lang/id-ID.rc
new file mode 100644
index 00000000000..74ac009a952
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/id-ID.rc
@@ -0,0 +1,22 @@
+/* Indonesian language file by Zaenal Mutaqin <ade999 at gmail dot com> 2007-02-15
*/
+
+LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Menampilkan atau mengubah atribut file.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+ [/S [/D]]\n\n\
+ + Menyetel atribut\n\
+ - Membersihkan atribut\n\
+ R Atribut file Hanya-baca\n\
+ A Atribut file Arsip\n\
+ S Atribut file Sistem\n\
+ H Atribut file Tersembunyi\n\
+ /S Proses file yang sama dalam direktori dan semua subdirektori\n\
+ saat ini\n\
+ /D Proses direktori juga\n\n\
+Ketik ATTRIB tanpa parameter untuk menampilkan atribut dari semua file.\n"
+ STRING_CONSOLE_ERROR "Kesalahan tidak dikenal: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Format parameter tidak benar - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/it-IT.rc
b/base/applications/cmdutils/attrib/lang/it-IT.rc
new file mode 100644
index 00000000000..70d47fc74c4
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/it-IT.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Visualizza o modifica gli attributi dei file.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+ [/S [/D]]\n\n\
+ + Attiva un attributo\n\
+ - Toglie un attributo\n\
+ R Attributo di file di sola lettura\n\
+ A Attributo di file di archivio\n\
+ S Attributo di file di sistema\n\
+ H Attributo di file nascosto\n\
+ /S Tratta i file indicati nella cartella corrente e in\n\
+ tutte le sottocartelle\n\
+ /D Tratta anche le cartelle\n\n\
+Scrivi ATTRIB senza parametri per visualizzare gli attributi di tutti i file.\n"
+ STRING_CONSOLE_ERROR "Errore sconosciuto: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Formato dei parametri non valido -
%s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/ja-JP.rc
b/base/applications/cmdutils/attrib/lang/ja-JP.rc
new file mode 100644
index 00000000000..79e2c7652fd
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/ja-JP.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "ファイル属性を表示または変更します。\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [ファイル] ...\n\
+ [/S [/D]]\n\n\
+ + 属性を設定します。\n\
+ - 属性を解除します。\n\
+ R 読みとり専用属性。\n\
+ A アーカイブ属性。\n\
+ S システム ファイル属性。\n\
+ H 隠しファイル属性。\n\
+ /S 現在のフォルダとすべてのサブフォルダの一致するファイルを\n\
+ 処理します。\n\
+ /D フォルダも処理します。\n\n\
+パラメータを指定しないで ATTRIB と入力すると、すべてのファイルの属性を表示します。\n"
+ STRING_CONSOLE_ERROR "不明なエラー: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "無効なパラメータの書式です。 - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/no-NO.rc
b/base/applications/cmdutils/attrib/lang/no-NO.rc
new file mode 100644
index 00000000000..095e18be0b2
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/no-NO.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Viser eller endrer filattributtene.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
+ [/S [/D]]\n\n\
+ + Setter et attributt\n\
+ - Fjerner et attributt\n\
+ R Attributt: Skrivebeskyttet.\n\
+ A Attributt: Arkiver.\n\
+ S Attributt: System.\n\
+ H Attributt: Skjult.\n\
+ /S Behandler tilsvarende filer i gjeldende mappe\n\
+ og alle undermapper.\n\
+ /D Bearbeider også mapper.\n\n\
+Skriv ATTRIB uten parametere for å vise attributtene til alle filer.\n"
+ STRING_CONSOLE_ERROR "Ukjent feil: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Ugyldig parameter format - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/pl-PL.rc
b/base/applications/cmdutils/attrib/lang/pl-PL.rc
new file mode 100644
index 00000000000..42543e60b3a
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/pl-PL.rc
@@ -0,0 +1,29 @@
+/*
+ * Translated by Caemyr - Olaf Siejka (Jan, 2008)
+ * Updated by niski - Maciej Bialas (Mar, 2010)
+ * Use ReactOS forum PM or IRC to contact me
+ *
http://www.reactos.org
+ * IRC:
irc.freenode.net #reactos-pl;
+ * UTF-8 conversion by Caemyr (May, 2011)
+ */
+
+LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Wyświetla lub zmienia atrybuty plików.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] nazwa_pliku ...\n\
+ [/S [/D]]\n\n\
+ + Ustawia atrybut\n\
+ - Czyści atrybut\n\
+ R Atrybut pliku tylko do odczytu\n\
+ A Atrybut pliku archiwalnego\n\
+ S Atrybut pliku systemowego\n\
+ H Atrybut pliku ukrytego\n\
+ /S Przetwarza wszystkie, pasujące pliki w bieżącym katalogu\n\
+ i we wszystkich podkatalogach\n\
+ /D Przetwarza również katalogi\n\n\
+Wpisz ATTRIB bez żadnego parametru, by wyświetlić atrybuty wszystkich plików.\n"
+ STRING_CONSOLE_ERROR "Nieznany błąd: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Niewłaściwy format parametru - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/ro-RO.rc
b/base/applications/cmdutils/attrib/lang/ro-RO.rc
new file mode 100644
index 00000000000..73eed7eaf11
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/ro-RO.rc
@@ -0,0 +1,22 @@
+/* Translator: Ștefan Fulea (stefan dot fulea at mail dot com) */
+
+LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Afișează sau modifică atributele de fișiere.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fișier ...\n\
+ [/S [/D]]\n\n\
+ + Consimte atributul\n\
+ - Reprobă atributul\n\
+ R Atributul fișierelor nemodificabile\n\
+ A Atributul fișierelor arhivabile\n\
+ S Atributul fișierelor de sistem\n\
+ H Atributul fișierelor ascunse\n\
+ /S Aplică și pentru fișierele din subdirectoare\n\
+ /D Aplică și pentru directoare\n\n\
+Tastați ATTRIB fără argumente pentru afișarea atributelor pentru\n\
+toate fișierele.\n"
+ STRING_CONSOLE_ERROR "Eroare necunoscută: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Formatul argumentului este eronat -
%s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/ru-RU.rc
b/base/applications/cmdutils/attrib/lang/ru-RU.rc
new file mode 100644
index 00000000000..8cea9affee4
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/ru-RU.rc
@@ -0,0 +1,22 @@
+/* Russian translation by Andrey Korotaev (unC0Rr(a)inbox.ru) & Aleksey Bragin
(aleksey(a)reactos.org) & Kudratov Olimjon (olim98(a)bk.ru)*/
+
+LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Вывод и изменение атрибутов файлов.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
+ [/S [/D]]\n\n\
+ + Установка атрибута.\n\
+ - Снятие атрибута.\n\
+ R Атрибут ""Только чтение"".\n\
+ A Атрибут ""Архивный"".\n\
+ S Атрибут ""Системный"".\n\
+ H Атрибут ""Скрытый"".\n\
+ /S Обработка файлов с указанными именами в текущей папке\n\
+ и во всех ее подпапках.\n\
+ /D Обработка и файлов, и папок.\n\n\
+Команда ATTRIB без параметров выводит атрибуты всех файлов.\n"
+ STRING_CONSOLE_ERROR "Неизвестная ошибка: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Неверный формат параметра - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/sk-SK.rc
b/base/applications/cmdutils/attrib/lang/sk-SK.rc
new file mode 100644
index 00000000000..281a003325b
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/sk-SK.rc
@@ -0,0 +1,26 @@
+/* Slovak translation for CMD
+ * TRANSLATOR: Mário Kačmár /Mario Kacmar/ aka Kario (kario(a)szm.sk)
+ * DATE OF TR: 21-03-2009
+ * LastChange: 10-08-2010
+ */
+
+LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+ [/S [/D]]\n\n\
+ + Sets an attribute\n\
+ - Clears an attribute\n\
+ R Read-only file attribute\n\
+ A Archive file attribute\n\
+ S System file attribute\n\
+ H Hidden file attribute\n\
+ /S Processes matching files in the current directory\n\
+ and all subdirectories\n\
+ /D Processes directories as well\n\n\
+Type ATTRIB without a parameter to display the attributes of all files.\n"
+ STRING_CONSOLE_ERROR "Neznáma chyba: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Invalid parameter format - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/sq-AL.rc
b/base/applications/cmdutils/attrib/lang/sq-AL.rc
new file mode 100644
index 00000000000..ca39be06934
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/sq-AL.rc
@@ -0,0 +1,24 @@
+/* TRANSLATOR : Ardit Dani (Ard1t) (ardit.dani(a)gmail.com)
+ * DATE OF TR: 29-11-2013
+*/
+
+LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Shfaq ose ndryshu atributet e dokumentave.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+ [/S [/D]]\n\n\
+ + Vendos nje atribute\n\
+ - Pastron një atribute\n\
+ R Lexo-vetem atributet e dokumentave\n\
+ A Atributet e dokumentave në arkiv\n\
+ S Atributet e dokumentave të sistemit\n\
+ H Atributet e dokumentave te fshehur\n\
+ /S Procesi i përputhjes së dokumentave ne skedën aktuale\n\
+ dhe të gjitha nënskedat\n\
+ /D Proçeso skedat gjithashtu\n\n\
+Shkruaj ATTRIB pa një parameter për të shfaque atributet e të gjithë
dokumentave.\n"
+ STRING_CONSOLE_ERROR "Error i paditur: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Parametrat e formatit invalid - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/sv-SE.rc
b/base/applications/cmdutils/attrib/lang/sv-SE.rc
new file mode 100644
index 00000000000..236baf7c6a2
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/sv-SE.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Visar eller ändrar filattributen.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
+ [/S [/D]]\n\n\
+ + Sätter ett attribut\n\
+ - Rensar ett attribut\n\
+ R Attribut: Skrivskyddad.\n\
+ A Attribut: Arkiverad.\n\
+ S Attribut: System.\n\
+ H Attribut: Dold.\n\
+ /S Behandlar matchande filer i den aktuella mappen\n\
+ och alla undermappar.\n\
+ /D Bearbetar även mappar.\n\n\
+Skriv ATTRIB utan parametrar för att visa attributten för alla filer.\n"
+ STRING_CONSOLE_ERROR "Okänt fel: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Ogiltigt parameterformat - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/tr-TR.rc
b/base/applications/cmdutils/attrib/lang/tr-TR.rc
new file mode 100644
index 00000000000..d96c764e2e6
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/tr-TR.rc
@@ -0,0 +1,22 @@
+/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy [at] erdemersoy [dot] net) */
+
+LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Kütük öz niteliklerini görüntüler ya da değiştirir.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] kütük ...\n\
+ [/S [/D]]\n\n\
+ + Bir öz nitelik ayarlar\n\
+ - Bir öz nitelik siler\n\
+ R Yalnızca okunur kütük öz niteliği\n\
+ A Belgelik kütük öz niteliği\n\
+ S Dizge kütük öz niteliği\n\
+ H Gizli kütük öz niteliği\n\
+ /S Şimdiki dizindeki ve tüm alt dizinlerdeki kütükleri eşlemeyi yapar\n\
+ /D Dizinleri de yap\n\n\
+Tüm kütüklerin öz niteliklerini görüntülemek için bir değişken olmadan ATTRIB\n\
+yazınız.\n"
+ STRING_CONSOLE_ERROR "Bilinmeyen yanlışlık: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Geçersiz değişken biçimi - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/uk-UA.rc
b/base/applications/cmdutils/attrib/lang/uk-UA.rc
new file mode 100644
index 00000000000..6591e433459
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/uk-UA.rc
@@ -0,0 +1,28 @@
+/*
+ * PROJECT: Command-line interface
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: base/shell/cmd/lang/uk-UA.rc
+ * PURPOSE: Ukraianian Language File for Command-line interface
+ * TRANSLATORS: Artem Reznikov, Igor Paliychuk
+ */
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "Відображення або зміна атрибутів файлу.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
+ [/S [/D]]\n\n\
+ + Встановлення атрибуту\n\
+ - Зняття атрибуту\n\
+ R Атрибут файлу ""Лише читання""\n\
+ A Атрибут файлу ""Архiвний""\n\
+ S Атрибут файлу ""Системний""\n\
+ H Атрибут файлу ""Прихований""\n\
+ /S Обробка файлiв зi вказаними iменами в поточнiй тецi\n\
+ i у всіх її пiдтеках\n\
+ /D Обробка також i тек\n\n\
+Введiть ATTRIB без параметра, щоб вивести атрибути всiх файлiв.\n"
+ STRING_CONSOLE_ERROR "Невiдома помилка: %d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "Невiрний формат параметра - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/zh-CN.rc
b/base/applications/cmdutils/attrib/lang/zh-CN.rc
new file mode 100644
index 00000000000..a4d10f23bff
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/zh-CN.rc
@@ -0,0 +1,21 @@
+/* Simplified Chinese translation by Song Fuchang (0xfc) <sfc_0(a)yahoo.com.cn> 2011
*/
+
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "显示或更改文件属性。\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 文件 ...\n\
+ [/S [/D]]\n\n\
+ + 设置一个属性\n\
+ - 清除一个属性\n\
+ R 只读属性\n\
+ A 归档属性\n\
+ S 系统属性\n\
+ H 隐藏属性\n\
+ /S 处理当前目录和所有子目录下的所有匹配文件\n\
+ /D 同时处理目录\n\n\
+执行不带参数的 ATTRIB 将会显示所有文件的属性。\n"
+ STRING_CONSOLE_ERROR "未知错误:%d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "无效的参数格式 - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/zh-TW.rc
b/base/applications/cmdutils/attrib/lang/zh-TW.rc
new file mode 100644
index 00000000000..c1fb32005c0
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/zh-TW.rc
@@ -0,0 +1,22 @@
+/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2(a)hotmail.com) */
+/* Improved by Luo Yufan 2019 <njlyf2011(a)hotmail.com> */
+
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
+
+STRINGTABLE
+BEGIN
+ STRING_ATTRIB_HELP "顯示或更改檔案屬性。\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 檔案 ...\n\
+ [/S [/D]]\n\n\
+ + 設定一個屬性\n\
+ - 清除一個屬性\n\
+ R 只讀屬性\n\
+ A 歸檔屬性\n\
+ S 系統屬性\n\
+ H 隱藏屬性\n\
+ /S 處理當前目錄和所有子目錄下的所有匹配檔案\n\
+ /D 同時處理目錄\n\n\
+執行不帶參數的 ATTRIB 將會顯示所有檔案的屬性。\n"
+ STRING_CONSOLE_ERROR "未知錯誤:%d\n"
+ STRING_ERROR_INVALID_PARAM_FORMAT "無效的參數格式 - %s\n"
+END
\ No newline at end of file
diff --git a/base/applications/cmdutils/attrib/resource.h
b/base/applications/cmdutils/attrib/resource.h
new file mode 100644
index 00000000000..3b44432714c
--- /dev/null
+++ b/base/applications/cmdutils/attrib/resource.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#define RC_STRING_MAX_SIZE 3072
+
+#define STRING_ERROR_INVALID_PARAM_FORMAT 107
+#define STRING_CONSOLE_ERROR 316
+#define STRING_ATTRIB_HELP 600
diff --git a/base/shell/cmd/CMakeLists.txt b/base/shell/cmd/CMakeLists.txt
index 351a7e0c930..99fdd19742f 100644
--- a/base/shell/cmd/CMakeLists.txt
+++ b/base/shell/cmd/CMakeLists.txt
@@ -9,7 +9,6 @@ include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
list(APPEND SOURCE
alias.c
assoc.c
- attrib.c
batch.c
beep.c
call.c
diff --git a/base/shell/cmd/attrib.c b/base/shell/cmd/attrib.c
deleted file mode 100644
index dfc0f1aff99..00000000000
--- a/base/shell/cmd/attrib.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * ATTRIB.C - attrib internal command.
- *
- *
- * History:
- *
- * 04-Dec-1998 Eric Kohl
- * started
- *
- * 09-Dec-1998 Eric Kohl
- * implementation works, except recursion ("attrib /s").
- *
- * 05-Jan-1999 Eric Kohl
- * major rewrite.
- * fixed recursion ("attrib /s").
- * started directory support ("attrib /s /d").
- * updated help text.
- *
- * 14-Jan-1999 Eric Kohl
- * Unicode ready!
- *
- * 19-Jan-1999 Eric Kohl
- * Redirection ready!
- *
- * 21-Jan-1999 Eric Kohl
- * Added check for invalid filenames.
- *
- * 23-Jan-1999 Eric Kohl
- * Added handling of multiple filenames.
- *
- * 02-Apr-2005 (Magnus Olsen <magnus(a)greatlord.com>)
- * Remove all hardcoded strings in En.rc
- */
-
-#include "precomp.h"
-
-#ifdef INCLUDE_CMD_ATTRIB
-
-static VOID
-PrintAttribute (LPTSTR pszPath, LPTSTR pszFile, BOOL bRecurse)
-{
- WIN32_FIND_DATA findData;
- HANDLE hFind;
- TCHAR szFullName[MAX_PATH];
- LPTSTR pszFileName;
-
- /* prepare full file name buffer */
- _tcscpy (szFullName, pszPath);
- pszFileName = szFullName + _tcslen (szFullName);
-
- /* display all subdirectories */
- if (bRecurse)
- {
- /* append file name */
- _tcscpy (pszFileName, pszFile);
-
- hFind = FindFirstFile (szFullName, &findData);
- if (hFind == INVALID_HANDLE_VALUE)
- {
- ErrorMessage (GetLastError (), pszFile);
- return;
- }
-
- do
- {
- if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
- continue;
-
- if (!_tcscmp (findData.cFileName, _T(".")) ||
- !_tcscmp (findData.cFileName, _T("..")))
- continue;
-
- _tcscpy (pszFileName, findData.cFileName);
- _tcscat (pszFileName, _T("\\"));
- PrintAttribute (szFullName, pszFile, bRecurse);
- }
- while (FindNextFile (hFind, &findData));
- FindClose (hFind);
- }
-
- /* append file name */
- _tcscpy (pszFileName, pszFile);
-
- /* display current directory */
- hFind = FindFirstFile (szFullName, &findData);
- if (hFind == INVALID_HANDLE_VALUE)
- {
- ErrorMessage (GetLastError (), pszFile);
- return;
- }
-
- do
- {
- if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- continue;
-
- _tcscpy (pszFileName, findData.cFileName);
-
- ConOutPrintf(_T("%c %c%c%c %s\n"),
- (findData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) ?
_T('A') : _T(' '),
- (findData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) ?
_T('S') : _T(' '),
- (findData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) ?
_T('H') : _T(' '),
- (findData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ?
_T('R') : _T(' '),
- szFullName);
- }
- while (FindNextFile(hFind, &findData));
- FindClose(hFind);
-}
-
-
-static VOID
-ChangeAttribute(LPTSTR pszPath, LPTSTR pszFile, DWORD dwMask,
- DWORD dwAttrib, BOOL bRecurse, BOOL bDirectories)
-{
- WIN32_FIND_DATA findData;
- HANDLE hFind;
- DWORD dwAttribute;
- TCHAR szFullName[MAX_PATH];
- LPTSTR pszFileName;
-
-
- /* prepare full file name buffer */
- _tcscpy (szFullName, pszPath);
- pszFileName = szFullName + _tcslen (szFullName);
-
- /* change all subdirectories */
- if (bRecurse)
- {
- /* append file name */
- _tcscpy (pszFileName, _T("*.*"));
-
- hFind = FindFirstFile (szFullName, &findData);
- if (hFind == INVALID_HANDLE_VALUE)
- {
- ErrorMessage (GetLastError (), pszFile);
- nErrorLevel = 1;
- return;
- }
-
- do
- {
- if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- {
- if (!_tcscmp (findData.cFileName, _T(".")) ||
- !_tcscmp (findData.cFileName, _T("..")))
- continue;
-
- _tcscpy (pszFileName, findData.cFileName);
- _tcscat (pszFileName, _T("\\"));
-
- ChangeAttribute (szFullName, pszFile, dwMask,
- dwAttrib, bRecurse, bDirectories);
- }
- }
- while (FindNextFile (hFind, &findData));
- FindClose (hFind);
- }
-
- /* append file name */
- _tcscpy (pszFileName, pszFile);
-
- hFind = FindFirstFile (szFullName, &findData);
- if (hFind == INVALID_HANDLE_VALUE)
- {
- ErrorMessage (GetLastError (), pszFile);
- nErrorLevel = 1;
- return;
- }
-
- do
- {
- if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- continue;
-
- _tcscpy (pszFileName, findData.cFileName);
-
- dwAttribute = GetFileAttributes (szFullName);
-
- if (dwAttribute != 0xFFFFFFFF)
- {
- dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
- SetFileAttributes (szFullName, dwAttribute);
- }
- }
- while (FindNextFile (hFind, &findData));
- FindClose (hFind);
-}
-
-
-INT CommandAttrib (LPTSTR param)
-{
- LPTSTR *arg;
- INT argc, i;
- TCHAR szPath[MAX_PATH];
- TCHAR szFileName [MAX_PATH];
- BOOL bRecurse = FALSE;
- BOOL bDirectories = FALSE;
- DWORD dwAttrib = 0;
- DWORD dwMask = 0;
-
- /* initialize strings */
- szPath[0] = _T('\0');
- szFileName[0] = _T('\0');
-
- /* print help */
- if (!_tcsncmp (param, _T("/?"), 2))
- {
- ConOutResPaging(TRUE,STRING_ATTRIB_HELP);
- return 0;
- }
-
- nErrorLevel = 0;
-
- /* build parameter array */
- arg = split (param, &argc, FALSE, FALSE);
-
- /* check for options */
- for (i = 0; i < argc; i++)
- {
- if (_tcsicmp (arg[i], _T("/s")) == 0)
- bRecurse = TRUE;
- else if (_tcsicmp (arg[i], _T("/d")) == 0)
- bDirectories = TRUE;
- }
-
- /* create attributes and mask */
- for (i = 0; i < argc; i++)
- {
- if (*arg[i] == _T('+'))
- {
- if (_tcslen (arg[i]) != 2)
- {
- error_invalid_parameter_format (arg[i]);
- freep (arg);
- return -1;
- }
-
- switch ((TCHAR)_totupper (arg[i][1]))
- {
- case _T('A'):
- dwMask |= FILE_ATTRIBUTE_ARCHIVE;
- dwAttrib |= FILE_ATTRIBUTE_ARCHIVE;
- break;
-
- case _T('H'):
- dwMask |= FILE_ATTRIBUTE_HIDDEN;
- dwAttrib |= FILE_ATTRIBUTE_HIDDEN;
- break;
-
- case _T('R'):
- dwMask |= FILE_ATTRIBUTE_READONLY;
- dwAttrib |= FILE_ATTRIBUTE_READONLY;
- break;
-
- case _T('S'):
- dwMask |= FILE_ATTRIBUTE_SYSTEM;
- dwAttrib |= FILE_ATTRIBUTE_SYSTEM;
- break;
-
- default:
- error_invalid_parameter_format (arg[i]);
- freep (arg);
- return -1;
- }
- }
- else if (*arg[i] == _T('-'))
- {
- if (_tcslen (arg[i]) != 2)
- {
- error_invalid_parameter_format (arg[i]);
- freep (arg);
- return -1;
- }
-
- switch ((TCHAR)_totupper (arg[i][1]))
- {
- case _T('A'):
- dwMask |= FILE_ATTRIBUTE_ARCHIVE;
- dwAttrib &= ~FILE_ATTRIBUTE_ARCHIVE;
- break;
-
- case _T('H'):
- dwMask |= FILE_ATTRIBUTE_HIDDEN;
- dwAttrib &= ~FILE_ATTRIBUTE_HIDDEN;
- break;
-
- case _T('R'):
- dwMask |= FILE_ATTRIBUTE_READONLY;
- dwAttrib &= ~FILE_ATTRIBUTE_READONLY;
- break;
-
- case _T('S'):
- dwMask |= FILE_ATTRIBUTE_SYSTEM;
- dwAttrib &= ~FILE_ATTRIBUTE_SYSTEM;
- break;
-
- default:
- error_invalid_parameter_format (arg[i]);
- freep (arg);
- return -1;
- }
- }
- }
-
- if (argc == 0)
- {
- DWORD len;
-
- len = GetCurrentDirectory (MAX_PATH, szPath);
- if (szPath[len-1] != _T('\\'))
- {
- szPath[len] = _T('\\');
- szPath[len + 1] = 0;
- }
- _tcscpy (szFileName, _T("*.*"));
- PrintAttribute (szPath, szFileName, bRecurse);
- freep (arg);
- return 0;
- }
-
- /* get full file name */
- for (i = 0; i < argc; i++)
- {
- if ((*arg[i] != _T('+')) && (*arg[i] != _T('-'))
&& (*arg[i] != _T('/')))
- {
- LPTSTR p;
- GetFullPathName (arg[i], MAX_PATH, szPath, NULL);
- p = _tcsrchr (szPath, _T('\\')) + 1;
- _tcscpy (szFileName, p);
- *p = _T('\0');
-
- if (dwMask == 0)
- PrintAttribute (szPath, szFileName, bRecurse);
- else
- ChangeAttribute (szPath, szFileName, dwMask,
- dwAttrib, bRecurse, bDirectories);
- }
- }
-
- freep (arg);
- return 0;
-}
-
-#endif /* INCLUDE_CMD_ATTRIB */
diff --git a/base/shell/cmd/cmd.h b/base/shell/cmd/cmd.h
index 69a769ee7c2..2ddafab6a4a 100644
--- a/base/shell/cmd/cmd.h
+++ b/base/shell/cmd/cmd.h
@@ -63,9 +63,6 @@ INT CommandAlias (LPTSTR);
/* Prototypes for ASSOC.C */
INT CommandAssoc (LPTSTR);
-/* Prototypes for ATTRIB.C */
-INT CommandAttrib (LPTSTR);
-
/* Prototypes for BEEP.C */
INT cmd_beep (LPTSTR);
diff --git a/base/shell/cmd/cmdtable.c b/base/shell/cmd/cmdtable.c
index 8221f06e32f..20d3f690bb0 100644
--- a/base/shell/cmd/cmdtable.c
+++ b/base/shell/cmd/cmdtable.c
@@ -42,10 +42,6 @@ COMMAND cmds[] =
{_T("assoc"), 0, CommandAssoc},
#endif
-#ifdef INCLUDE_CMD_ATTRIB
- {_T("attrib"), 0, CommandAttrib},
-#endif
-
#ifdef INCLUDE_CMD_BEEP
{_T("beep"), 0, cmd_beep},
#endif
diff --git a/base/shell/cmd/config.h b/base/shell/cmd/config.h
index bdeeaa0e04b..90f7b9cbb53 100644
--- a/base/shell/cmd/config.h
+++ b/base/shell/cmd/config.h
@@ -50,7 +50,6 @@
#define INCLUDE_CMD_ACTIVATE
#endif
#define INCLUDE_CMD_ASSOC
-#define INCLUDE_CMD_ATTRIB
#define INCLUDE_CMD_CHDIR
#define INCLUDE_CMD_CHOICE
#define INCLUDE_CMD_CLS
diff --git a/base/shell/cmd/lang/cs-CZ.rc b/base/shell/cmd/lang/cs-CZ.rc
index a4e8aaa2e6e..4910facf73c 100644
--- a/base/shell/cmd/lang/cs-CZ.rc
+++ b/base/shell/cmd/lang/cs-CZ.rc
@@ -14,19 +14,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
- [/S [/D]]\n\n\
- + Sets an attribute\n\
- - Clears an attribute\n\
- R Read-only file attribute\n\
- A Archive file attribute\n\
- S System file attribute\n\
- H Hidden file attribute\n\
- /S Processes matching files in the current directory\n\
- and all subdirectories\n\
- /D Processes directories as well\n\n\
-Type ATTRIB without a parameter to display the attributes of all files.\n"
STRING_ALIAS_HELP "Sets, removes or shows aliases.\n\n\
ALIAS [alias=[command]]\n\n\
alias Name for an alias.\n\
diff --git a/base/shell/cmd/lang/de-DE.rc b/base/shell/cmd/lang/de-DE.rc
index 52ff6829c7e..078cb1ba32b 100644
--- a/base/shell/cmd/lang/de-DE.rc
+++ b/base/shell/cmd/lang/de-DE.rc
@@ -11,19 +11,6 @@ assoc (Gibt alle Zuordnungen aus)\n\
assoc .erw (Gibt die spezifische Zuordnung aus)\n\
assoc .erw= (Löscht die spezifische Zuordnung)\n\
assoc .erw=Dateityp (Fügt neue Zuordnung hinzu)\n"
- STRING_ATTRIB_HELP "Zeigt Dateiattribute an oder ändert sie.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] Dateiname ...\n\
- [/S [/D]]\n\n\
- + Setzt ein Attribut\n\
- - Löscht ein Attribut\n\
- R Attribut für 'schreibgeschützte Datei'\n\
- A Attribut für 'zu archivierende Datei'\n\
- S Attribut für 'Systemdatei'\n\
- H Attribut für 'versteckte Datei'\n\
- /S Verarbeitet übereinstimmende Dateien im aktuellen Ordner\n\
- und in allen Unterordnern.\n\
- /D Verarbeitet auch die Ordner.\n\n\
-ATTRIB ohne Parameter zeigt die derzeit gesetzten Attribute aller Dateien an."
STRING_ALIAS_HELP "Setzt, löscht oder zeigt ein Alias.\n\n\
ALIAS [Alias=[Befehl]]\n\n\
Alias Name des Alias.\n\
diff --git a/base/shell/cmd/lang/el-GR.rc b/base/shell/cmd/lang/el-GR.rc
index 92c45eac27c..fab27d826c3 100644
--- a/base/shell/cmd/lang/el-GR.rc
+++ b/base/shell/cmd/lang/el-GR.rc
@@ -14,19 +14,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Προβολή ή αλλαγή των χαρακτηριστικών των αρχείων.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
- [/S [/D]]\n\n\
- + Ορισμός ενός χαρακτηριστικού.\n\
- - Απαλοιφή ενός χαρακτηριστικού.\n\
- R Χαρακτηριστικό αρχείου μόνο για ανάγνωση.\n\
- A Χαρακτηριστικό φύλαξης αρχείου.\n\
- S Χαρακτηριστικό αρχείου συστήματος.\n\
- H Χαρακτηριστικό κρυφού αρχείου.\n\
- /S Επεξεργασία των αρχείων που ταιριάζουν στον τρέχοντα κατάλογο\n\
- και σε όλους τους υποκαταλόγους.\n\
- /D Επεξεργασία καταλόγων επίσης.\n\n\
-Πληκτρολογήστε ATTRIB χωρίς παράμετρο, για να εμφανιστούν τα χαρακτηριστικά όλων των
αρχείων.\n"
STRING_ALIAS_HELP "Θέτει,αφαιρεί ή εμφανίζει τα aliases.\n\n\
ALIAS [alias=[εντολή]]\n\n\
alias Όνομα για το alias.\n\
diff --git a/base/shell/cmd/lang/en-US.rc b/base/shell/cmd/lang/en-US.rc
index 41f73af9a31..e0324bb8744 100644
--- a/base/shell/cmd/lang/en-US.rc
+++ b/base/shell/cmd/lang/en-US.rc
@@ -9,19 +9,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
- [/S [/D]]\n\n\
- + Sets an attribute\n\
- - Clears an attribute\n\
- R Read-only file attribute\n\
- A Archive file attribute\n\
- S System file attribute\n\
- H Hidden file attribute\n\
- /S Processes matching files in the current directory\n\
- and all subdirectories\n\
- /D Processes directories as well\n\n\
-Type ATTRIB without a parameter to display the attributes of all files.\n"
STRING_ALIAS_HELP "Sets, removes or shows aliases.\n\n\
ALIAS [alias=[command]]\n\n\
alias Name for an alias.\n\
diff --git a/base/shell/cmd/lang/es-ES.rc b/base/shell/cmd/lang/es-ES.rc
index d2767a4b254..2ca450e2436 100644
--- a/base/shell/cmd/lang/es-ES.rc
+++ b/base/shell/cmd/lang/es-ES.rc
@@ -11,19 +11,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Muestra o cambia los atributos de los archivos.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
- [/S [/D]]\n\n\
- + Añade un atributo\n\
- - Borra un atributo\n\
- R Atributo de sólo lectura\n\
- A Atributo de archivo\n\
- S Atributo de archivo de sistema\n\
- H Atributo de archivo oculto\n\
- /S Procesa los archivos coincidentes en el directorio actual \n\
- y sus subdirectorios\n\
- /D Procesa también los directorios\n\n\
-Type ATTRIB without a parameter to display the attributes of all files.\n"
STRING_ALIAS_HELP "Pone, borra o muestra los alias.\n\n\
ALIAS [alias=[command]]\n\n\
alias Nombre para un alias.\n\
diff --git a/base/shell/cmd/lang/fr-FR.rc b/base/shell/cmd/lang/fr-FR.rc
index 84b0c5ba837..09799ca373d 100644
--- a/base/shell/cmd/lang/fr-FR.rc
+++ b/base/shell/cmd/lang/fr-FR.rc
@@ -11,19 +11,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Affiche ou change des attributs de fichiers.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
- [/S [/D]]\n\n\
- + Positionne un attribut\n\
- - Enlève un attribut\n\
- R Fichier en lecture seule\n\
- A Fichier archive\n\
- S Fichier système\n\
- H Fichier caché\n\
- /S Traite les fichiers correspondants dans le répertoire courant\n\
- et tous les sous-répertoires\n\
- /D Traite également les répertoires\n\n\
-Taper ATTRIB sans paramètre pour afficher les attributs de tous les fichiers."
STRING_ALIAS_HELP "Positionne, enlève ou affiche les alias.\n\n\
ALIAS [alias=[commande]]\n\n\
alias Nom de l'alias.\n\
diff --git a/base/shell/cmd/lang/hu-HU.rc b/base/shell/cmd/lang/hu-HU.rc
index 8b91ff129e7..b984b99262c 100644
--- a/base/shell/cmd/lang/hu-HU.rc
+++ b/base/shell/cmd/lang/hu-HU.rc
@@ -11,19 +11,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Állományok attribútumok megjelenítése vagy
beállításai.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] állomány ...\n\
- [/S [/D]]\n\n\
- + bekapcsol egy attribútumot\n\
- - kikapcsol egy attribútumot\n\
- R Írásvédett állomány\n\
- A Archiválandó állomány\n\
- S Rendszer állomány\n\
- H Rejtett állomány\n\
- /S Minden állomány módosítása a mappában és minden\n\
- almappábanban\n\
- /D Mappákra is érvényesíti\n\n\
-Ha ATTRIB-ot paraméter nélkül írod be, megjeleníti a mappában található összes állományt
és annak attribútumát.\n"
STRING_ALIAS_HELP "Aliasok megjelenítése, hozzáadása és törlése\n\n\
ALIAS [alias=[parancs]]\n\n\
alias Alias neve.\n\
diff --git a/base/shell/cmd/lang/id-ID.rc b/base/shell/cmd/lang/id-ID.rc
index 58cc0a98cea..ffb62a078bd 100644
--- a/base/shell/cmd/lang/id-ID.rc
+++ b/base/shell/cmd/lang/id-ID.rc
@@ -11,19 +11,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Menampilkan atau mengubah atribut file.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
- [/S [/D]]\n\n\
- + Menyetel atribut\n\
- - Membersihkan atribut\n\
- R Atribut file Hanya-baca\n\
- A Atribut file Arsip\n\
- S Atribut file Sistem\n\
- H Atribut file Tersembunyi\n\
- /S Proses file yang sama dalam direktori dan semua subdirektori\n\
- saat ini\n\
- /D Proses direktori juga\n\n\
-Ketik ATTRIB tanpa parameter untuk menampilkan atribut dari semua file.\n"
STRING_ALIAS_HELP "Menyetel, menghapus atau menampilkan alias.\n\n\
ALIAS [alias=[command]]\n\n\
alias Nama untuk alias.\n\
diff --git a/base/shell/cmd/lang/it-IT.rc b/base/shell/cmd/lang/it-IT.rc
index 3677926a691..16b8cb84b55 100644
--- a/base/shell/cmd/lang/it-IT.rc
+++ b/base/shell/cmd/lang/it-IT.rc
@@ -9,19 +9,6 @@ assoc (mostra tutte le associazioni)\n\
assoc .ext (mostra una specifica associazione)\n\
assoc .ext= (rimuove una specifica associazione)\n\
assoc .ext=FileType (aggiung una associazione)\n"
- STRING_ATTRIB_HELP "Visualizza o modifica gli attributi dei file.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
- [/S [/D]]\n\n\
- + Attiva un attributo\n\
- - Toglie un attributo\n\
- R Attributo di file di sola lettura\n\
- A Attributo di file di archivio\n\
- S Attributo di file di sistema\n\
- H Attributo di file nascosto\n\
- /S Tratta i file indicati nella cartella corrente e in\n\
- tutte le sottocartelle\n\
- /D Tratta anche le cartelle\n\n\
-Scrivi ATTRIB senza parametri per visualizzare gli attributi di tutti i file.\n"
STRING_ALIAS_HELP "Attiva, toglie o visualizza gli alias.\n\n\
ALIAS [alias=[comando]]\n\n\
alias Nome dell'alias.\n\
diff --git a/base/shell/cmd/lang/ja-JP.rc b/base/shell/cmd/lang/ja-JP.rc
index 0064cccdb2a..16885267eab 100644
--- a/base/shell/cmd/lang/ja-JP.rc
+++ b/base/shell/cmd/lang/ja-JP.rc
@@ -9,19 +9,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "ファイル属性を表示または変更します。\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [ファイル] ...\n\
- [/S [/D]]\n\n\
- + 属性を設定します。\n\
- - 属性を解除します。\n\
- R 読みとり専用属性。\n\
- A アーカイブ属性。\n\
- S システム ファイル属性。\n\
- H 隠しファイル属性。\n\
- /S 現在のフォルダとすべてのサブフォルダの一致するファイルを\n\
- 処理します。\n\
- /D フォルダも処理します。\n\n\
-パラメータを指定しないで ATTRIB と入力すると、すべてのファイルの属性を表示します。\n"
STRING_ALIAS_HELP "エイリアスの設定や解除をしたり、エイリアスを表示したりします。\n\n\
ALIAS [エイリアス=[コマンド]]\n\n\
エイリアス エイリアスとしてつける名前。\n\
diff --git a/base/shell/cmd/lang/no-NO.rc b/base/shell/cmd/lang/no-NO.rc
index 09d284a6bb9..2d8f2930113 100644
--- a/base/shell/cmd/lang/no-NO.rc
+++ b/base/shell/cmd/lang/no-NO.rc
@@ -9,19 +9,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Viser eller endrer filattributtene.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
- [/S [/D]]\n\n\
- + Setter et attributt\n\
- - Fjerner et attributt\n\
- R Attributt: Skrivebeskyttet.\n\
- A Attributt: Arkiver.\n\
- S Attributt: System.\n\
- H Attributt: Skjult.\n\
- /S Behandler tilsvarende filer i gjeldende mappe\n\
- og alle undermapper.\n\
- /D Bearbeider også mapper.\n\n\
-Skriv ATTRIB uten parametere for å vise attributtene til alle filer.\n"
STRING_ALIAS_HELP "Setter, fjerner eller viser alias.\n\n\
ALIAS [alias=[Kommando]]\n\n\
alias Navn for et alias.\n\
diff --git a/base/shell/cmd/lang/pl-PL.rc b/base/shell/cmd/lang/pl-PL.rc
index e9f2d431d57..1e56fe86c69 100644
--- a/base/shell/cmd/lang/pl-PL.rc
+++ b/base/shell/cmd/lang/pl-PL.rc
@@ -18,19 +18,6 @@ assoc (wyświetla wszystkie skojarzenia)\n\
assoc .ext (wyświetla określone skojarzenie)\n\
assoc .ext= (usuwa określone skojarzenie)\n\
assoc .ext=typPliku (dodaje nowe skojarzenie)\n"
- STRING_ATTRIB_HELP "Wyświetla lub zmienia atrybuty plików.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] nazwa_pliku ...\n\
- [/S [/D]]\n\n\
- + Ustawia atrybut\n\
- - Czyści atrybut\n\
- R Atrybut pliku tylko do odczytu\n\
- A Atrybut pliku archiwalnego\n\
- S Atrybut pliku systemowego\n\
- H Atrybut pliku ukrytego\n\
- /S Przetwarza wszystkie, pasujące pliki w bieżącym katalogu\n\
- i we wszystkich podkatalogach\n\
- /D Przetwarza również katalogi\n\n\
-Wpisz ATTRIB bez żadnego parametru, by wyświetlić atrybuty wszystkich plików.\n"
STRING_ALIAS_HELP "Ustawia, usuwa, a także wyświetla aliasy.\n\n\
ALIAS [nazwa=[tekst]]\n\n\
nazwa Nazwa aliasu.\n\
diff --git a/base/shell/cmd/lang/ro-RO.rc b/base/shell/cmd/lang/ro-RO.rc
index c6c94bd5b01..3c83bbc2a2d 100644
--- a/base/shell/cmd/lang/ro-RO.rc
+++ b/base/shell/cmd/lang/ro-RO.rc
@@ -11,19 +11,6 @@ assoc (afișează toate asocierile)\n\
assoc .ext (afișează o anumită asociere)\n\
assoc .ext= (elimină o anumită asociere)\n\
assoc .ext=tip_fișier (adaugă o nouă asociere)\n"
- STRING_ATTRIB_HELP "Afișează sau modifică atributele de fișiere.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fișier ...\n\
- [/S [/D]]\n\n\
- + Consimte atributul\n\
- - Reprobă atributul\n\
- R Atributul fișierelor nemodificabile\n\
- A Atributul fișierelor arhivabile\n\
- S Atributul fișierelor de sistem\n\
- H Atributul fișierelor ascunse\n\
- /S Aplică și pentru fișierele din subdirectoare\n\
- /D Aplică și pentru directoare\n\n\
-Tastați ATTRIB fără argumente pentru afișarea atributelor pentru\n\
-toate fișierele.\n"
STRING_ALIAS_HELP "Instituie, destituie sau afișează alias.\n\n\
ALIAS [alias=[comandă]]\n\n\
alias Numele pentru alias.\n\
diff --git a/base/shell/cmd/lang/ru-RU.rc b/base/shell/cmd/lang/ru-RU.rc
index 00b83490228..bffa1f14800 100644
--- a/base/shell/cmd/lang/ru-RU.rc
+++ b/base/shell/cmd/lang/ru-RU.rc
@@ -11,19 +11,6 @@ assoc (вывести все ассоциации)\n\
assoc .ext (вывести выбранную ассоциацию)\n\
assoc .ext= (удалить ассоциацию)\n\
assoc .ext=FileType (добавить ассоциацию)\n"
- STRING_ATTRIB_HELP "Вывод и изменение атрибутов файлов.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
- [/S [/D]]\n\n\
- + Установка атрибута.\n\
- - Снятие атрибута.\n\
- R Атрибут ""Только чтение"".\n\
- A Атрибут ""Архивный"".\n\
- S Атрибут ""Системный"".\n\
- H Атрибут ""Скрытый"".\n\
- /S Обработка файлов с указанными именами в текущей папке\n\
- и во всех ее подпапках.\n\
- /D Обработка и файлов, и папок.\n\n\
-Команда ATTRIB без параметров выводит атрибуты всех файлов.\n"
STRING_ALIAS_HELP "Вывод, установка или удаление псевдонимов.\n\n\
ALIAS [псевдоним=[команда]]\n\n\
псевдоним Наименование псевдонима.\n\
diff --git a/base/shell/cmd/lang/sk-SK.rc b/base/shell/cmd/lang/sk-SK.rc
index affef298ced..641709f900d 100644
--- a/base/shell/cmd/lang/sk-SK.rc
+++ b/base/shell/cmd/lang/sk-SK.rc
@@ -15,19 +15,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
- [/S [/D]]\n\n\
- + Sets an attribute\n\
- - Clears an attribute\n\
- R Read-only file attribute\n\
- A Archive file attribute\n\
- S System file attribute\n\
- H Hidden file attribute\n\
- /S Processes matching files in the current directory\n\
- and all subdirectories\n\
- /D Processes directories as well\n\n\
-Type ATTRIB without a parameter to display the attributes of all files.\n"
STRING_ALIAS_HELP "Sets, removes or shows aliases.\n\n\
ALIAS [alias=[command]]\n\n\
alias Name for an alias.\n\
diff --git a/base/shell/cmd/lang/sq-AL.rc b/base/shell/cmd/lang/sq-AL.rc
index 9228fa8664b..38fc7c71173 100644
--- a/base/shell/cmd/lang/sq-AL.rc
+++ b/base/shell/cmd/lang/sq-AL.rc
@@ -13,19 +13,6 @@ assoc (shfaq të gjith asociacionet)\n\
assoc .ext (shfaq asociacionet specifike)\n\
assoc .ext= (hiq acosiacionet specifike)\n\
assoc .ext=FileType (shto asociacione te reja)\n"
- STRING_ATTRIB_HELP "Shfaq ose ndryshu atributet e dokumentave.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
- [/S [/D]]\n\n\
- + Vendos nje atribute\n\
- - Pastron një atribute\n\
- R Lexo-vetem atributet e dokumentave\n\
- A Atributet e dokumentave në arkiv\n\
- S Atributet e dokumentave të sistemit\n\
- H Atributet e dokumentave te fshehur\n\
- /S Procesi i përputhjes së dokumentave ne skedën aktuale\n\
- dhe të gjitha nënskedat\n\
- /D Proçeso skedat gjithashtu\n\n\
-Shkruaj ATTRIB pa një parameter për të shfaque atributet e të gjithë
dokumentave.\n"
STRING_ALIAS_HELP "Vëndos, hew ose shfaq pseudonimin.\n\n\
ALIAS [alias=[Komande]]\n\n\
alias Emri i pseudonimit.\n\
diff --git a/base/shell/cmd/lang/sv-SE.rc b/base/shell/cmd/lang/sv-SE.rc
index 3fde66adebb..ea59758eb0a 100644
--- a/base/shell/cmd/lang/sv-SE.rc
+++ b/base/shell/cmd/lang/sv-SE.rc
@@ -9,19 +9,6 @@ assoc (print all associations)\n\
assoc .ext (print specific association)\n\
assoc .ext= (remove specific association)\n\
assoc .ext=FileType (add new association)\n"
- STRING_ATTRIB_HELP "Visar eller ändrar filattributen.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
- [/S [/D]]\n\n\
- + Sätter ett attribut\n\
- - Rensar ett attribut\n\
- R Attribut: Skrivskyddad.\n\
- A Attribut: Arkiverad.\n\
- S Attribut: System.\n\
- H Attribut: Dold.\n\
- /S Behandlar matchande filer i den aktuella mappen\n\
- och alla undermappar.\n\
- /D Bearbetar även mappar.\n\n\
-Skriv ATTRIB utan parametrar för att visa attributten för alla filer.\n"
STRING_ALIAS_HELP "Sätter, tar bort eller visar alias.\n\n\
ALIAS [alias=[Kommando]]\n\n\
alias Namn på ett alias.\n\
diff --git a/base/shell/cmd/lang/tr-TR.rc b/base/shell/cmd/lang/tr-TR.rc
index aa37078bbaf..be6104a3e11 100644
--- a/base/shell/cmd/lang/tr-TR.rc
+++ b/base/shell/cmd/lang/tr-TR.rc
@@ -11,19 +11,6 @@ assoc (tüm ilişkilendirmeleri yazdır)\n\
assoc .uzn (belirtilen ilişkilendirmeyi yazdır)\n\
assoc .uzn= (belirtilen ilişkilendirmeyi sil)\n\
assoc .uzn=Kütük Türü (yeni ilişkilendirme ekle)\n"
- STRING_ATTRIB_HELP "Kütük öz niteliklerini görüntüler ya da değiştirir.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] kütük ...\n\
- [/S [/D]]\n\n\
- + Bir öz nitelik ayarlar\n\
- - Bir öz nitelik siler\n\
- R Yalnızca okunur kütük öz niteliği\n\
- A Belgelik kütük öz niteliği\n\
- S Dizge kütük öz niteliği\n\
- H Gizli kütük öz niteliği\n\
- /S Şimdiki dizindeki ve tüm alt dizinlerdeki kütükleri eşlemeyi yapar\n\
- /D Dizinleri de yap\n\n\
-Tüm kütüklerin öz niteliklerini görüntülemek için bir değişken olmadan ATTRIB\n\
-yazınız.\n"
STRING_ALIAS_HELP "Başka adları ayarlar, siler ya da gösterir.\n\n\
ALIAS [başka ad=[komut]]\n\n\
başka ad Bir başka ad için ad.\n\
diff --git a/base/shell/cmd/lang/uk-UA.rc b/base/shell/cmd/lang/uk-UA.rc
index db311b8633a..91054347780 100644
--- a/base/shell/cmd/lang/uk-UA.rc
+++ b/base/shell/cmd/lang/uk-UA.rc
@@ -17,19 +17,6 @@ assoc (друк всiх асоцiацiй)\n\
assoc .рош (друк вiдповiдної асоцiацiї)\n\
assoc .рош= (видалення вiдповiдної асоцiацiї)\n\
assoc .рош=ФайлТип (додати нову асоцiацiю)\n"
- STRING_ATTRIB_HELP "Відображення або зміна атрибутів файлу.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
- [/S [/D]]\n\n\
- + Встановлення атрибуту\n\
- - Зняття атрибуту\n\
- R Атрибут файлу ""Лише читання""\n\
- A Атрибут файлу ""Архiвний""\n\
- S Атрибут файлу ""Системний""\n\
- H Атрибут файлу ""Прихований""\n\
- /S Обробка файлiв зi вказаними iменами в поточнiй тецi\n\
- i у всіх її пiдтеках\n\
- /D Обробка також i тек\n\n\
-Введiть ATTRIB без параметра, щоб вивести атрибути всiх файлiв.\n"
STRING_ALIAS_HELP "Встановлення, видалення або показ псевдонiмiв.\n\n\
ALIAS [псевдонiм=[команда]]\n\n\
псевдонiм Iм'я псевдонiма.\n\
diff --git a/base/shell/cmd/lang/zh-CN.rc b/base/shell/cmd/lang/zh-CN.rc
index 3d2a62b254b..0ce1b121baa 100644
--- a/base/shell/cmd/lang/zh-CN.rc
+++ b/base/shell/cmd/lang/zh-CN.rc
@@ -11,18 +11,6 @@ assoc (输出所有文件关联)\n\
assoc .ext (输出指定的文件关联)\n\
assoc .ext= (删除指定的文件关联)\n\
assoc .ext=文件类型 (添加新的文件关联)\n"
- STRING_ATTRIB_HELP "显示或更改文件属性。\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 文件 ...\n\
- [/S [/D]]\n\n\
- + 设置一个属性\n\
- - 清除一个属性\n\
- R 只读属性\n\
- A 归档属性\n\
- S 系统属性\n\
- H 隐藏属性\n\
- /S 处理当前目录和所有子目录下的所有匹配文件\n\
- /D 同时处理目录\n\n\
-执行不带参数的 ATTRIB 将会显示所有文件的属性。\n"
STRING_ALIAS_HELP "设置、删除或显示别名。\n\n\
ALIAS [别名=[命令]]\n\n\
别名 别名的名称。\n\
diff --git a/base/shell/cmd/lang/zh-TW.rc b/base/shell/cmd/lang/zh-TW.rc
index 718affebf08..7a76081e272 100644
--- a/base/shell/cmd/lang/zh-TW.rc
+++ b/base/shell/cmd/lang/zh-TW.rc
@@ -12,18 +12,6 @@ assoc (輸出所有檔案關聯)\n\
assoc .ext (輸出指定的檔案關聯)\n\
assoc .ext= (刪除指定的檔案關聯)\n\
assoc .ext=檔案類型 (添加新的檔案關聯)\n"
- STRING_ATTRIB_HELP "顯示或更改檔案屬性。\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 檔案 ...\n\
- [/S [/D]]\n\n\
- + 設定一個屬性\n\
- - 清除一個屬性\n\
- R 只讀屬性\n\
- A 歸檔屬性\n\
- S 系統屬性\n\
- H 隱藏屬性\n\
- /S 處理當前目錄和所有子目錄下的所有匹配檔案\n\
- /D 同時處理目錄\n\n\
-執行不帶參數的 ATTRIB 將會顯示所有檔案的屬性。\n"
STRING_ALIAS_HELP "設定、刪除或顯示別名。\n\n\
ALIAS [別名=[命令]]\n\n\
別名 別名的名稱。\n\
diff --git a/base/shell/cmd/resource.h b/base/shell/cmd/resource.h
index 839787712d2..ff914ba1ddc 100644
--- a/base/shell/cmd/resource.h
+++ b/base/shell/cmd/resource.h
@@ -66,7 +66,6 @@
#define STRING_REPLACE_ERROR7 357
#define STRING_ASSOC_ERROR 358
-#define STRING_ATTRIB_HELP 600
#define STRING_ALIAS_HELP 601
#define STRING_BEEP_HELP 602
#define STRING_CALL_HELP 603