+
+VOID
+PrintPaddedResourceString(
+ UINT uID,
+ INT nPaddedLength)
+{
+ INT nLength;
+
+ nLength = ConResPuts(StdOut, uID);
+ if (nLength < nPaddedLength)
+ PrintPadding(L' ', nPaddedLength - nLength);
+}
+
+
+VOID
+PrintPadding(
+ WCHAR chr,
+ INT nPaddedLength)
+{
+ INT i;
+ WCHAR szMsgBuffer[MAX_BUFFER_SIZE];
+
+ for (i = 0; i < nPaddedLength; i++)
+ szMsgBuffer[i] = chr;
+ szMsgBuffer[nPaddedLength] = UNICODE_NULL;
+
+ ConPuts(StdOut, szMsgBuffer);
+}
+
+
+VOID
+ReadFromConsole(
+ LPWSTR lpInput,
+ DWORD dwLength,
+ BOOL bEcho)
+{
+ DWORD dwOldMode;
+ DWORD dwRead = 0;
+ HANDLE hFile;
+ LPWSTR p;
+ PCHAR pBuf;
+
+ pBuf = HeapAlloc(GetProcessHeap(), 0, dwLength - 1);
+ ZeroMemory(lpInput, dwLength * sizeof(WCHAR));
+ hFile = GetStdHandle(STD_INPUT_HANDLE);
+ GetConsoleMode(hFile, &dwOldMode);
+
+ SetConsoleMode(hFile, ENABLE_LINE_INPUT | (bEcho ? ENABLE_ECHO_INPUT : 0));
+
+ ReadFile(hFile, (PVOID)pBuf, dwLength - 1, &dwRead, NULL);
+
+ MultiByteToWideChar(CP_OEMCP, 0, pBuf, dwRead, lpInput, dwLength - 1);
+ HeapFree(GetProcessHeap(), 0, pBuf);
+
+ for (p = lpInput; *p; p++)
+ {
+ if (*p == L'\x0d')
+ {
+ *p = L'\0';
+ break;
+ }
+ }
+
+ SetConsoleMode(hFile, dwOldMode);
+}
+
+