Add cache for codepage so it does not call hole time on csrss when it wring out text

it will incress the speed.  Thx w3seek and kjk for the idea.

svn path=/trunk/; revision=15076
This commit is contained in:
Magnus Olsen
2005-05-07 11:14:58 +00:00
parent a027f33c15
commit e23d422877
5 changed files with 32 additions and 6 deletions
+6 -2
View File
@@ -14,6 +14,8 @@
#include "precomp.h"
#include "resource.h"
#ifdef INCLUDE_CMD_CHCP
INT CommandChcp (LPTSTR cmd, LPTSTR param)
@@ -39,7 +41,7 @@ INT CommandChcp (LPTSTR cmd, LPTSTR param)
{
/* display active code page number */
LoadString(GetModuleHandle(NULL), STRING_CHCP_ERROR1, szMsg, RC_STRING_MAX_SIZE);
ConErrPrintf(szMsg, GetConsoleCP());
ConErrPrintf(szMsg, GetCodePage);
return 0;
}
@@ -53,7 +55,7 @@ INT CommandChcp (LPTSTR cmd, LPTSTR param)
/* save old code page */
uOldCodePage = GetConsoleCP();
uOldCodePage = GetCodePage;
uNewCodePage = (UINT)_ttoi(arg[0]);
@@ -72,8 +74,10 @@ INT CommandChcp (LPTSTR cmd, LPTSTR param)
}
else
{
SetConsoleOutputCP (uNewCodePage);
InitLocale ();
GetCodePage = GetConsoleCP();
}
freep (arg);
+8
View File
@@ -426,6 +426,9 @@ Execute (LPTSTR full, LPTSTR first, LPTSTR rest)
ENABLE_PROCESSED_INPUT );
}
/* Get code page if it has been change */
GetCodePage = GetConsoleCP();
OutCodePage = GetConsoleOutputCP();
#ifndef __REACTOS__
SetConsoleTitle (szWindowTitle);
#endif
@@ -1416,6 +1419,8 @@ int main (int argc, char *argv[])
#endif
SetFileApisToOEM();
GetCodePage = 0;
OutCodePage = 0;
hConsole = CreateFile(_T("CONOUT$"), GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
@@ -1428,6 +1433,9 @@ int main (int argc, char *argv[])
wColor = Info.wAttributes;
wDefColor = wColor;
GetCodePage = GetConsoleCP();
OutCodePage = GetConsoleOutputCP();
/* check switches on command-line */
Initialize(argc, argv);
+4
View File
@@ -292,10 +292,14 @@ extern TCHAR cThousandSeparator;
extern TCHAR cDecimalSeparator;
extern INT nNumberGroups;
VOID InitLocale (VOID);
VOID PrintDate (VOID);
VOID PrintTime (VOID);
/* cache codepage */
extern UINT GetCodePage;
extern UINT OutCodePage;
/* Prototypes for MEMORY.C */
INT CommandMemory (LPTSTR, LPTSTR);
+11 -4
View File
@@ -11,12 +11,19 @@
* Remove all hardcode string to En.rc
*/
#include "precomp.h"
#include "resource.h"
#define OUTPUT_BUFFER_SIZE 4096
UINT GetCodePage;
UINT OutCodePage;
VOID ConInDisable (VOID)
{
HANDLE hInput = GetStdHandle (STD_INPUT_HANDLE);
@@ -104,7 +111,7 @@ VOID ConInString (LPTSTR lpInput, DWORD dwLength)
ReadFile (hFile, (PVOID)pBuf, dwLength, &dwRead, NULL);
#ifdef _UNICODE
MultiByteToWideChar( GetConsoleCP(), 0, pBuf, dwLength + 1, lpInput, dwLength + 1);
MultiByteToWideChar( GetCodePage, 0, pBuf, dwLength + 1, lpInput, dwLength + 1);
#endif
p = lpInput;
for (i = 0; i < dwRead; i++, p++)
@@ -132,7 +139,7 @@ static VOID ConChar(TCHAR c, DWORD nStdHandle)
WCHAR ws[2];
ws[0] = c;
ws[1] = 0;
WideCharToMultiByte( GetConsoleOutputCP(), 0, ws, 2, as, 2, NULL, NULL);
WideCharToMultiByte( OutCodePage, 0, ws, 2, as, 2, NULL, NULL);
cc = as[0];
#else
cc = c;
@@ -158,7 +165,7 @@ VOID ConPuts(LPTSTR szText, DWORD nStdHandle)
len = _tcslen(szText);
#ifdef _UNICODE
pBuf = malloc(len + 1);
len = WideCharToMultiByte( GetConsoleOutputCP(), 0, szText, len + 1, pBuf, len + 1, NULL, NULL) - 1;
len = WideCharToMultiByte( OutCodePage, 0, szText, len + 1, pBuf, len + 1, NULL, NULL) - 1;
#else
pBuf = szText;
#endif
@@ -193,7 +200,7 @@ VOID ConPrintf(LPTSTR szFormat, va_list arg_ptr, DWORD nStdHandle)
len = _vstprintf (szOut, szFormat, arg_ptr);
#ifdef _UNICODE
pBuf = malloc(len + 1);
len = WideCharToMultiByte( GetConsoleOutputCP(), 0, szOut, len + 1, pBuf, len + 1, NULL, NULL) - 1;
len = WideCharToMultiByte( OutCodePage, 0, szOut, len + 1, pBuf, len + 1, NULL, NULL) - 1;
#else
pBuf = szOut;
#endif
+3
View File
@@ -114,6 +114,9 @@ INT cmd_start (LPTSTR first, LPTSTR rest)
}
CloseHandle (prci.hThread);
CloseHandle (prci.hProcess);
/* Get New code page if it has change */
GetCodePage = GetConsoleCP();
OutCodePage = GetConsoleOutputCP();
}
else
{