diff --git a/reactos/base/applications/cmdutils/comp/CMakeLists.txt b/reactos/base/applications/cmdutils/comp/CMakeLists.txt index 4401ba8ef58..45f078ad5f6 100644 --- a/reactos/base/applications/cmdutils/comp/CMakeLists.txt +++ b/reactos/base/applications/cmdutils/comp/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable(comp comp.c comp.rc) -set_module_type(comp win32cui) -add_importlibs(comp msvcrt kernel32) +set_module_type(comp win32cui UNICODE) +add_importlibs(comp user32 msvcrt kernel32) add_cd_file(TARGET comp DESTINATION reactos/system32 FOR all) diff --git a/reactos/base/applications/cmdutils/comp/comp.c b/reactos/base/applications/cmdutils/comp/comp.c index d25fee6efc4..11b0f5db322 100644 --- a/reactos/base/applications/cmdutils/comp/comp.c +++ b/reactos/base/applications/cmdutils/comp/comp.c @@ -31,8 +31,29 @@ #include #include +#include "resource.h" + #define STRBUF 1024 +VOID ResPrint(INT res_no, ...) +{ + TCHAR * res_string; + va_list vargs; + + va_start(vargs, res_no); + + if (LoadString(GetModuleHandle(NULL), res_no, (TCHAR*)&res_string, 0)) + { + _vtprintf(res_string, vargs); + } + else + { + _tprintf(_T("Resource loading error!")); + } + + va_end(vargs); +} + /* getline: read a line, return length */ INT GetBuff(PBYTE buff, FILE *in) { @@ -53,12 +74,7 @@ INT FileSize(FILE * fd) /* Print program usage */ VOID Usage(VOID) { - _tprintf(_T("\nCompares the contents of two files or sets of files.\n\n" - "COMP [/L] [/A] [data1] [data2]\n\n" - " data1 Specifies location and name of first file to compare.\n" - " data2 Specifies location and name of second file to compare.\n" - " /A Display differences in ASCII characters.\n" - " /L Display line numbers for differences.\n")); + ResPrint(IDS_HELP); } @@ -88,26 +104,26 @@ int _tmain (int argc, TCHAR *argv[]) /* Parse command line for options */ for (i = 1; i < argc; i++) { - if (argv[i][0] == '/') + if (argv[i][0] == _T('/')) { switch (argv[i][1]) { - case 'A': + case _T('A'): bAscii = TRUE; NumberOfOptions++; break; - case 'L': + case _T('L'): bLineNos = TRUE; NumberOfOptions++; break; - case '?': + case _T('?'): Usage(); return EXIT_SUCCESS; default: - _tprintf(_T("Invalid switch - /%c\n"), argv[i][1]); + ResPrint(IDS_INVALIDSWITCH, argv[i][1]); Usage(); return EXIT_FAILURE; } @@ -121,7 +137,7 @@ int _tmain (int argc, TCHAR *argv[]) } else { - _tprintf(_T("Bad command line syntax\n")); + ResPrint(IDS_BADSYNTAX); return EXIT_FAILURE; } @@ -141,26 +157,26 @@ int _tmain (int argc, TCHAR *argv[]) goto Cleanup; } - if ((fp1 = fopen(File1, "rb")) == NULL) + if ((fp1 = _tfopen(File1, _T("rb"))) == NULL) { - _tprintf(_T("Can't find/open file: %s\n"), File1); + ResPrint(IDS_FILEERROR, File1); Status = EXIT_FAILURE; goto Cleanup; } - if ((fp2 = fopen(File2, "rb")) == NULL) + if ((fp2 = _tfopen(File2, _T("rb"))) == NULL) { - _tprintf(_T("Can't find/open file: %s\n"), File2); + ResPrint(IDS_FILEERROR, File2); Status = EXIT_FAILURE; goto Cleanup; } - _tprintf(_T("Comparing %s and %s...\n"), File1, File2); + ResPrint(IDS_COMPARING, File1, File2); FileSizeFile1 = FileSize(fp1); if (FileSizeFile1 == -1) { - _tprintf(_T("Can't determine size of file: %s\n"), File1); + ResPrint(IDS_FILESIZEERROR, File1); Status = EXIT_FAILURE; goto Cleanup; } @@ -168,14 +184,14 @@ int _tmain (int argc, TCHAR *argv[]) FileSizeFile2 = FileSize(fp2); if (FileSizeFile2 == -1) { - _tprintf(_T("Can't determine size of file: %s\n"), File2); + ResPrint(IDS_FILESIZEERROR, File2); Status = EXIT_FAILURE; goto Cleanup; } if (FileSizeFile1 != FileSizeFile2) { - _tprintf(_T("Files are different sizes.\n")); + ResPrint(IDS_SIZEDIFFERS); Status = EXIT_FAILURE; goto Cleanup; } @@ -189,7 +205,7 @@ int _tmain (int argc, TCHAR *argv[]) if (ferror(fp1) || ferror(fp2)) { - _tprintf(_T("Files read error.\n")); + ResPrint(IDS_READERROR); Status = EXIT_FAILURE; goto Cleanup; } @@ -207,22 +223,22 @@ int _tmain (int argc, TCHAR *argv[]) /* Reporting here a mismatch */ if (bLineNos) { - _tprintf(_T("Compare error at LINE %d\n"), LineNumber); + ResPrint(IDS_MISMATCHLINE, LineNumber); } else { - _tprintf(_T("Compare error at OFFSET %d\n"), Offset); + ResPrint(IDS_MISMATCHOFFSET, Offset); } if (bAscii) { - _tprintf(_T("file1 = %c\n"), Buff1[i]); - _tprintf(_T("file2 = %c\n"), Buff2[i]); + ResPrint(IDS_ASCIIDIFF, 1, Buff1[i]); + ResPrint(IDS_ASCIIDIFF, 2, Buff2[i]); } else { - _tprintf(_T("file1 = %X\n"), Buff1[i]); - _tprintf(_T("file2 = %X\n"), Buff2[i]); + ResPrint(IDS_HEXADECIMALDIFF, 1, Buff1[i]); + ResPrint(IDS_HEXADECIMALDIFF, 2, Buff2[i]); } Offset++; @@ -234,7 +250,7 @@ int _tmain (int argc, TCHAR *argv[]) } if (FilesOK) - _tprintf(_T("Files compare OK\n")); + ResPrint(IDS_MATCH); Cleanup: if (fp2) diff --git a/reactos/base/applications/cmdutils/comp/comp.rc b/reactos/base/applications/cmdutils/comp/comp.rc index b83ca54f768..958c090a033 100644 --- a/reactos/base/applications/cmdutils/comp/comp.rc +++ b/reactos/base/applications/cmdutils/comp/comp.rc @@ -1,5 +1,23 @@ +#include + +#include "resource.h" + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #define REACTOS_STR_FILE_DESCRIPTION "File Compare Utility" #define REACTOS_STR_INTERNAL_NAME "comp" #define REACTOS_STR_ORIGINAL_FILENAME "comp.exe" #include + +/* UTF-8 */ +#pragma code_page(65001) + +#ifdef LANGUAGE_EN_US + #include "lang/en-US.rc" +#endif +#ifdef LANGUAGE_FR_FR + #include "lang/fr-FR.rc" +#endif +#ifdef LANGUAGE_RO_RO + #include "lang/ro-RO.rc" +#endif diff --git a/reactos/base/applications/cmdutils/comp/lang/en-US.rc b/reactos/base/applications/cmdutils/comp/lang/en-US.rc new file mode 100644 index 00000000000..ec7494df2f7 --- /dev/null +++ b/reactos/base/applications/cmdutils/comp/lang/en-US.rc @@ -0,0 +1,23 @@ +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +STRINGTABLE +BEGIN + IDS_HELP "Compares the contents of two files or sets of files.\n\n\ +COMP [/L] [/A] [data1] [data2]\n\n\ + data1 Specifies location and name of first file to compare.\n\ + data2 Specifies location and name of second file to compare.\n\ + /A Display differences in ASCII characters (default: hexadecimal).\n\ + /L Display line numbers for differences.\n" + IDS_INVALIDSWITCH "Invalid switch - /%c\n" + IDS_BADSYNTAX "Bad command line syntax\n" + IDS_FILEERROR "Cannot find/open file: %s\n" + IDS_COMPARING "Comparing %s and %s...\n" + IDS_FILESIZEERROR "Cannot determine size of file: %s\n" + IDS_SIZEDIFFERS "Files are different sizes.\n" + IDS_READERROR "Files read error.\n" + IDS_MISMATCHLINE "Compare error at LINE %d\n" + IDS_MISMATCHOFFSET "Compare error at OFFSET 0x%X\n" + IDS_ASCIIDIFF "file%d = %c\n" + IDS_HEXADECIMALDIFF "file%d = %X\n" + IDS_MATCH "Files compare OK\n" +END diff --git a/reactos/base/applications/cmdutils/comp/lang/fr-FR.rc b/reactos/base/applications/cmdutils/comp/lang/fr-FR.rc new file mode 100644 index 00000000000..1eb3a8f8793 --- /dev/null +++ b/reactos/base/applications/cmdutils/comp/lang/fr-FR.rc @@ -0,0 +1,23 @@ +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_HELP "Compare le contenu de deux fichiers ou ensembles de fichiers.\n\n\ +COMP [/L] [/A] [data1] [data2]\n\n\ + data1 Spécifie l'emplacement et le nom du premier fichier à comparer.\n\ + data2 Spécifie l'emplacement et le nom du second fichier à comparer.\n\ + /A Affiche les différences en caractères ASCII (défaut: hexadécimal).\n\ + /L Affiche les numéros de ligne des différences.\n" + IDS_INVALIDSWITCH "Paramètre invalide - /%c\n" + IDS_BADSYNTAX "Syntaxe incorrecte\n" + IDS_FILEERROR "Impossible de trouver/ouvrir le fichier : %s\n" + IDS_COMPARING "Comparaison de %s et %s...\n" + IDS_FILESIZEERROR "Ne peut pas déterminer la taille du fichier : %s\n" + IDS_SIZEDIFFERS "Les fichiers sont de taille différente.\n" + IDS_READERROR "Erreur lors de la lecture des fichiers.\n" + IDS_MISMATCHLINE "Erreur de comparaison à LIGNE %d\n" + IDS_MISMATCHOFFSET "Erreur de comparaison à OFFSET 0x%X\n" + IDS_ASCIIDIFF "fichier%d = %c\n" + IDS_HEXADECIMALDIFF "fichier%d = %X\n" + IDS_MATCH "Comparaison des fichiers OK\n" +END diff --git a/reactos/base/applications/cmdutils/comp/lang/ro-RO.rc b/reactos/base/applications/cmdutils/comp/lang/ro-RO.rc new file mode 100644 index 00000000000..c4a324245ec --- /dev/null +++ b/reactos/base/applications/cmdutils/comp/lang/ro-RO.rc @@ -0,0 +1,24 @@ +/* Ștefan Fulea (stefan dot fulea at mail dot md) */ +LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_HELP "Compară conținuturile a două fișiere sau grupuri de fișiere.\n\n\ +COMP [/L] [/A] [data1] [data2]\n\n\ + data1 Calea și numele primului fișier de comparat.\n\ + data2 Calea și numele celui de-al doilea fișier de comparat.\n\ + /A Afișează diferențele în caractere ASCII (default: hexadecimal).\n\ + /L Afișează numărul liniei pentru diferențe.\n" + IDS_INVALIDSWITCH "Parametru nevalid - /%c\n" + IDS_BADSYNTAX "Sintaxă eronată\n" + IDS_FILEERROR "Nu se poate găsi/deschide fișierul: %s\n" + IDS_COMPARING "Se compară %s și %s...\n" + IDS_FILESIZEERROR "Nu se poate determina dimensiunea fișierului: %s\n" + IDS_SIZEDIFFERS "Fișierele au dimensiuni diferite.\n" + IDS_READERROR "Eroare la citirea fișierelor.\n" + IDS_MISMATCHLINE "Diferență identificată la linia %d\n" + IDS_MISMATCHOFFSET "Diferență identificată la poziția 0x%X\n" + IDS_ASCIIDIFF "fișier%d = %c\n" + IDS_HEXADECIMALDIFF "fișier%d = %X\n" + IDS_MATCH "Fișierele sunt identice\n" +END diff --git a/reactos/base/applications/cmdutils/comp/resource.h b/reactos/base/applications/cmdutils/comp/resource.h new file mode 100644 index 00000000000..27732ae9b57 --- /dev/null +++ b/reactos/base/applications/cmdutils/comp/resource.h @@ -0,0 +1,15 @@ +#pragma once + +#define IDS_HELP 100 +#define IDS_INVALIDSWITCH 101 +#define IDS_BADSYNTAX 102 +#define IDS_FILEERROR 103 +#define IDS_COMPARING 104 +#define IDS_FILESIZEERROR 105 +#define IDS_SIZEDIFFERS 106 +#define IDS_READERROR 107 +#define IDS_MISMATCHLINE 108 +#define IDS_MISMATCHOFFSET 109 +#define IDS_ASCIIDIFF 110 +#define IDS_HEXADECIMALDIFF 111 +#define IDS_MATCH 112