diff --git a/reactos/base/applications/applications.rbuild b/reactos/base/applications/applications.rbuild
index 232b44c0868..0a1265ce571 100644
--- a/reactos/base/applications/applications.rbuild
+++ b/reactos/base/applications/applications.rbuild
@@ -22,6 +22,9 @@
+
+
+
diff --git a/reactos/base/applications/findstr/findstr.c b/reactos/base/applications/findstr/findstr.c
new file mode 100644
index 00000000000..681bff7ee53
--- /dev/null
+++ b/reactos/base/applications/findstr/findstr.c
@@ -0,0 +1,295 @@
+/* findstr.c */
+
+/* Copyright (C) 1994-2002, Jim Hall */
+
+/* Adapted for ReactOS -Edited for Findstr.exe K'Williams */
+
+/*
+ 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.
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#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.
+ *
+ * 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, int at_start, int literal_search,
+ int at_end, int reg_express, int exact_match, int sub_dirs, int only_fname)
+{
+ 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]);
+ }
+
+ /* Scan the file until EOF */
+ while (fgets (temp_str, MAX_STR, p) != NULL)
+ {
+ /* Remove the trailing newline */
+ length = strlen (temp_str);
+ if (temp_str[length-1] == '\n')
+ {
+ temp_str[length-1] = '\0';
+ }
+
+ /* Increment number of lines */
+ line_number++;
+ strcpy (this_line, temp_str);
+
+ /* Convert to upper if needed */
+ if (ignore_case)
+ {
+ for (i = 0; i < length; i++)
+ {
+ temp_str[i] = toupper (temp_str[i]);
+ }
+ }
+
+ /* Locate the substring */
+
+ /* strstr() returns a pointer to the first occurrence in the
+ string of the substring */
+ c = strstr (temp_str, sz);
+
+ if ( ((invert_search) ? (c == NULL) : (c != NULL)) )
+ {
+ if (!count_lines)
+ {
+ if (number_output)
+ printf ("%ld:", line_number);
+
+ /* Print the line of text */
+ puts (this_line);
+ }
+
+ total_lines++;
+ } /* long if */
+ } /* while fgets */
+
+ if (count_lines)
+ {
+ /* Just show num. lines that contain the string */
+ printf ("%ld\n", total_lines);
+ }
+
+
+ /* 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);
+}
+
+/* Show usage */
+void
+usage (void)
+{
+ TCHAR lpUsage[4096];
+
+ LoadString( GetModuleHandle(NULL), IDS_USAGE, (LPTSTR)lpUsage, 4096);
+ CharToOem(lpUsage, lpUsage);
+ printf( lpUsage );
+}
+
+
+/* Main program */
+int
+main (int argc, char **argv)
+{
+ char *opt, *needle = NULL;
+ int ret = 0;
+ TCHAR lpMessage[4096];
+
+ 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 */
+ int at_start = 0; /* flag to Match if at the beginning of a line. */
+ int at_end = 0; /* flag to Match if at the beginning of a line. */
+ int reg_express = 0; /* flag to use/not use regular expressions */
+ int exact_match = 0; /* flag to be exact match */
+ int sub_dirs= 0; /* this and all subdirectories */
+ int only_fname= 0; /* print only the name of the file*/
+ int literal_search=0;
+
+ FILE *pfile; /* file pointer */
+ int hfind; /* search handle */
+ struct _finddata_t finddata; /* _findfirst, filenext block */
+
+ /* Scan the command line */
+ while ((--argc) && (needle == NULL))
+ {
+ if (*(opt = *++argv) == '/')
+ {
+ switch (opt[1])
+ {
+ case 'b':
+ case 'B': /* Matches pattern if at the beginning of a line */
+ at_start = 1;
+ break;
+
+ //case 'c':
+ //case 'C': /* Literal? */
+ // literal_search = 1;
+ // break;
+
+ case 'e':
+ case 'E': /* matches pattern if at end of line */
+ at_end = 1;
+ break;
+
+ case 'i':
+ case 'I': /* Ignore */
+ ignore_case = 1;
+ break;
+
+ case 'm':
+ case 'M': /* only filename */
+ only_fname = 1;
+ break;
+
+ case 'n':
+ case 'N': /* Number */
+ number_output = 1;
+ break;
+
+ case 'r':
+ case 'R': /* search strings as regular expressions */
+ reg_express = 1;
+ break;
+
+ case 's':
+ case 'S': /* search files in child directory too*/
+ sub_dirs = 1;
+ break;
+
+ case 'v':
+ case 'V': /* Not with */
+ invert_search = 1;
+ break;
+
+ case 'x':
+ case 'X': /* exact match */
+ exact_match = 1;
+ break;
+
+ default:
+ usage ();
+ exit (2); /* syntax error .. return error 2 */
+ break;
+ }
+ }
+ else
+ {
+ /* 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);
+ }
+
+ /* Scan the files for the string */
+ if (argc == 0)
+ {
+ ret = find_str (needle, stdin, invert_search, count_lines,
+ number_output, ignore_case, at_start, literal_search, at_end, reg_express, exact_match,
+ sub_dirs, only_fname);
+ }
+
+ while (--argc >= 0)
+ {
+ hfind = _findfirst (*++argv, &finddata);
+ if (hfind < 0)
+ {
+ /* We were not able to find a file. Display a message and
+ set the exit status. */
+ LoadString( GetModuleHandle(NULL), IDS_NO_SUCH_FILE, (LPTSTR)lpMessage, 4096);
+ CharToOem(lpMessage, lpMessage);
+ fprintf (stderr, lpMessage, *argv);//
+ }
+ else
+ {
+ /* repeat find next file to match the filemask */
+ do
+ {
+ /* 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, at_start, literal_search, at_end, reg_express, exact_match,
+ sub_dirs, only_fname);
+ fclose (pfile);
+ }
+ else
+ {
+ LoadString(GetModuleHandle(NULL), IDS_CANNOT_OPEN, (LPTSTR)lpMessage, 4096);
+ CharToOem(lpMessage, lpMessage);
+ fprintf (stderr, lpMessage,
+ finddata.name);
+ }
+ }
+ 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) );
+}
+
+
diff --git a/reactos/base/applications/findstr/findstr.rbuild b/reactos/base/applications/findstr/findstr.rbuild
new file mode 100644
index 00000000000..64306e39df8
--- /dev/null
+++ b/reactos/base/applications/findstr/findstr.rbuild
@@ -0,0 +1,8 @@
+
+
+
+ user32
+ findstr.c
+ findstr.rc
+ rsrc.rc
+
diff --git a/reactos/base/applications/findstr/findstr.rc b/reactos/base/applications/findstr/findstr.rc
new file mode 100644
index 00000000000..8d50fbaa345
--- /dev/null
+++ b/reactos/base/applications/findstr/findstr.rc
@@ -0,0 +1,6 @@
+#define REACTOS_STR_FILE_DESCRIPTION "W32 findstr command\0"
+#define REACTOS_STR_INTERNAL_NAME "findstr\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "findstr.exe\0"
+#include
+
+#include "rsrc.rc"
diff --git a/reactos/base/applications/findstr/lang/bg-BG.rc b/reactos/base/applications/findstr/lang/bg-BG.rc
new file mode 100644
index 00000000000..3f7cd7fde86
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/bg-BG.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+BEGIN
+
+IDS_USAGE, "FIND: Èçâåæäà âñè÷êè ðåäîâå âúâ ôàéëà, êîèòî ñúäúðæàò óêàçàíèÿ íèç..\n\n\
+ FIND [ /C ] [ /I ] [ /N ] [ /V ] \"íèç\" [ ôàéë... ]\n\
+ /C Áðîè êîëêî ðåäà ñúäúðæàò íèçà\n\
+ /I Ïðåíåáðåãâà ÃëÀâÍÎñÒòà\n\
+ /N Áðîé ïîêàçàíè ðåäîâå, êàòî ñå çàïî÷âà îò 1\n\
+ /V Èçâåæäàíå íà ðåäîâåòå, ÍÅñúäúðæàùè íèçà."
+
+IDS_NO_SUCH_FILE, "FIND: %s: Íÿìà òàêúâ ôàéë\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: Îòâàðÿíåòî íà ôàéëà å íåâúçìîæíî\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/ca-ES.rc b/reactos/base/applications/findstr/lang/ca-ES.rc
new file mode 100644
index 00000000000..932d4bc06bc
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/ca-ES.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_CATALAN, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+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"
+
+IDS_NO_SUCH_FILE, "FIND: %s: No he trobat el fitxer\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: No puc obrir el fitxer\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/cs-CZ.rc b/reactos/base/applications/findstr/lang/cs-CZ.rc
new file mode 100644
index 00000000000..8a41024c73b
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/cs-CZ.rc
@@ -0,0 +1,23 @@
+/* FILE: applications/cmdutils/find/lang/cs-CZ.rc
+ * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
+ * THANKS TO: Mario Kacmar aka Kario (kario@szm.sk)
+ * UPDATED: 2008-02-29
+ */
+
+LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+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."
+
+IDS_NO_SUCH_FILE, "FIND: Soubor %s nebyl nalezen.\n"
+
+IDS_CANNOT_OPEN, "FIND: Soubor %s nelze otevøít!\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/de-DE.rc b/reactos/base/applications/findstr/lang/de-DE.rc
new file mode 100644
index 00000000000..1663cc7aff7
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/de-DE.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+BEGIN
+
+IDS_USAGE, "Sucht in einer Datei nach einer Zeichenfolge.\n\n\
+ FIND [ /C ] [ /I ] [ /N ] [ /V ] \"string\" [ file... ]\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."
+
+IDS_NO_SUCH_FILE, "Datei %s nicht gefunden\n"
+
+IDS_CANNOT_OPEN, "Datei %s kann nicht geöffnet werden.\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/el-GR.rc b/reactos/base/applications/findstr/lang/el-GR.rc
new file mode 100644
index 00000000000..19e993dda46
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/el-GR.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+BEGIN
+
+IDS_USAGE, "FIND: Åêôõðþíåé üëåò ôéò ãñáììÝò åíüò áñ÷åßïõ ðïõ ðåñéÝ÷ïõí Ýíá áëöáñéèìçôéêü.\n\n\
+ FIND [ /C ] [ /I ] [ /N ] [ /V ] \"áëöáñéèìçôéêü\" [ áñ÷åßï... ]\n\
+ /C ÌÝôñçóç ãñáììþí ðïõ ðåñéÝ÷ïõí ôï áëöáñéèìçôéêü\n\
+ /I Áãíüçóç êåöáëáßùí\n\
+ /N ÅìöÜíéóç áñéèìþí óôéò åìöáíéæüìåíåò ãñáììÝò, îåêéíþíôáò áðü ôï 1\n\
+ /V Åêôýðùóç ãñáììþí ðïõ äåí ðåñéÝ÷ïõí ôï áëöáñéèìçôéêü"
+
+IDS_NO_SUCH_FILE, "FIND: %s: Äåí õðÜñ÷åé áõôü ôï áñ÷åßï\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: Äåí Þôáí äõíáôü ôï Üíïéãìá ôïõ áñ÷åßïõ\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/en-US.rc b/reactos/base/applications/findstr/lang/en-US.rc
new file mode 100644
index 00000000000..d4ebfe38d53
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/en-US.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+STRINGTABLE DISCARDABLE
+BEGIN
+
+IDS_USAGE, "FINDSTR: 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"
+
+IDS_NO_SUCH_FILE, "FINDSTR: %s: No such file\n"
+
+IDS_CANNOT_OPEN, "FINDSTR: %s: Cannot open file\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/es-ES.rc b/reactos/base/applications/findstr/lang/es-ES.rc
new file mode 100644
index 00000000000..f2fee3f0a4b
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/es-ES.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+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."
+
+IDS_NO_SUCH_FILE, "FIND: %s: No se encontró el fichero\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: No se pudo abrir el fichero\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/fr-FR.rc b/reactos/base/applications/findstr/lang/fr-FR.rc
new file mode 100644
index 00000000000..076f0930177
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/fr-FR.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+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"
+
+IDS_NO_SUCH_FILE, "FIND: %s : fichier inexistant\n"
+
+IDS_CANNOT_OPEN, "FIND: %s : impossible d'ouvrir le fichier\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/it-IT.rc b/reactos/base/applications/findstr/lang/it-IT.rc
new file mode 100644
index 00000000000..d0dabd405f2
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/it-IT.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+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"
+
+IDS_NO_SUCH_FILE, "FIND: %s: File non trovato\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: Impossibile aprire il file\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/lt-LT.rc b/reactos/base/applications/findstr/lang/lt-LT.rc
new file mode 100644
index 00000000000..ce5b86af08a
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/lt-LT.rc
@@ -0,0 +1,26 @@
+/*
+ * PROJECT: ReactOS find command
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: base/applications/cmdutils/find/lang/lt-LT.rc
+ * PURPOSE: Lithuanian Language File
+ * TRANSLATOR: Vytis "CMan" Girdþijauskas (cman@cman.us)
+ * DATE: 2007-09-23
+ */
+
+LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+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"
+
+IDS_NO_SUCH_FILE, "FIND: %s: Tokios bylos nëra\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: Nepavyko atverti bylos\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/no-NO.rc b/reactos/base/applications/findstr/lang/no-NO.rc
new file mode 100644
index 00000000000..d564684f86f
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/no-NO.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+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"
+
+IDS_NO_SUCH_FILE, "FINN: %s: Ingen filer\n"
+
+IDS_CANNOT_OPEN, "FINN: %s: Kan ikke åpne filen\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/pl-PL.rc b/reactos/base/applications/findstr/lang/pl-PL.rc
new file mode 100644
index 00000000000..744623e2aa4
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/pl-PL.rc
@@ -0,0 +1,24 @@
+/*
+ * translated by Caemyr - Olaf Siejka (Dec,2007)
+ * Use ReactOS forum PM or IRC to contact me
+ * http://www.reactos.org
+ * IRC: irc.freenode.net #reactos-pl
+ */
+
+LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+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"
+
+IDS_NO_SUCH_FILE, "FIND: %s: Plik nie zosta³ znaleziony\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: Nie mo¿na otworzyæ pliku\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/pt-BR.rc b/reactos/base/applications/findstr/lang/pt-BR.rc
new file mode 100644
index 00000000000..de6342b71b3
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/pt-BR.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+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."
+
+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"
+
+END
diff --git a/reactos/base/applications/findstr/lang/ru-RU.rc b/reactos/base/applications/findstr/lang/ru-RU.rc
new file mode 100644
index 00000000000..94594f56770
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/ru-RU.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+BEGIN
+
+IDS_USAGE, "FIND: Ïîèñê òåêñòîâîé ñòðîêè â îäíîì èëè íåñêîëüêèõ ôàéëàõ.\n\n\
+ FIND [ /C ] [ /I ] [ /N ] [ /V ] \"ñòðîêà\" [ ôàéë... ]\n\
+ /C Âûâîä òîëüêî îáùåãî ÷èñëà ñòðîê, ñîäåðæàùèõ çàäàííóþ ñòðîêó.\n\
+ /I Ïîèñê áåç ó÷åòà ðåãèñòðà ñèìâîëîâ.\n\
+ /N Âûâîä íîìåðîâ îòîáðàæàåìûõ ñòðîê (íà÷èíàÿ ñ 1).\n\
+ /V Âûâîä âñåõ ñòðîê, ÍÅ ñîäåðæàùèõ çàäàííóþ ñòðîêó."
+
+IDS_NO_SUCH_FILE, "FIND: %s: Ôàéë íå ñóùåñòâóåò.\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: Íåâîçìîæíî îòêðûòü ôàéë.\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/sk-SK.rc b/reactos/base/applications/findstr/lang/sk-SK.rc
new file mode 100644
index 00000000000..93037288a93
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/sk-SK.rc
@@ -0,0 +1,21 @@
+/* TRANSLATOR: M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
+ * DATE OF TR: 12-02-2008
+ */
+
+LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+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."
+
+IDS_NO_SUCH_FILE, "FIND: S£bor %s sa nenaçiel.\n"
+
+IDS_CANNOT_OPEN, "FIND: S£bor %s sa ned otvoriœ.\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/sv-SE.rc b/reactos/base/applications/findstr/lang/sv-SE.rc
new file mode 100644
index 00000000000..e8d0d6eefdc
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/sv-SE.rc
@@ -0,0 +1,17 @@
+LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+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 nummren av linjer 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"
+
+IDS_NO_SUCH_FILE, "FIND: %s: Ingen sorts fil\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: Kan inte öppna filen\n"
+
+END
diff --git a/reactos/base/applications/findstr/lang/uk-UA.rc b/reactos/base/applications/findstr/lang/uk-UA.rc
new file mode 100644
index 00000000000..b7df8b4e635
--- /dev/null
+++ b/reactos/base/applications/findstr/lang/uk-UA.rc
@@ -0,0 +1,25 @@
+/*
+ * PROJECT: Find
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: base/applications/cmdutils/find/lang/uk-UA.rc
+ * PURPOSE: Ukraianian Language File for find
+ * TRANSLATOR: Artem Reznikov
+ */
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+STRINGTABLE DISCARDABLE
+BEGIN
+
+IDS_USAGE, "FIND: Âèâåäåííÿ âñ³õ ðÿäê³â ôàéëó, ÿê³ ì³ñòÿòü ðÿäîê.\n\n\
+ FIND [ /C ] [ /I ] [ /N ] [ /V ] \"ðÿäîê\" [ ôàéë... ]\n\
+ /C Ïîðàõóâàòè ê³ëüê³ñòü ðÿäê³â, ÿê³ ì³ñòÿòü ðÿäîê\n\
+ /I Íå âðàõîâóâàòè ðåã³ñòð ñèìâîë³â\n\
+ /N Íóìåðóâàòè ðÿäêè, ÿê³ â³äîáðàæàþòüñÿ (ïî÷èíàþ÷è ç 1)\n\
+ /V Âèâåäåííÿ ðÿäê³â, ÿê³ íå ì³ñòÿòü çàäàíèé ðÿäîê"
+
+IDS_NO_SUCH_FILE, "FIND: %s: Ôàéë íå ³ñíóº\n"
+
+IDS_CANNOT_OPEN, "FIND: %s: Íåìîæëèâî â³äêðèòè ôàéë\n"
+
+END
diff --git a/reactos/base/applications/findstr/resource.h b/reactos/base/applications/findstr/resource.h
new file mode 100644
index 00000000000..444cd8cc457
--- /dev/null
+++ b/reactos/base/applications/findstr/resource.h
@@ -0,0 +1,3 @@
+#define IDS_USAGE 1000
+#define IDS_NO_SUCH_FILE 1001
+#define IDS_CANNOT_OPEN 1002
diff --git a/reactos/base/applications/findstr/rsrc.rc b/reactos/base/applications/findstr/rsrc.rc
new file mode 100644
index 00000000000..99baec73cbe
--- /dev/null
+++ b/reactos/base/applications/findstr/rsrc.rc
@@ -0,0 +1,20 @@
+#include
+#include "resource.h"
+
+#include "lang/bg-BG.rc"
+#include "lang/ca-ES.rc"
+#include "lang/cs-CZ.rc"
+#include "lang/de-DE.rc"
+#include "lang/el-GR.rc"
+#include "lang/en-US.rc"
+#include "lang/es-ES.rc"
+#include "lang/fr-FR.rc"
+#include "lang/it-IT.rc"
+#include "lang/lt-LT.rc"
+#include "lang/no-NO.rc"
+#include "lang/pl-PL.rc"
+#include "lang/pt-BR.rc"
+#include "lang/ru-RU.rc"
+#include "lang/sk-SK.rc"
+#include "lang/sv-SE.rc"
+#include "lang/uk-UA.rc"
diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff
index f08fb2489c0..778dac88b98 100644
--- a/reactos/boot/bootdata/packages/reactos.dff
+++ b/reactos/boot/bootdata/packages/reactos.dff
@@ -45,6 +45,7 @@ base\applications\cmdutils\xcopy\xcopy.exe 1
base\applications\control\control.exe 1
base\applications\dxdiag\dxdiag.exe 1
base\applications\extrac32\extrac32.exe 1
+base\applications\findstr\findstr.exe 1
base\applications\fontview\fontview.exe 1
base\applications\games\solitaire\sol.exe 1
base\applications\games\spider\spider.exe 1