diff --git a/reactos/base/applications/cmdutils/comp/comp.c b/reactos/base/applications/cmdutils/comp/comp.c index 11b0f5db322..ccce0a4b639 100644 --- a/reactos/base/applications/cmdutils/comp/comp.c +++ b/reactos/base/applications/cmdutils/comp/comp.c @@ -24,43 +24,48 @@ * PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com) */ -#include -#include #include #include -#include +// #include +// #include #include +#define WIN32_NO_STATUS +#include +#include +#include + #include "resource.h" #define STRBUF 1024 -VOID ResPrint(INT res_no, ...) +VOID PrintResourceString(INT resID, ...) { - TCHAR * res_string; - va_list vargs; + WCHAR bufSrc[RC_STRING_MAX_SIZE]; + WCHAR bufFormatted[RC_STRING_MAX_SIZE]; + CHAR bufFormattedOem[RC_STRING_MAX_SIZE]; - va_start(vargs, res_no); + va_list args; + va_start(args, resID); - if (LoadString(GetModuleHandle(NULL), res_no, (TCHAR*)&res_string, 0)) - { - _vtprintf(res_string, vargs); - } + if (LoadStringW(GetModuleHandleW(NULL), resID, bufSrc, ARRAYSIZE(bufSrc))) + vswprintf(bufFormatted, bufSrc, args); else - { - _tprintf(_T("Resource loading error!")); - } + swprintf(bufFormatted, L"Resource loading error!"); - va_end(vargs); + CharToOemW(bufFormatted, bufFormattedOem); + fputs(bufFormattedOem, stdout); + + va_end(args); } /* getline: read a line, return length */ -INT GetBuff(PBYTE buff, FILE *in) +INT GetBuff(PBYTE buff, FILE* in) { return fread(buff, sizeof(BYTE), STRBUF, in); } -INT FileSize(FILE * fd) +INT FileSize(FILE* fd) { INT result = -1; if (fseek(fd, 0, SEEK_END) == 0 && (result = ftell(fd)) != -1) @@ -74,11 +79,11 @@ INT FileSize(FILE * fd) /* Print program usage */ VOID Usage(VOID) { - ResPrint(IDS_HELP); + PrintResourceString(IDS_HELP); } -int _tmain (int argc, TCHAR *argv[]) +int wmain (int argc, WCHAR* argv[]) { INT i; @@ -89,41 +94,41 @@ int _tmain (int argc, TCHAR *argv[]) INT BufLen1, BufLen2; PBYTE Buff1 = NULL; PBYTE Buff2 = NULL; - TCHAR File1[_MAX_PATH + 1], // File paths + WCHAR File1[_MAX_PATH + 1], // File paths File2[_MAX_PATH + 1]; BOOL bAscii = FALSE, // /A switch bLineNos = FALSE; // /L switch - UINT LineNumber; - UINT Offset; + UINT LineNumber; + UINT Offset; INT FileSizeFile1; INT FileSizeFile2; INT NumberOfOptions = 0; INT FilesOK = 1; - INT Status = EXIT_SUCCESS; + INT Status = EXIT_SUCCESS; /* Parse command line for options */ for (i = 1; i < argc; i++) { - if (argv[i][0] == _T('/')) + if (argv[i][0] == L'/') { switch (argv[i][1]) { - case _T('A'): + case L'A': bAscii = TRUE; NumberOfOptions++; break; - case _T('L'): + case L'L': bLineNos = TRUE; NumberOfOptions++; break; - case _T('?'): + case L'?': Usage(); return EXIT_SUCCESS; default: - ResPrint(IDS_INVALIDSWITCH, argv[i][1]); + PrintResourceString(IDS_INVALIDSWITCH, argv[i][1]); Usage(); return EXIT_FAILURE; } @@ -132,19 +137,19 @@ int _tmain (int argc, TCHAR *argv[]) if (argc - NumberOfOptions == 3) { - _tcsncpy(File1, argv[1 + NumberOfOptions], _MAX_PATH); - _tcsncpy(File2, argv[2 + NumberOfOptions], _MAX_PATH); + wcsncpy(File1, argv[1 + NumberOfOptions], _MAX_PATH); + wcsncpy(File2, argv[2 + NumberOfOptions], _MAX_PATH); } else { - ResPrint(IDS_BADSYNTAX); + PrintResourceString(IDS_BADSYNTAX); return EXIT_FAILURE; } Buff1 = (PBYTE)malloc(STRBUF); if (Buff1 == NULL) { - _tprintf(_T("Can't get free memory for Buff1\n")); + wprintf(L"Can't get free memory for Buff1\n"); Status = EXIT_FAILURE; goto Cleanup; } @@ -152,31 +157,30 @@ int _tmain (int argc, TCHAR *argv[]) Buff2 = (PBYTE)malloc(STRBUF); if (Buff2 == NULL) { - _tprintf(_T("Can't get free memory for Buff2\n")); + wprintf(L"Can't get free memory for Buff2\n"); Status = EXIT_FAILURE; goto Cleanup; } - if ((fp1 = _tfopen(File1, _T("rb"))) == NULL) + if ((fp1 = _wfopen(File1, L"rb")) == NULL) { - ResPrint(IDS_FILEERROR, File1); + PrintResourceString(IDS_FILEERROR, File1); Status = EXIT_FAILURE; goto Cleanup; } - if ((fp2 = _tfopen(File2, _T("rb"))) == NULL) + if ((fp2 = _wfopen(File2, L"rb")) == NULL) { - ResPrint(IDS_FILEERROR, File2); + PrintResourceString(IDS_FILEERROR, File2); Status = EXIT_FAILURE; goto Cleanup; } - - ResPrint(IDS_COMPARING, File1, File2); + PrintResourceString(IDS_COMPARING, File1, File2); FileSizeFile1 = FileSize(fp1); if (FileSizeFile1 == -1) { - ResPrint(IDS_FILESIZEERROR, File1); + PrintResourceString(IDS_FILESIZEERROR, File1); Status = EXIT_FAILURE; goto Cleanup; } @@ -184,14 +188,14 @@ int _tmain (int argc, TCHAR *argv[]) FileSizeFile2 = FileSize(fp2); if (FileSizeFile2 == -1) { - ResPrint(IDS_FILESIZEERROR, File2); + PrintResourceString(IDS_FILESIZEERROR, File2); Status = EXIT_FAILURE; goto Cleanup; } if (FileSizeFile1 != FileSizeFile2) { - ResPrint(IDS_SIZEDIFFERS); + PrintResourceString(IDS_SIZEDIFFERS); Status = EXIT_FAILURE; goto Cleanup; } @@ -205,7 +209,7 @@ int _tmain (int argc, TCHAR *argv[]) if (ferror(fp1) || ferror(fp2)) { - ResPrint(IDS_READERROR); + PrintResourceString(IDS_READERROR); Status = EXIT_FAILURE; goto Cleanup; } @@ -223,34 +227,34 @@ int _tmain (int argc, TCHAR *argv[]) /* Reporting here a mismatch */ if (bLineNos) { - ResPrint(IDS_MISMATCHLINE, LineNumber); + PrintResourceString(IDS_MISMATCHLINE, LineNumber); } else { - ResPrint(IDS_MISMATCHOFFSET, Offset); + PrintResourceString(IDS_MISMATCHOFFSET, Offset); } if (bAscii) { - ResPrint(IDS_ASCIIDIFF, 1, Buff1[i]); - ResPrint(IDS_ASCIIDIFF, 2, Buff2[i]); + PrintResourceString(IDS_ASCIIDIFF, 1, Buff1[i]); + PrintResourceString(IDS_ASCIIDIFF, 2, Buff2[i]); } else { - ResPrint(IDS_HEXADECIMALDIFF, 1, Buff1[i]); - ResPrint(IDS_HEXADECIMALDIFF, 2, Buff2[i]); + PrintResourceString(IDS_HEXADECIMALDIFF, 1, Buff1[i]); + PrintResourceString(IDS_HEXADECIMALDIFF, 2, Buff2[i]); } - - Offset++; - - if (Buff1[i] == '\n') - LineNumber++; } - } + + Offset++; + + if (Buff1[i] == '\n') + LineNumber++; + } } if (FilesOK) - ResPrint(IDS_MATCH); + PrintResourceString(IDS_MATCH); Cleanup: if (fp2) diff --git a/reactos/base/applications/cmdutils/comp/resource.h b/reactos/base/applications/cmdutils/comp/resource.h index 27732ae9b57..56fce5b30ea 100644 --- a/reactos/base/applications/cmdutils/comp/resource.h +++ b/reactos/base/applications/cmdutils/comp/resource.h @@ -1,5 +1,7 @@ #pragma once +#define RC_STRING_MAX_SIZE 4096 + #define IDS_HELP 100 #define IDS_INVALIDSWITCH 101 #define IDS_BADSYNTAX 102