https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1bd330cd8141c8e82febc…
commit 1bd330cd8141c8e82febc797152f65d2519e5599
Author: Paweł Cholewa <DaMcpg(a)protonmail.com>
AuthorDate: Sun May 5 00:39:14 2019 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Tue May 14 20:37:38 2019 +0200
[FIND] Rewrite of the find utility. (#1553)
This commit contains a complete rewrite of find console utility.
The goal of it was to make the source code easier to maintain
and to add a missing feature (/offline switch).
Additional changes:
* now the program operates on Unicode strings;
* added conutils and shlwapi as program's libraries;
* added IDS_INVALID_SWITCH string into resources;
* modified IDS_USAGE string to include /offline switch
description.
https://ss64.com/nt/find.html was used for reference.
---
base/applications/cmdutils/find/CMakeLists.txt | 7 +-
base/applications/cmdutils/find/find.c | 427 +++++++++++++------------
base/applications/cmdutils/find/find.rc | 8 +-
base/applications/cmdutils/find/lang/bg-BG.rc | 14 +-
base/applications/cmdutils/find/lang/ca-ES.rc | 12 +-
base/applications/cmdutils/find/lang/cs-CZ.rc | 12 +-
base/applications/cmdutils/find/lang/de-DE.rc | 14 +-
base/applications/cmdutils/find/lang/el-GR.rc | 12 +-
base/applications/cmdutils/find/lang/en-US.rc | 12 +-
base/applications/cmdutils/find/lang/es-ES.rc | 12 +-
base/applications/cmdutils/find/lang/et-EE.rc | 12 +-
base/applications/cmdutils/find/lang/fr-FR.rc | 12 +-
base/applications/cmdutils/find/lang/it-IT.rc | 12 +-
base/applications/cmdutils/find/lang/lt-LT.rc | 12 +-
base/applications/cmdutils/find/lang/no-NO.rc | 12 +-
base/applications/cmdutils/find/lang/pl-PL.rc | 12 +-
base/applications/cmdutils/find/lang/pt-BR.rc | 12 +-
base/applications/cmdutils/find/lang/ro-RO.rc | 12 +-
base/applications/cmdutils/find/lang/ru-RU.rc | 4 +-
base/applications/cmdutils/find/lang/sk-SK.rc | 12 +-
base/applications/cmdutils/find/lang/sq-AL.rc | 12 +-
base/applications/cmdutils/find/lang/sv-SE.rc | 12 +-
base/applications/cmdutils/find/lang/tr-TR.rc | 12 +-
base/applications/cmdutils/find/lang/uk-UA.rc | 12 +-
base/applications/cmdutils/find/lang/zh-CN.rc | 12 +-
base/applications/cmdutils/find/lang/zh-TW.rc | 12 +-
base/applications/cmdutils/find/resource.h | 7 +-
27 files changed, 389 insertions(+), 332 deletions(-)
diff --git a/base/applications/cmdutils/find/CMakeLists.txt
b/base/applications/cmdutils/find/CMakeLists.txt
index 7431f5e17f6..1df4d1b98df 100644
--- a/base/applications/cmdutils/find/CMakeLists.txt
+++ b/base/applications/cmdutils/find/CMakeLists.txt
@@ -1,5 +1,8 @@
+include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
+
add_executable(find find.c find.rc)
-set_module_type(find win32cui)
-add_importlibs(find user32 msvcrt kernel32)
+set_module_type(find win32cui UNICODE)
+target_link_libraries(find conutils ${PSEH_LIB})
+add_importlibs(find user32 msvcrt kernel32 shlwapi)
add_cd_file(TARGET find DESTINATION reactos/system32 FOR all)
diff --git a/base/applications/cmdutils/find/find.c
b/base/applications/cmdutils/find/find.c
index 7121f5f7d61..66cb2ef6245 100644
--- a/base/applications/cmdutils/find/find.c
+++ b/base/applications/cmdutils/find/find.c
@@ -1,256 +1,263 @@
-/* find.c */
-
-/* Copyright (C) 1994-2002, Jim Hall <jhall(a)freedos.org> */
-
-/* Adapted for ReactOS */
-
/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-
-/* This program locates a string in a text file and prints those lines
- * that contain the string. Multiple files are clearly separated.
+ * PROJECT: ReactOS Find Command
+ * LICENSE: GPL-2.0-or-later (
https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE: Prints all lines of a file that contain a string.
+ * COPYRIGHT: Copyright 1994-2002 Jim Hall (jhall(a)freedos.org)
+ * Copyright 2019 Paweł Cholewa (DaMcpg(a)protonmail.com)
*/
+#include <windows.h>
#include <stdio.h>
-#include <stdlib.h>
-//#include <string.h>
-//#include <ctype.h>
-
-#include <windef.h>
-#include <winbase.h>
-#include <winuser.h>
-
-//#include <io.h>
-#include <dos.h>
+#include <conutils.h>
+#include <shlwapi.h> /* StrStrW and StrStrIW */
#include "resource.h"
-/* Symbol definition */
-#define MAX_STR 1024
-
-/* This function prints out all lines containing a substring. There are some
- * conditions that may be passed to the function.
+#define FIND_LINE_BUFFER_SIZE 4096
+
+static BOOL bInvertSearch = FALSE;
+static BOOL bCountLines = FALSE;
+static BOOL bDisplayLineNumbers = FALSE;
+static BOOL bIgnoreCase = FALSE;
+static BOOL bDoNotSkipOfflineFiles = FALSE;
+
+/**
+ * @name FindString
+ * @implemented
+ *
+ * Prints all lines of the stream that contain a string.
+ *
+ * @param pStream
+ * Stream to read from.
+ *
+ * @param szFilePath
+ * Filename to print in console. Can be NULL.
+ *
+ * @param szSearchedString
+ * String to search for.
+ *
+ * @return
+ * 0 if the string was found at least once, 1 otherwise.
*
- * RETURN: If the string was found at least once, returns 1.
- * If the string was not found at all, returns 0.
*/
-int
-find_str (char *sz, FILE *p, int invert_search,
- int count_lines, int number_output, int ignore_case)
+static int FindString(FILE* pStream, LPWSTR szFilePath, LPWSTR szSearchedString)
{
- int i, length;
- long line_number = 0, total_lines = 0;
- char *c, temp_str[MAX_STR], this_line[MAX_STR];
-
- /* Convert to upper if needed */
- if (ignore_case)
- {
- length = strlen (sz);
- for (i = 0; i < length; i++)
- sz[i] = toupper (sz[i]);
- }
+ WCHAR szLineBuffer[FIND_LINE_BUFFER_SIZE];
+ LONG lLineCount = 0;
+ LONG lLineNumber = 0;
+ BOOL bSubstringFound;
+ int iReturnValue = 1;
- /* Scan the file until EOF */
- while (fgets (temp_str, MAX_STR, p) != NULL)
+ if (szFilePath != NULL)
{
- /* Remove the trailing newline */
- length = strlen (temp_str);
- if (temp_str[length-1] == '\n')
- {
- temp_str[length-1] = '\0';
- }
+ /* Convert the filename to uppercase (for formatting) */
+ CharUpperW(szFilePath);
- /* Increment number of lines */
- line_number++;
- strcpy (this_line, temp_str);
+ /* Print the file's header */
+ ConPrintf(StdOut, L"\n---------- %s", szFilePath);
- /* Convert to upper if needed */
- if (ignore_case)
- {
- for (i = 0; i < length; i++)
- {
- temp_str[i] = toupper (temp_str[i]);
- }
- }
-
- /* Locate the substring */
+ if (bCountLines)
+ {
+ ConPrintf(StdOut, L": ");
+ }
+ else
+ {
+ ConPrintf(StdOut, L"\n");
+ }
+ }
- /* strstr() returns a pointer to the first occurrence in the
- string of the substring */
- c = strstr (temp_str, sz);
+ /* Loop through every line in the file */
+ while (fgetws(szLineBuffer, sizeof(szLineBuffer), pStream) != NULL)
+ {
+ lLineCount++;
- if ( ((invert_search) ? (c == NULL) : (c != NULL)) )
- {
- if (!count_lines)
- {
- if (number_output)
- printf ("%ld:", line_number);
+ if (bIgnoreCase)
+ {
+ bSubstringFound = StrStrIW(szLineBuffer, szSearchedString) != NULL;
+ }
+ else
+ {
+ bSubstringFound = StrStrW(szLineBuffer, szSearchedString) != NULL;
+ }
+
- /* Print the line of text */
- puts (this_line);
- }
+ /* Check if this line can be counted */
+ if (bSubstringFound != bInvertSearch)
+ {
+ iReturnValue = 0;
- total_lines++;
- } /* long if */
- } /* while fgets */
+ if (bCountLines)
+ {
+ lLineNumber++;
+ }
+ else
+ {
+ /* Display the line on the screen */
+ if (bDisplayLineNumbers)
+ {
+ ConPrintf(StdOut, L"[%ld]", lLineCount);
+ }
+ ConPrintf(StdOut, L"%s", szLineBuffer);
+ }
+ }
+ }
- if (count_lines)
+ if (bCountLines)
{
- /* Just show num. lines that contain the string */
- printf ("%ld\n", total_lines);
+ /* Print the matching line count */
+ ConPrintf(StdOut, L"%ld\n", lLineNumber);
+ }
+ else if (szFilePath != NULL && iReturnValue == 0)
+ {
+ /* Print a newline for formatting */
+ ConPrintf(StdOut, L"\n");
}
-
- /* RETURN: If the string was found at least once, returns 1.
- * If the string was not found at all, returns 0.
- */
- return (total_lines > 0 ? 1 : 0);
+ return iReturnValue;
}
-/* Show usage */
-void
-usage (void)
+int wmain(int argc, WCHAR* argv[])
{
- WCHAR wszUsage[4096];
- char oemUsage[4096];
+ int i;
+ int iReturnValue = 2;
+ int iSearchedStringIndex = -1;
- LoadStringW (GetModuleHandleW (NULL), IDS_USAGE, wszUsage, sizeof(wszUsage) /
sizeof(wszUsage[0]));
- CharToOemW (wszUsage, oemUsage);
- fputs (oemUsage, stdout);
-}
+ BOOL bFoundFileParameter = FALSE;
+ HANDLE hFindFileHandle;
+ WIN32_FIND_DATAW FindData;
-/* Main program */
-int
-main (int argc, char **argv)
-{
- char *opt, *needle = NULL;
- int ret = 0;
- WCHAR wszMessage[4096];
- char oemMessage[4096];
+ FILE* pOpenedFile;
- int invert_search = 0; /* flag to invert the search */
- int count_lines = 0; /* flag to whether/not count lines */
- int number_output = 0; /* flag to print line numbers */
- int ignore_case = 0; /* flag to be case insensitive */
+ ConInitStdStreams();
- FILE *pfile; /* file pointer */
- int hfind; /* search handle */
- struct _finddata_t finddata; /* _findfirst, filenext block */
+ if (argc == 1)
+ {
+ /* If no argument were provided by the user, display program usage and exit */
+ ConResPuts(StdOut, IDS_USAGE);
+ return 0;
+ }
- /* Scan the command line */
- while ((--argc) && (needle == NULL))
+ /* Parse the command line arguments */
+ for (i = 1; i < argc; i++)
{
- if (*(opt = *++argv) == '/')
+ /* Check if this argument contains a switch */
+ if (lstrlenW(argv[i]) == 2 && argv[i][0] == L'/')
{
- switch (opt[1])
- {
- case 'c':
- case 'C': /* Count */
- count_lines = 1;
- break;
-
- case 'i':
- case 'I': /* Ignore */
- ignore_case = 1;
- break;
-
- case 'n':
- case 'N': /* Number */
- number_output = 1;
- break;
-
- case 'v':
- case 'V': /* Not with */
- invert_search = 1;
- break;
-
- default:
- usage ();
- exit (2); /* syntax error .. return error 2 */
- break;
- }
+ switch (argv[i][1])
+ {
+ case L'?':
+ ConResPuts(StdOut, IDS_USAGE);
+ return 0;
+ case L'v':
+ case L'V':
+ bInvertSearch = TRUE;
+ break;
+ case L'c':
+ case L'C':
+ bCountLines = TRUE;
+ break;
+ case L'n':
+ case L'N':
+ bDisplayLineNumbers = TRUE;
+ break;
+ case L'i':
+ case L'I':
+ bIgnoreCase = TRUE;
+ break;
+ default:
+ /* Report invalid switch error */
+ ConResPuts(StdOut, IDS_INVALID_SWITCH);
+ return 2;
+ }
}
- else
+ else if (lstrlenW(argv[i]) > 2 && argv[i][0] == L'/')
{
- /* Get the string */
- if (needle == NULL)
- {
- /* Assign the string to find */
- needle = *argv;
- }
- }
- }
-
- /* Check for search string */
- if (needle == NULL)
- {
- /* No string? */
- usage ();
- exit (1);
+ /* Check if this parameter is /OFF or /OFFLINE */
+ if (lstrcmpiW(argv[i], L"/off") == 0 || lstrcmpiW(argv[i],
L"/offline") == 0)
+ {
+ bDoNotSkipOfflineFiles = TRUE;
+ }
+ else
+ {
+ /* Report invalid switch error */
+ ConResPuts(StdOut, IDS_INVALID_SWITCH);
+ return 2;
+ }
+ }
+ else
+ {
+ if (iSearchedStringIndex == -1)
+ {
+ iSearchedStringIndex = i;
+ }
+ else
+ {
+ /* There's a file specified in the parameters, no need to read from
stdin */
+ bFoundFileParameter = TRUE;
+ }
+ }
}
- /* Scan the files for the string */
- if (argc == 0)
+ if (iSearchedStringIndex == -1)
{
- ret = find_str (needle, stdin, invert_search, count_lines,
- number_output, ignore_case);
+ /* User didn't provide the string to search for, display program usage and
exit */
+ ConResPuts(StdOut, IDS_USAGE);
+ return 2;
}
- while (--argc >= 0)
+ if (bFoundFileParameter)
{
- hfind = _findfirst (*++argv, &finddata);
- if (hfind < 0)
- {
- /* We were not able to find a file. Display a message and
- set the exit status. */
- LoadStringW (GetModuleHandleW (NULL), IDS_NO_SUCH_FILE, wszMessage, sizeof(wszMessage)
/ sizeof(wszMessage[0]));
- CharToOemW (wszMessage, oemMessage);
- fprintf (stderr, oemMessage, *argv);
- }
- else
+ /* After the command line arguments were parsed, iterate through them again to
get the filenames */
+ for (i = 1; i < argc; i++)
{
- /* repeat find next file to match the filemask */
- do
+ /* If the value is a switch or the searched string, continue */
+ if ((lstrlenW(argv[i]) > 0 && argv[i][0] == L'/') || i ==
iSearchedStringIndex)
+ {
+ continue;
+ }
+
+ hFindFileHandle = FindFirstFileW(argv[i], &FindData);
+ if (hFindFileHandle == INVALID_HANDLE_VALUE)
{
- /* We have found a file, so try to open it */
- if ((pfile = fopen (finddata.name, "r")) != NULL)
- {
- printf ("---------------- %s\n", finddata.name);
- ret = find_str (needle, pfile, invert_search, count_lines,
- number_output, ignore_case);
- fclose (pfile);
- }
- else
- {
- LoadStringW (GetModuleHandleW (NULL), IDS_CANNOT_OPEN, wszMessage,
sizeof(wszMessage) / sizeof(wszMessage[0]));
- CharToOemW (wszMessage, oemMessage);
- fprintf (stderr, oemMessage,
- finddata.name);
+ ConResPrintf(StdOut, IDS_NO_SUCH_FILE, argv[i]);
+ continue;
+ }
+
+ do
+ {
+ /* Check if the file contains offline attribute and should be skipped */
+ if ((FindData.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE) &&
!bDoNotSkipOfflineFiles)
+ {
+ continue;
+ }
+
+ pOpenedFile = _wfopen(FindData.cFileName, L"r");
+ if (pOpenedFile == NULL)
+ {
+ ConResPrintf(StdOut, IDS_CANNOT_OPEN, FindData.cFileName);
+ continue;
}
- }
- while (_findnext(hfind, &finddata) > 0);
- }
- _findclose(hfind);
- } /* for each argv */
- /* RETURN: If the string was found at least once, returns 0.
- * If the string was not found at all, returns 1.
- * (Note that find_str.c returns the exact opposite values.)
- */
- exit ( (ret ? 0 : 1) );
+ if (FindString(pOpenedFile, FindData.cFileName,
argv[iSearchedStringIndex]) == 0)
+ {
+ iReturnValue = 0;
+ }
+ else if (iReturnValue != 0)
+ {
+ iReturnValue = 1;
+ }
+
+ fclose(pOpenedFile);
+ } while (FindNextFileW(hFindFileHandle, &FindData));
+
+ FindClose(hFindFileHandle);
+ }
+ }
+ else
+ {
+ FindString(stdin, NULL, argv[iSearchedStringIndex]);
+ }
+
+ return iReturnValue;
}
diff --git a/base/applications/cmdutils/find/find.rc
b/base/applications/cmdutils/find/find.rc
index 92b8ae4ab26..71239582b07 100644
--- a/base/applications/cmdutils/find/find.rc
+++ b/base/applications/cmdutils/find/find.rc
@@ -2,9 +2,9 @@
#include "resource.h"
-#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Find Command"
-#define REACTOS_STR_INTERNAL_NAME "find"
-#define REACTOS_STR_ORIGINAL_FILENAME "find.exe"
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Find Command"
+#define REACTOS_STR_INTERNAL_NAME "find"
+#define REACTOS_STR_ORIGINAL_FILENAME "find.exe"
#include <reactos/version.rc>
/* UTF-8 */
@@ -77,4 +77,4 @@
#endif
#ifdef LANGUAGE_ZH_TW
#include "lang/zh-TW.rc"
-#endif
\ No newline at end of file
+#endif
diff --git a/base/applications/cmdutils/find/lang/bg-BG.rc
b/base/applications/cmdutils/find/lang/bg-BG.rc
index 7f5950a4e06..f473225df28 100644
--- a/base/applications/cmdutils/find/lang/bg-BG.rc
+++ b/base/applications/cmdutils/find/lang/bg-BG.rc
@@ -2,12 +2,14 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
- IDS_USAGE "FIND: Извежда всички редове във файла, които съдържат указания
низ..\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""низ"" [ файл... ]\n\
- /C Брои колко реда съдържат низа\n\
- /I Пренебрегва ГлАвНОсТта\n\
- /N Брой показани редове, като се започва от 1\n\
- /V Извеждане на редовете, НЕсъдържащи низа."
+ IDS_USAGE "FIND: Извежда всички редове във файла, които съдържат указания
низ.\n\n\
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""низ"" [файл...]\n\
+ /V Извеждане на редовете, НЕсъдържащи низа.\n\
+ /C Брои колко реда съдържат низа.\n\
+ /N Брой показани редове, като се започва от 1.\n\
+ /I Пренебрегва ГлАвНОсТта.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Няма такъв файл\n"
IDS_CANNOT_OPEN "FIND: %s: Отварянето на файла е невъзможно\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/ca-ES.rc
b/base/applications/cmdutils/find/lang/ca-ES.rc
index ef2b62adeec..ddc84debb6d 100644
--- a/base/applications/cmdutils/find/lang/ca-ES.rc
+++ b/base/applications/cmdutils/find/lang/ca-ES.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_CATALAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Mostra totes les linies que continguin una determinada cadena
de caràcters.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""Cadena de caràcters"" [ file...
]\n\
- /C Conta el numero de linies que contenen la cadena de caràcters\n\
- /I Ignora majúscules i minúscules\n\
- /N Numero de linies mostrades, començant per la primera\n\
- /V Mostra les linies que no contenen la cadena de caràcters"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""Cadena de caràcters""
[file...]\n\
+ /V Mostra les linies que no contenen la cadena de caràcters.\n\
+ /C Conta el numero de linies que contenen la cadena de caràcters.\n\
+ /N Numero de linies mostrades, començant per la primera.\n\
+ /I Ignora majúscules i minúscules.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: No he trobat el fitxer\n"
IDS_CANNOT_OPEN "FIND: %s: No puc obrir el fitxer\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/cs-CZ.rc
b/base/applications/cmdutils/find/lang/cs-CZ.rc
index 97818900852..3553fdb38cb 100644
--- a/base/applications/cmdutils/find/lang/cs-CZ.rc
+++ b/base/applications/cmdutils/find/lang/cs-CZ.rc
@@ -9,11 +9,13 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Zobrazí všechny řádky souboru obsahující hledaný řetězec.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""řetězec"" [ soubor... ]\n\
- /C Zobrazí počet řádků obsahující řetězec.\n\
- /I Ignoruje velikost písmen.\n\
- /N Čísluje zobrazené řádky, začíná od 1.\n\
- /V Zobrazí všechny řádky, které NEobsahují zadaný řetěžec."
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""řetězec"" [soubor...]\n\
+ /V Zobrazí všechny řádky, které NEobsahují zadaný řetěžec.\n\
+ /C Zobrazí počet řádků obsahující řetězec.\n\
+ /N Čísluje zobrazené řádky, začíná od 1.\n\
+ /I Ignoruje velikost písmen.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: Soubor %s nebyl nalezen.\n"
IDS_CANNOT_OPEN "FIND: Soubor %s nelze otevřít!\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/de-DE.rc
b/base/applications/cmdutils/find/lang/de-DE.rc
index de8d09ea133..44ca8d33008 100644
--- a/base/applications/cmdutils/find/lang/de-DE.rc
+++ b/base/applications/cmdutils/find/lang/de-DE.rc
@@ -3,12 +3,14 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "Sucht in einer Datei nach einer Zeichenfolge.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""Zeichenfolge""\n\
- [[Laufwerk:][Pfad]Dateiname]]\n\
- /C Zeigt nur die Anzahl der die Zeichenfolge enthaltenen Zeilen an.\n\
- /I Ignoriert Groß-/Kleinbuchstaben bei der Suche.\n\
- /N Zeigt die Zeilen mit ihren Zeilennummern an.\n\
- /V Zeigt alle Zeilen an, die die Zeichenfolge NICHT enhalten."
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""Zeichenfolge""\n\
+ [[Laufwerk:][Pfad]Dateiname[ ...]]\n\
+ /V Zeigt alle Zeilen an, die die Zeichenfolge NICHT enhalten.\n\
+ /C Zeigt nur die Anzahl der die Zeichenfolge enthaltenen Zeilen an.\n\
+ /N Zeigt die Zeilen mit ihren Zeilennummern an.\n\
+ /I Ignoriert Groß-/Kleinbuchstaben bei der Suche.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "Datei %s nicht gefunden\n"
IDS_CANNOT_OPEN "Datei %s kann nicht geöffnet werden.\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/el-GR.rc
b/base/applications/cmdutils/find/lang/el-GR.rc
index 9bc2131d79e..8f700b6e3a2 100644
--- a/base/applications/cmdutils/find/lang/el-GR.rc
+++ b/base/applications/cmdutils/find/lang/el-GR.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Εκτυπώνει όλες τις γραμμές ενός αρχείου που περιέχουν ένα
αλφαριθμητικό.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""αλφαριθμητικό"" [ αρχείο...
]\n\
- /C Μέτρηση γραμμών που περιέχουν το αλφαριθμητικό\n\
- /I Αγνόηση κεφαλαίων\n\
- /N Εμφάνιση αριθμών στις εμφανιζόμενες γραμμές, ξεκινώντας από το 1\n\
- /V Εκτύπωση γραμμών που δεν περιέχουν το αλφαριθμητικό"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""αλφαριθμητικό""
[αρχείο...]\n\
+ /V Εκτύπωση γραμμών που δεν περιέχουν το αλφαριθμητικό.\n\
+ /C Μέτρηση γραμμών που περιέχουν το αλφαριθμητικό.\n\
+ /N Εμφάνιση αριθμών στις εμφανιζόμενες γραμμές, ξεκινώντας από το 1.\n\
+ /I Αγνόηση κεφαλαίων.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Δεν υπάρχει αυτό το αρχείο\n"
IDS_CANNOT_OPEN "FIND: %s: Δεν ήταν δυνατό το άνοιγμα του αρχείου\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/en-US.rc
b/base/applications/cmdutils/find/lang/en-US.rc
index d78b0267f62..06a00da0a82 100644
--- a/base/applications/cmdutils/find/lang/en-US.rc
+++ b/base/applications/cmdutils/find/lang/en-US.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Prints all lines of a file that contain a string.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""string"" [ file... ]\n\
- /C Count the number of lines that contain string\n\
- /I Ignore case\n\
- /N Number the displayed lines, starting at 1\n\
- /V Print lines that do not contain the string"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""string"" [file...]\n\
+ /V Print lines that do not contain the string.\n\
+ /C Count the number of lines that contain the string.\n\
+ /N Number the displayed lines, starting at 1.\n\
+ /I Ignore case.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: No such file\n"
IDS_CANNOT_OPEN "FIND: %s: Cannot open file\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/es-ES.rc
b/base/applications/cmdutils/find/lang/es-ES.rc
index ee65978dc45..14b736d5cf7 100644
--- a/base/applications/cmdutils/find/lang/es-ES.rc
+++ b/base/applications/cmdutils/find/lang/es-ES.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Imprime todas las líneas de un fichero que contiene una
cadena.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""cadena"" [ fichero... ]\n\
- /C Cuenta el número de líneas que contienen la cadena de caracteres\n\
- /I Ignora mayúsculas y minúsculas\n\
- /N Numero de líneas a mostrar en pantalla, a partir de la primera\n\
- /V Muestra las líneas que no contienen la cadena de caracteres."
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""cadena"" [fichero...]\n\
+ /V Muestra las líneas que no contienen la cadena de caracteres.\n\
+ /C Cuenta el número de líneas que contienen la cadena de caracteres.\n\
+ /N Numero de líneas a mostrar en pantalla, a partir de la primera.\n\
+ /I Ignora mayúsculas y minúsculas.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: No se encontró el fichero\n"
IDS_CANNOT_OPEN "FIND: %s: No se pudo abrir el fichero\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/et-EE.rc
b/base/applications/cmdutils/find/lang/et-EE.rc
index 6a6b28ed3cf..25cc068d6ef 100644
--- a/base/applications/cmdutils/find/lang/et-EE.rc
+++ b/base/applications/cmdutils/find/lang/et-EE.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_ESTONIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Trükib kõik read failist, mis sisaldavad stringi.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""string"" [ file... ]\n\
- /C Loenda arvuna stringi sisaldavaid ridu\n\
- /I Tõstutundetult\n\
- /N Nummerda kuvatud read alustades 1-st\n\
- /V Trüki read, mis ei sisalda stringi"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""string"" [file...]\n\
+ /V Trüki read, mis ei sisalda stringi.\n\
+ /C Loenda arvuna stringi sisaldavaid ridu.\n\
+ /N Nummerda kuvatud read alustades 1-st.\n\
+ /I Tõstutundetult.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Sellist faili ei leitud\n"
IDS_CANNOT_OPEN "FIND: %s: Ei saa faili avada\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/fr-FR.rc
b/base/applications/cmdutils/find/lang/fr-FR.rc
index 4a47d1f5540..36329a4ede5 100644
--- a/base/applications/cmdutils/find/lang/fr-FR.rc
+++ b/base/applications/cmdutils/find/lang/fr-FR.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Affiche toutes les lignes d'un fichier qui contiennent un
morceau de texte.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""texte"" [ fichier... ]\n\
- /C Compte le nombre de lignes qui contiennent le texte\n\
- /I Insensible à la casse\n\
- /N Numérote les lignes affichées en commençant à 1\n\
- /V Affiche les lignes qui ne contiennent pas le texte"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""texte"" [fichier...]\n\
+ /V Affiche les lignes qui ne contiennent pas le texte.\n\
+ /C Compte le nombre de lignes qui contiennent le texte.\n\
+ /N Numérote les lignes affichées en commençant à 1.\n\
+ /I Insensible à la casse.\n\
+ /OFF[LINE] Ne pas ignorer les fichiers ayant l'attribut hors-ligne."
IDS_NO_SUCH_FILE "FIND: %s : fichier inexistant\n"
IDS_CANNOT_OPEN "FIND: %s : impossible d'ouvrir le fichier\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/it-IT.rc
b/base/applications/cmdutils/find/lang/it-IT.rc
index 49d9b9d6e8c..ca1edaa69ff 100644
--- a/base/applications/cmdutils/find/lang/it-IT.rc
+++ b/base/applications/cmdutils/find/lang/it-IT.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Visualizza le linee di un file che contengono un stringa.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""stringa"" [ file... ]\n\
- /C Conta il numero di linee che contengono la stringa\n\
- /I Ignora maiuscole/minuscole\n\
- /N Numera le linee visualizzate a partire da 1\n\
- /V Visualizza le linee che non contengono la stringa"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""stringa"" [file...]\n\
+ /V Visualizza le linee che non contengono la stringa.\n\
+ /C Conta il numero di linee che contengono la stringa.\n\
+ /N Numera le linee visualizzate a partire da 1.\n\
+ /I Ignora maiuscole/minuscole.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: File non trovato\n"
IDS_CANNOT_OPEN "FIND: %s: Impossibile aprire il file\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/lt-LT.rc
b/base/applications/cmdutils/find/lang/lt-LT.rc
index 4c9426f5b54..2d95ccb4b8c 100644
--- a/base/applications/cmdutils/find/lang/lt-LT.rc
+++ b/base/applications/cmdutils/find/lang/lt-LT.rc
@@ -12,11 +12,13 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Spausdina visas bylos eilutes, kuriose yra ieškomas
tekstas.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""tekstas"" [ byla... ]\n\
- /C Skaičiuoti eilutes, kuriose yra ieškomas tekstas\n\
- /I Ignoruoti raidžių dydį\n\
- /N Numeruoti vaizduojamas eilutes, pradedant nuo 1\n\
- /V Spausdinti eilutes, kuriose nėra ieškomo teksto"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""tekstas"" [byla...]\n\
+ /V Spausdinti eilutes, kuriose nėra ieškomo teksto.\n\
+ /C Skaičiuoti eilutes, kuriose yra ieškomas tekstas.\n\
+ /N Numeruoti vaizduojamas eilutes, pradedant nuo 1.\n\
+ /I Ignoruoti raidžių dydį.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Tokios bylos nėra\n"
IDS_CANNOT_OPEN "FIND: %s: Nepavyko atverti bylos\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/no-NO.rc
b/base/applications/cmdutils/find/lang/no-NO.rc
index aabcb2b0d42..8638bf51405 100644
--- a/base/applications/cmdutils/find/lang/no-NO.rc
+++ b/base/applications/cmdutils/find/lang/no-NO.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "FINN: Skriv alle linjene for filen som inneholder en streng.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""streng"" [ fil... ]\n\
- /C Teller nummer av linjer som inneholder strenger\n\
- /I Ignorere sak\n\
- /N Nummer viste linjer, start med 1\n\
- /V Skriv linjer som ikke inneholder en streng"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""streng"" [fil...]\n\
+ /V Skriv linjer som ikke inneholder en streng.\n\
+ /C Teller nummer av linjer som inneholder strenger.\n\
+ /N Nummer viste linjer, start med 1.\n\
+ /I Ignorere sak.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FINN: %s: Ingen filer\n"
IDS_CANNOT_OPEN "FINN: %s: Kan ikke åpne filen\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/pl-PL.rc
b/base/applications/cmdutils/find/lang/pl-PL.rc
index bf10a5ecbc9..a108973d50e 100644
--- a/base/applications/cmdutils/find/lang/pl-PL.rc
+++ b/base/applications/cmdutils/find/lang/pl-PL.rc
@@ -11,11 +11,13 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Wyświetla wszystkie linie danego pliku, zawierające szukany
ciąg znaków.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""ciąg znaków"" [ plik... ]\n\
- /C Oblicza w ilu liniach pojawił się szukany ciąg znaków\n\
- /I Ignoruje wielkość liter\n\
- /N Numeruje wyświetlane linie, zaczynając od 1\n\
- /V Wyświetla te linie, które nie zawierają szukanego ciągu znaków"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""ciąg znaków"" [plik...]\n\
+ /V Wyświetla te linie, które nie zawierają szukanego ciągu znaków.\n\
+ /C Oblicza w ilu liniach pojawił się szukany ciąg znaków.\n\
+ /N Numeruje wyświetlane linie, zaczynając od 1.\n\
+ /I Ignoruje wielkość liter.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Plik nie został znaleziony\n"
IDS_CANNOT_OPEN "FIND: %s: Nie można otworzyć pliku\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/pt-BR.rc
b/base/applications/cmdutils/find/lang/pt-BR.rc
index d59bf5ca4e0..5ae45b35b89 100644
--- a/base/applications/cmdutils/find/lang/pt-BR.rc
+++ b/base/applications/cmdutils/find/lang/pt-BR.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Localiza uma seqüência de texto em um ou mais arquivos.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""seqüência"" [ arquivo... ]\n\
- /C Exibe apenas o número de linhas que contêm a seqüência.\n\
- /I Ignora maiúsculas/minúsculas ao localizar uma seqüência.\n\
- /N Exibe o número de cada linha, iniciando no 1.\n\
- /V Exibe todas as linhas que NÃO contêm a seqüência especificada."
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""seqüência"" [arquivo...]\n\
+ /V Exibe todas as linhas que NÃO contêm a seqüência especificada.\n\
+ /C Exibe apenas o número de linhas que contêm a seqüência.\n\
+ /N Exibe o número de cada linha, iniciando no 1.\n\
+ /I Ignora maiúsculas/minúsculas ao localizar uma seqüência.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Arquivo não encontrado\n"
IDS_CANNOT_OPEN "FIND: %s: Não foi possível abrir o arquivo\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/ro-RO.rc
b/base/applications/cmdutils/find/lang/ro-RO.rc
index 5b35622b1cb..2a953f347dc 100644
--- a/base/applications/cmdutils/find/lang/ro-RO.rc
+++ b/base/applications/cmdutils/find/lang/ro-RO.rc
@@ -11,11 +11,13 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Tipărește toate rândurile unui fișier ce conțin un șir.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""șir"" [ fișier... ]\n\
- /C Numără liniile ce conțin șirul.\n\
- /I Ignoră diferențele între majuscule și minuscule.\n\
- /N Numără rândurile afișate, începând cu 1.\n\
- /V Tipărește rândurile ce nu conțin șirul."
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""șir"" [fișier...]\n\
+ /V Tipărește rândurile ce nu conțin șirul.\n\
+ /C Numără liniile ce conțin șirul.\n\
+ /N Numără rândurile afișate, începând cu 1.\n\
+ /I Ignoră diferențele între majuscule și minuscule.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: Fișierul «%s» nu există!\n"
IDS_CANNOT_OPEN "FIND: Fișierul «%s» nu poate fi deschis!\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/ru-RU.rc
b/base/applications/cmdutils/find/lang/ru-RU.rc
index 347e3d1387c..83061e886c0 100644
--- a/base/applications/cmdutils/find/lang/ru-RU.rc
+++ b/base/applications/cmdutils/find/lang/ru-RU.rc
@@ -3,14 +3,16 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "Поиск текстовой строки в одном или нескольких файлах.\n\n\
-FIND [/V] [/C] [/N] [/I] ""строка"" [[диск:][путь]имя_файла[
...]]\n\
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""строка""
[[диск:][путь]имя_файла[ ...]]\n\
/V Вывод всех строк, НЕ содержащих заданную строку.\n\
/C Вывод только общего числа строк, содержащих заданную строку.\n\
/N Вывод номеров отображаемых строк.\n\
/I Поиск без учета регистра символов.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set.\n\
""строка"" Искомая строка.\n\
[диск:][путь]имя_файла\n\
Один или несколько файлов, в которых выполняется поиск."
IDS_NO_SUCH_FILE "FIND: %s: Файл не существует.\n"
IDS_CANNOT_OPEN "FIND: %s: Невозможно открыть файл.\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/sk-SK.rc
b/base/applications/cmdutils/find/lang/sk-SK.rc
index 4354eac9547..c6825a584fc 100644
--- a/base/applications/cmdutils/find/lang/sk-SK.rc
+++ b/base/applications/cmdutils/find/lang/sk-SK.rc
@@ -7,11 +7,13 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Zobrazí všetky riadky súboru obsahujúce hľadaný reťazec.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""reťazec"" [ súbor... ]\n\
- /C Zobrazí počet riadkov, ktoré obsahujú reťazec.\n\
- /I Ignoruje veľkosť písmen.\n\
- /N Čísluje zobrazené riadky, začína od 1.\n\
- /V Zobrazí všetky riadky, ktoré neobsahujú hľadaný reťazec."
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""reťazec"" [súbor...]\n\
+ /V Zobrazí všetky riadky, ktoré neobsahujú hľadaný reťazec.\n\
+ /C Zobrazí počet riadkov, ktoré obsahujú reťazec.\n\
+ /N Čísluje zobrazené riadky, začína od 1.\n\
+ /I Ignoruje veľkosť písmen.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: Súbor %s sa nenašiel.\n"
IDS_CANNOT_OPEN "FIND: Súbor %s sa nedá otvoriť.\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/sq-AL.rc
b/base/applications/cmdutils/find/lang/sq-AL.rc
index 0b1bc1aa645..6a010cccdd6 100644
--- a/base/applications/cmdutils/find/lang/sq-AL.rc
+++ b/base/applications/cmdutils/find/lang/sq-AL.rc
@@ -7,11 +7,13 @@ LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Printon të gjitha linjat e një skedari që përmbajnë një
fije.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""fije"" [ file... ]\n\
- /C Numërimi i numerave e linjave që përmbajnë nje fije\n\
- /I Injorojnë çështjen\n\
- /N Shfaq numrin e linjave, duke filluar nga 1\n\
- /V Shfaq linjat e nuk permbajne nje fije"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""fije"" [file...]\n\
+ /V Shfaq linjat e nuk permbajne nje fije.\n\
+ /C Numërimi i numerave e linjave që përmbajnë nje fije.\n\
+ /N Shfaq numrin e linjave, duke filluar nga 1.\n\
+ /I Injorojnë çështjen.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Dokumenti nuk i gjet\n"
IDS_CANNOT_OPEN "FIND: %s: E pamundur te hapet dokumenti\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/sv-SE.rc
b/base/applications/cmdutils/find/lang/sv-SE.rc
index 329a597bb6f..94d3c97410b 100644
--- a/base/applications/cmdutils/find/lang/sv-SE.rc
+++ b/base/applications/cmdutils/find/lang/sv-SE.rc
@@ -3,11 +3,13 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Skriver ut alla rader i en fil som innehåller en sträng.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""sträng"" [ fil... ]\n\
- /C Räkna antalet rader som innehåller en strängen\n\
- /I Ignorera skiftläge\n\
- /N Antal visade rader, börjar på 1\n\
- /V Skriver ut rader som inte innehåller strängen"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""sträng"" [fil...]\n\
+ /V Skriver ut rader som inte innehåller strängen.\n\
+ /C Räkna antalet rader som innehåller en strängen.\n\
+ /N Antal visade rader, börjar på 1.\n\
+ /I Ignorera skiftläge.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Ingen sorts fil\n"
IDS_CANNOT_OPEN "FIND: %s: Kan inte öppna filen\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/tr-TR.rc
b/base/applications/cmdutils/find/lang/tr-TR.rc
index fd2c8a71e30..a97c4571df5 100644
--- a/base/applications/cmdutils/find/lang/tr-TR.rc
+++ b/base/applications/cmdutils/find/lang/tr-TR.rc
@@ -5,11 +5,13 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Bir dizgi içeren bir kütüğün tüm yataçlarını yazdırır.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""dizgi"" [ kütük... ]\n\
- /C Dizgi içeren yataç sayısını say\n\
- /I Büyük-küçük harfliği yok say\n\
- /N 1'den başlayan, görüntülenen yataç sayısı\n\
- /V Dizgi içermeyen yataçları yazdır"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""dizgi"" [kütük...]\n\
+ /V Dizgi içermeyen yataçları yazdır.\n\
+ /C Dizgi içeren yataç sayısını say.\n\
+ /N 1'den başlayan, görüntülenen yataç sayısı.\n\
+ /I Büyük-küçük harfliği yok say.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Böyle dosya yok\n"
IDS_CANNOT_OPEN "FIND: %s: Kütük açılamıyor\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/uk-UA.rc
b/base/applications/cmdutils/find/lang/uk-UA.rc
index 82e57043b76..7e7643d0a24 100644
--- a/base/applications/cmdutils/find/lang/uk-UA.rc
+++ b/base/applications/cmdutils/find/lang/uk-UA.rc
@@ -11,11 +11,13 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Виведення всіх рядків файлу, які містять рядок.\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""рядок"" [ файл... ]\n\
- /C Порахувати кількість рядків, які містять рядок\n\
- /I Не враховувати регістр символів\n\
- /N Нумерувати рядки, які відображаються (починаючи з 1)\n\
- /V Виведення рядків, які не містять заданий рядок"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""рядок"" [файл...]\n\
+ /V Виведення рядків, які не містять заданий рядок.\n\
+ /C Порахувати кількість рядків, які містять рядок.\n\
+ /N Нумерувати рядки, які відображаються (починаючи з 1).\n\
+ /I Не враховувати регістр символів.\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: Файл не існує\n"
IDS_CANNOT_OPEN "FIND: %s: Неможливо відкрити файл\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/zh-CN.rc
b/base/applications/cmdutils/find/lang/zh-CN.rc
index 4e394e8b74b..e3822f89a3d 100644
--- a/base/applications/cmdutils/find/lang/zh-CN.rc
+++ b/base/applications/cmdutils/find/lang/zh-CN.rc
@@ -5,11 +5,13 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
STRINGTABLE
BEGIN
IDS_USAGE "FIND: 输出某文件中包含指定字符串的所有行。\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""字符串"" [ 文件... ]\n\
- /C 计算包含该字符串的行数\n\
- /I 忽略大小写\n\
- /N 从 1 开始为显示的行编号\n\
- /V 输出不包含该指定字符串的行"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""字符串"" [文件...]\n\
+ /V 输出不包含该指定字符串的行。\n\
+ /C 计算包含该字符串的行数。\n\
+ /N 从 1 开始为显示的行编号。\n\
+ /I 忽略大小写。\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: 没有这个文件\n"
IDS_CANNOT_OPEN "FIND: %s: 无法打开文件\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/lang/zh-TW.rc
b/base/applications/cmdutils/find/lang/zh-TW.rc
index 55d618bf5c8..cd2c7b859d3 100644
--- a/base/applications/cmdutils/find/lang/zh-TW.rc
+++ b/base/applications/cmdutils/find/lang/zh-TW.rc
@@ -5,11 +5,13 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
STRINGTABLE
BEGIN
IDS_USAGE "FIND: 輸出某檔中包含指定字串的所有行。\n\n\
- FIND [ /C ] [ /I ] [ /N ] [ /V ] ""字串"" [ 文件... ]\n\
- /C 計算包含該字串的行數\n\
- /I 忽略大小寫\n\
- /N 從 1 開始為顯示的行編號\n\
- /V 輸出不包含該指定字串的行"
+FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] ""字串"" [文件...]\n\
+ /V 輸出不包含該指定字串的行。\n\
+ /C 計算包含該字串的行數。\n\
+ /N 從 1 開始為顯示的行編號。\n\
+ /I 忽略大小寫。\n\
+ /OFF[LINE] Do not skip files that have the offline attribute set."
IDS_NO_SUCH_FILE "FIND: %s: 沒有這個檔\n"
IDS_CANNOT_OPEN "FIND: %s: 無法開啟檔\n"
+ IDS_INVALID_SWITCH "FIND: Invalid switch\n"
END
diff --git a/base/applications/cmdutils/find/resource.h
b/base/applications/cmdutils/find/resource.h
index 99e8f2d0472..2dba86fc14e 100644
--- a/base/applications/cmdutils/find/resource.h
+++ b/base/applications/cmdutils/find/resource.h
@@ -1,5 +1,6 @@
#pragma once
-#define IDS_USAGE 1000
-#define IDS_NO_SUCH_FILE 1001
-#define IDS_CANNOT_OPEN 1002
+#define IDS_USAGE 1000
+#define IDS_NO_SUCH_FILE 1001
+#define IDS_CANNOT_OPEN 1002
+#define IDS_INVALID_SWITCH 1003