mirror of
https://github.com/reactos/reactos.git
synced 2024-07-31 00:28:56 +00:00
[NTVDM]: Add a compile-time-defined switch to be able to use the RegisterConsoleVDM API of ReactOS/Windows, or an emulated one.
svn path=/trunk/; revision=63844
This commit is contained in:
parent
3a6aa828e4
commit
f9a6eb7bc4
|
@ -21,6 +21,12 @@
|
|||
static CONST DWORD MemoryBase[] = { 0xA0000, 0xA0000, 0xB0000, 0xB8000 };
|
||||
static CONST DWORD MemoryLimit[] = { 0xAFFFF, 0xAFFFF, 0xB7FFF, 0xBFFFF };
|
||||
|
||||
/*
|
||||
* Activate this line if you want to use the real
|
||||
* RegisterConsoleVDM API of Windows/ReactOS.
|
||||
*/
|
||||
// #define USE_REAL_REGISTERCONSOLEVDM
|
||||
|
||||
#define USE_REACTOS_COLORS
|
||||
// #define USE_DOSBOX_COLORS
|
||||
|
||||
|
@ -288,44 +294,12 @@ static SMALL_RECT UpdateRectangle = { 0, 0, 0, 0 };
|
|||
|
||||
#include <ntddvdeo.h>
|
||||
|
||||
typedef
|
||||
BOOL
|
||||
(WINAPI *pRegisterConsoleVDM)
|
||||
(
|
||||
BOOL IsDosVDM_flag,
|
||||
HANDLE EventHandle_1,
|
||||
HANDLE EventHandle_2,
|
||||
HANDLE EventHandle_3,
|
||||
int Unused1,
|
||||
PVOID returned_val_1,
|
||||
PVOID *returned_val_2,
|
||||
PVOID lpUnknownBuffer,
|
||||
DWORD theUnknownBufferLength,
|
||||
COORD theVDMBufferSize,
|
||||
PCHAR *lpVDMBuffer
|
||||
);
|
||||
#ifdef USE_REAL_REGISTERCONSOLEVDM
|
||||
|
||||
#if 0
|
||||
BOOL
|
||||
WINAPI
|
||||
RegisterConsoleVDM
|
||||
(
|
||||
BOOL IsDosVDM_flag,
|
||||
HANDLE EventHandle_1,
|
||||
HANDLE EventHandle_2,
|
||||
HANDLE EventHandle_3,
|
||||
int Unused1,
|
||||
PVOID returned_val_1,
|
||||
PVOID *returned_val_2,
|
||||
PVOID lpUnknownBuffer,
|
||||
DWORD theUnknownBufferLength,
|
||||
COORD theVDMBufferSize,
|
||||
PVOID *lpVDMBuffer
|
||||
);
|
||||
#define __RegisterConsoleVDM RegisterConsoleVDM
|
||||
#define __InvalidateConsoleDIBits InvalidateConsoleDIBits
|
||||
|
||||
HMODULE hKernel32 = NULL;
|
||||
pRegisterConsoleVDM RegisterConsoleVDM = NULL;
|
||||
#endif
|
||||
#else
|
||||
|
||||
/*
|
||||
* This private buffer, per-console, is used by
|
||||
|
@ -340,49 +314,49 @@ static PCHAR_INFO CharBuff = NULL; // This is a hack, which is unneeded
|
|||
|
||||
BOOL
|
||||
WINAPI
|
||||
__RegisterConsoleVDM(BOOL IsDosVDM_flag,
|
||||
HANDLE EventHandle_1,
|
||||
HANDLE EventHandle_2,
|
||||
HANDLE EventHandle_3,
|
||||
int Unused1,
|
||||
PVOID returned_val_1,
|
||||
PVOID *returned_val_2,
|
||||
PVOID lpUnknownBuffer,
|
||||
DWORD theUnknownBufferLength,
|
||||
COORD theVDMBufferSize,
|
||||
PCHAR *lpVDMBuffer)
|
||||
__RegisterConsoleVDM(IN DWORD dwDosVDMFlag,
|
||||
IN HANDLE hEventHandle1,
|
||||
IN HANDLE hEventHandle2,
|
||||
IN HANDLE hEventHandle3,
|
||||
IN DWORD Unused1,
|
||||
OUT PULONG returned_val_1,
|
||||
OUT PVOID* returned_val_2,
|
||||
IN PVOID lpUnknownBuffer,
|
||||
IN DWORD dwUnknownBufferLength,
|
||||
IN COORD dwVDMBufferSize,
|
||||
OUT PVOID* lpVDMBuffer)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(EventHandle_3);
|
||||
UNREFERENCED_PARAMETER(hEventHandle3);
|
||||
UNREFERENCED_PARAMETER(Unused1);
|
||||
UNREFERENCED_PARAMETER(returned_val_1);
|
||||
UNREFERENCED_PARAMETER(returned_val_2);
|
||||
UNREFERENCED_PARAMETER(lpUnknownBuffer);
|
||||
UNREFERENCED_PARAMETER(theUnknownBufferLength);
|
||||
UNREFERENCED_PARAMETER(dwUnknownBufferLength);
|
||||
|
||||
SetLastError(0);
|
||||
DPRINT1("__RegisterConsoleVDM(%d)\n", IsDosVDM_flag);
|
||||
DPRINT1("__RegisterConsoleVDM(%d)\n", dwDosVDMFlag);
|
||||
|
||||
if (lpVDMBuffer == NULL) return FALSE;
|
||||
|
||||
if (IsDosVDM_flag)
|
||||
if (dwDosVDMFlag != 0)
|
||||
{
|
||||
// if (EventHandle_1 == NULL || EventHandle_2 == NULL) return FALSE;
|
||||
if (VDMBuffer != NULL) return FALSE;
|
||||
|
||||
VDMBufferSize = theVDMBufferSize;
|
||||
VDMBufferSize = dwVDMBufferSize;
|
||||
|
||||
/* HACK: Cache -- to be removed in the real implementation */
|
||||
CharBuff = HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
theVDMBufferSize.X * theVDMBufferSize.Y
|
||||
* sizeof(CHAR_INFO));
|
||||
VDMBufferSize.X * VDMBufferSize.Y
|
||||
* sizeof(CHAR_INFO));
|
||||
ASSERT(CharBuff);
|
||||
|
||||
VDMBuffer = HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
theVDMBufferSize.X * theVDMBufferSize.Y
|
||||
* sizeof(CHAR_CELL));
|
||||
*lpVDMBuffer = (PCHAR)VDMBuffer;
|
||||
VDMBufferSize.X * VDMBufferSize.Y
|
||||
* sizeof(CHAR_CELL));
|
||||
*lpVDMBuffer = VDMBuffer;
|
||||
return (VDMBuffer != NULL);
|
||||
}
|
||||
else
|
||||
|
@ -432,6 +406,8 @@ __InvalidateConsoleDIBits(IN HANDLE hConsoleOutput,
|
|||
return InvalidateConsoleDIBits(hConsoleOutput, lpRect);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* PRIVATE FUNCTIONS **********************************************************/
|
||||
|
||||
static inline DWORD VgaGetAddressSize(VOID);
|
||||
|
@ -458,6 +434,9 @@ static BOOL VgaAttachToConsoleInternal(PCOORD Resolution)
|
|||
ULONG Length = 0;
|
||||
PVIDEO_HARDWARE_STATE_HEADER State;
|
||||
|
||||
#ifdef USE_REAL_REGISTERCONSOLEVDM
|
||||
PCHAR_INFO CharBuff = NULL;
|
||||
#endif
|
||||
SHORT i, j;
|
||||
DWORD AddressSize, ScanlineSize;
|
||||
DWORD Address = 0;
|
||||
|
@ -492,7 +471,7 @@ static BOOL VgaAttachToConsoleInternal(PCOORD Resolution)
|
|||
NULL,
|
||||
0,
|
||||
TextResolution,
|
||||
(PCHAR*)&TextFramebuffer);
|
||||
(PVOID*)&TextFramebuffer);
|
||||
if (!Success)
|
||||
{
|
||||
DisplayMessage(L"RegisterConsoleVDM failed with error %d\n", GetLastError());
|
||||
|
@ -500,6 +479,14 @@ static BOOL VgaAttachToConsoleInternal(PCOORD Resolution)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
#ifdef USE_REAL_REGISTERCONSOLEVDM
|
||||
CharBuff = HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
TextResolution.X * TextResolution.Y
|
||||
* sizeof(CHAR_INFO));
|
||||
ASSERT(CharBuff);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Resize the console
|
||||
*/
|
||||
|
@ -560,6 +547,10 @@ static BOOL VgaAttachToConsoleInternal(PCOORD Resolution)
|
|||
Address += ScanlineSize;
|
||||
}
|
||||
|
||||
#ifdef USE_REAL_REGISTERCONSOLEVDM
|
||||
if (CharBuff) HeapFree(GetProcessHeap(), 0, CharBuff);
|
||||
#endif
|
||||
|
||||
VgaUpdateCursorPosition();
|
||||
|
||||
return TRUE;
|
||||
|
@ -1950,7 +1941,7 @@ VOID VgaDetachFromConsole(BOOL ChangingMode)
|
|||
NULL,
|
||||
0,
|
||||
dummySize,
|
||||
(PCHAR*)&dummyPtr);
|
||||
&dummyPtr);
|
||||
|
||||
TextFramebuffer = NULL;
|
||||
|
||||
|
@ -2039,11 +2030,6 @@ VOID VgaCleanup(VOID)
|
|||
CloseHandle(AnotherEvent);
|
||||
CloseHandle(EndEvent);
|
||||
CloseHandle(StartEvent);
|
||||
|
||||
#if 0
|
||||
RegisterConsoleVDM = NULL;
|
||||
FreeLibrary(hKernel32);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
Loading…
Reference in a new issue