Author: hbelusca
Date: Mon Aug 29 15:39:19 2016
New Revision: 72504
URL:
http://svn.reactos.org/svn/reactos?rev=72504&view=rev
Log:
[DOSKEY]
Our kernel32.lib already exports all of the console API and in particular the console
history API, so we can directly link doskey against it and use them, instead of
delay-loading at runtime. We just need to add their prototypes in the source code since
they are not declared by wincon.h by default.
Modified:
trunk/reactos/base/applications/cmdutils/doskey/doskey.c
Modified: trunk/reactos/base/applications/cmdutils/doskey/doskey.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils…
==============================================================================
--- trunk/reactos/base/applications/cmdutils/doskey/doskey.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/cmdutils/doskey/doskey.c [iso-8859-1] Mon Aug 29
15:39:19 2016
@@ -1,12 +1,31 @@
-#include <stdarg.h>
+#include <stdio.h>
+#include <wchar.h>
+#include <locale.h>
+
#include <windef.h>
#include <winbase.h>
#include <winuser.h>
#include <wincon.h>
-#include <stdio.h>
-#include <wchar.h>
-#include <assert.h>
-#include <locale.h>
+
+/* Console API functions which are absent from wincon.h */
+VOID
+WINAPI
+ExpungeConsoleCommandHistoryW(LPCWSTR lpExeName);
+
+DWORD
+WINAPI
+GetConsoleCommandHistoryW(LPWSTR lpHistory,
+ DWORD cbHistory,
+ LPCWSTR lpExeName);
+
+DWORD
+WINAPI
+GetConsoleCommandHistoryLengthW(LPCWSTR lpExeName);
+
+BOOL
+WINAPI
+SetConsoleNumberOfCommandsW(DWORD dwNumCommands,
+ LPCWSTR lpExeName);
#include "doskey.h"
@@ -14,19 +33,12 @@
WCHAR szStringBuf[MAX_STRING];
LPWSTR pszExeName = L"cmd.exe";
-/* Function pointers */
-typedef DWORD (WINAPI *GetConsoleCommandHistoryW_t) (LPWSTR sCommands, DWORD
nBufferLength, LPWSTR sExeName);
-typedef DWORD (WINAPI *GetConsoleCommandHistoryLengthW_t) (LPWSTR sExeName);
-typedef BOOL (WINAPI *SetConsoleNumberOfCommandsW_t)(DWORD nNumber, LPWSTR sExeName);
-typedef VOID (WINAPI *ExpungeConsoleCommandHistoryW_t)(LPWSTR sExeName);
-
-GetConsoleCommandHistoryW_t pGetConsoleCommandHistoryW;
-GetConsoleCommandHistoryLengthW_t pGetConsoleCommandHistoryLengthW;
-SetConsoleNumberOfCommandsW_t pSetConsoleNumberOfCommandsW;
-ExpungeConsoleCommandHistoryW_t pExpungeConsoleCommandHistoryW;
-
static VOID SetInsert(DWORD dwFlag)
{
+ /*
+ * NOTE: Enabling the ENABLE_INSERT_MODE mode can also be done by calling
+ * kernel32:SetConsoleCommandHistoryMode(CONSOLE_OVERSTRIKE) .
+ */
DWORD dwMode;
HANDLE hConsole = GetStdHandle(STD_INPUT_HANDLE);
GetConsoleMode(hConsole, &dwMode);
@@ -36,7 +48,7 @@
static VOID PrintHistory(VOID)
{
- DWORD Length = pGetConsoleCommandHistoryLengthW(pszExeName);
+ DWORD Length = GetConsoleCommandHistoryLengthW(pszExeName);
PBYTE HistBuf;
WCHAR *Hist;
WCHAR *HistEnd;
@@ -48,9 +60,13 @@
Hist = (WCHAR *)HistBuf;
HistEnd = (WCHAR *)&HistBuf[Length];
- if (pGetConsoleCommandHistoryW(Hist, Length, pszExeName))
+ if (GetConsoleCommandHistoryW(Hist, Length, pszExeName))
+ {
for (; Hist < HistEnd; Hist += wcslen(Hist) + 1)
+ {
wprintf(L"%s\n", Hist);
+ }
+ }
HeapFree(GetProcessHeap(), 0, HistBuf);
}
@@ -102,8 +118,12 @@
AliasEnd = (WCHAR *)&AliasBuf[Length];
if (GetConsoleAliasesW(Alias, Length * sizeof(BYTE), pszExeName))
+ {
for (; Alias < AliasEnd; Alias += wcslen(Alias) + 1)
+ {
wprintf(L"%s%s\n", Indent, Alias);
+ }
+ }
HeapFree(GetProcessHeap(), 0, AliasBuf);
}
@@ -198,23 +218,12 @@
{
WCHAR *pArgStart;
WCHAR *pArgEnd;
- HMODULE hKernel32;
setlocale(LC_ALL, "");
/* Get the full command line using GetCommandLine(). We can't just use argv,
* because then a parameter like "gotoroot=cd \" wouldn't be passed
completely. */
pArgEnd = GetCommandLineW();
- hKernel32 = LoadLibraryW(L"kernel32.dll");
-
- /* Get function pointers */
- pGetConsoleCommandHistoryW = (GetConsoleCommandHistoryW_t)GetProcAddress( hKernel32,
"GetConsoleCommandHistoryW");
- pGetConsoleCommandHistoryLengthW = (GetConsoleCommandHistoryLengthW_t)GetProcAddress(
hKernel32, "GetConsoleCommandHistoryLengthW");
- pSetConsoleNumberOfCommandsW = (SetConsoleNumberOfCommandsW_t)GetProcAddress( hKernel32,
"SetConsoleNumberOfCommandsW");
- pExpungeConsoleCommandHistoryW = (ExpungeConsoleCommandHistoryW_t)GetProcAddress(
hKernel32, "ExpungeConsoleCommandHistoryW");
-
- assert(pGetConsoleCommandHistoryW && pGetConsoleCommandHistoryLengthW
&&
- pSetConsoleNumberOfCommandsW && pExpungeConsoleCommandHistoryW);
/* Skip the application name */
GetArg(&pArgStart, &pArgEnd);
@@ -242,11 +251,11 @@
}
else if (!_wcsnicmp(pArgStart, L"/LISTSIZE=", 10))
{
- pSetConsoleNumberOfCommandsW(_wtoi(pArgStart + 10), pszExeName);
+ SetConsoleNumberOfCommandsW(_wtoi(pArgStart + 10), pszExeName);
}
else if (!wcsicmp(pArgStart, L"/REINSTALL"))
{
- pExpungeConsoleCommandHistoryW(pszExeName);
+ ExpungeConsoleCommandHistoryW(pszExeName);
}
else if (!wcsicmp(pArgStart, L"/INSERT"))
{