/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
pmnt.h
Abstract:
This is the include file that defines all constants and types for
the PMNTDD device & the PMNT.DLL services.
Define INCL_32BIT before #include statement if and only if this file is
included by a 32-bit C module (ie OS/2 ss or PMNTDD.SYS).
Author:
Patrick Questembert (PatrickQ) 03-Aug-1992.
Revision History:
--*/
#ifndef _PMNTINCLUDE_
#define _PMNTINCLUDE_
#ifndef INCL_32BIT
#define INCL_16BIT
#endif // INCL_32BIT
#define PMNT_DAYTONA 1 // Define this ONLY for post 570 builds (i.e. DAYTONA)
/***************************************************************************/
/* Below is the structure returned by the 32-bit code down to PM from the */
/* ReadConsoleInputA API. This */
/* duplicates the WIN32 Console structure (29 Nov 92) - it is defined here */
/* so that the 16-bit PM code is unaffected by possible changes to the */
/* WIN32 structure. */
/***************************************************************************/
#ifdef INCL_16BIT
#pragma pack(1)
#endif
typedef struct _PM_KEY_INPUT_RECORD {
UCHAR monflags;
UCHAR scancode;
UCHAR xlatedchar;
UCHAR xlatedscan;
USHORT shiftDBCS;
USHORT shiftstate;
ULONG time;
USHORT ddflags;
} PM_KEY_INPUT_RECORD;
#ifdef INCL_16BIT
#pragma pack ()
#endif
#ifdef INCL_16BIT
#pragma pack(4) // Because the structures below will come from NT
#endif
typedef struct _PMNT_KEY_EVENT_RECORD {
ULONG bKeyDown; // ULONG instead of BOOL
USHORT wRepeatCount; // USHORT instead of WORD
USHORT wVirtualKeyCode; // USHORT instead of WORD
USHORT wVirtualScanCode; // USHORT instead of WORD
union {
USHORT UnicodeChar; // USHORT instead of WCHAR
CHAR AsciiChar;
} uChar;
ULONG dwControlKeyState; // ULONG instead of DWORD
} PMNT_KEY_EVENT_RECORD;
typedef struct _PMNT_COORD {
SHORT X;
SHORT Y;
} PMNT_COORD;
typedef struct _PMNT_MOUSE_EVENT_RECORD {
PMNT_COORD dwMousePosition; // PMNT_COORD instead of COORD
ULONG dwButtonState; // ULONG instead of DWORD
ULONG dwControlKeyState; // ULONG instead of DWORD
ULONG dwEventFlags; // ULONG instead of DWORD
} PMNT_MOUSE_EVENT_RECORD;
typedef struct _PMNT_WINDOW_BUFFER_SIZE_RECORD {
PMNT_COORD dwSize;
} PMNT_WINDOW_BUFFER_SIZE_RECORD;
typedef struct _PMNT_MENU_EVENT_RECORD {
unsigned int dwCommandId;
} PMNT_MENU_EVENT_RECORD;
typedef struct _PMNT_FOCUS_EVENT_RECORD {
ULONG bSetFocus; // ULONG instead of BOOL
} PMNT_FOCUS_EVENT_RECORD;
typedef struct _PMNT_INPUT_RECORD {
USHORT EventType;
union {
PMNT_KEY_EVENT_RECORD KeyEvent;
PMNT_MOUSE_EVENT_RECORD MouseEvent;
PMNT_WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
PMNT_MENU_EVENT_RECORD MenuEvent;
PMNT_FOCUS_EVENT_RECORD FocusEvent;
} Event;
} PMNT_INPUT_RECORD;
#define PMNT_KEY_EVENT 0x0001 // Event contains key event record
#define PMNT_MOUSE_EVENT 0x0002 // Event contains mouse event record
#define PMNT_WINDOW_BUFFER_SIZE_EVENT 0x0004 // Event contains window change event record
#define PMNT_MENU_EVENT 0x0008 // Event contains menu event record
#define PMNT_FOCUS_EVENT 0x0010 // event contains focus change
/* Flags for the WIN32 Console mouse event mask */
#define PMNT_MOUSE_CLICK 0x0000
#define PMNT_MOUSE_MOVED 0x0001
#define PMNT_DOUBLE_CLICK 0x0002
#ifdef INCL_16BIT
#pragma pack(1)
#endif
typedef struct _PM_MOUSE_INPUT_RECORD {
USHORT EventMask;
ULONG Time;
USHORT absY;
USHORT absX;
} PM_MOUSE_INPUT_RECORD;
#define PMNT_SQ_KBD 1 /* See ..\h\pmwinp.h, SQ_XXX */
#define PMNT_SQ_MOU 2
typedef struct _PM_INPUT_RECORD {
USHORT EventType;
union
{
PM_KEY_INPUT_RECORD KeyEvent;
PM_MOUSE_INPUT_RECORD MouseEvent;
} Event;
} PM_INPUT_RECORD;
#ifdef INCL_16BIT
#pragma pack ()
#endif
#ifdef INCL_16BIT
#pragma pack (4) /* Because structures are aligned to DWORD in 32-bit DLL */
#endif
#ifndef INCL_16BIT
#if DBG
#define KdPrint(_x_) DbgPrint _x_
#else
#define KdPrint(_x_)
#endif // else of DBG
#endif // else of INCL_16BIT
/***************************************************************************/
/* PMNTDD.SYS definitions */
/***************************************************************************/
#define IOCTL_PMNT_IO_MAP 0L
#define IOCTL_PMNT_MEM_MAP 1L
#define IOCTL_PMNT_REGISTER_HARDWARE 2L
#ifndef INCL_16BIT
#include "devioctl.h"
#define PMNTDD_DEVICE_TYPE FILE_DEVICE_BEEP
#define PMNTDD_DEVICE_NAME "\\Device\\PMNTDD"
#define PMNTDD_DEVICE_NAME_U L"\\Device\\PMNTDD"
#define IOCTL_PMNTDD_IO_MAP CTL_CODE((unsigned long)PMNTDD_DEVICE_TYPE, IOCTL_PMNT_IO_MAP, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_PMNTDD_MEM_MAP CTL_CODE((unsigned long)PMNTDD_DEVICE_TYPE, IOCTL_PMNT_MEM_MAP, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_PMNTDD_REGISTER_HARDWARE \
CTL_CODE((unsigned long)PMNTDD_DEVICE_TYPE, IOCTL_PMNT_REGISTER_HARDWARE, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif // ndef INCL_16BIT
/* Data types for the PMNTRegisterDisplayHardware routine */
#define PMNT_IOPM_DATA_TYPE_PORT 0L
#define PMNT_IOPM_DATA_TYPE_MEMORY 1L
typedef struct _PMNT_IOPM_DATA_ENTRY {
ULONG Base;
ULONG Length;
} PMNT_IOPM_DATA_ENTRY, *PPMNT_IOPM_DATA_ENTRY;
typedef struct _PMNT_IOPM_DATA {
ULONG EntryType; // PMNT_IOPM_DATA_TYPE_PORT or PMNT_IOPM_DATA_TYPE_MEMORY
ULONG NumEntries;
PMNT_IOPM_DATA_ENTRY Entry[1];
} PMNT_IOPM_DATA, *PPMNT_IOPM_DATA;
typedef struct _PMNT_IOPM_IOCTL_DATA
{
ULONG ThreadHandle;
PMNT_IOPM_DATA DriverData;
} PMNT_IOPM_IOCTL_DATA, *PPMNT_IOPM_IOCTL_DATA;
/* Data types for the PMNTMemMap routine */
//BUGBUG - needed anymore ???
typedef struct _PMNT_MEM_DATA
{
ULONG PhysicalAddress;
ULONG VirtualAddress;
ULONG Length;
} PMNT_MEM_DATA, *PPMNT_MEM_DATA;
typedef struct _PMNT_MEMMAP_RESULTS
{
ULONG VirtualAddress;
ULONG Length;
} PMNT_MEMMAP_RESULTS;
/* Data structure for passing parameters to PMNTDD.SYS via PMNT.DLL */
typedef struct _PMNT_IOCTL_DD_IOCTL_PARAMS
{
ULONG Request;
ULONG InputBuffer;
ULONG InputBufferLength;
ULONG OutputBuffer;
ULONG OutputBufferLength;
} PMNT_IOCTL_DD_IOCTL_PARAMS;
/* IOCTL codes for the PMNT.DLL PMNTIOCTL service */
#define PMNT_IOCTL_DD_IOCTL 2 /* PMNTDD.SYS IOCTL services */
#define PMNT_IOCTL_DUMP_SEGMENT_TABLE 3 /* Debug service - dump segment table */
#define PMNT_IOCTL_HIDE_WIN32_WINDOW 4 /* Hide WIN32 Console window - for CBA */
#ifdef INCL_16BIT
#pragma pack () /* Restore default */
#endif
#ifdef INCL_16BIT
/***************************************************************************/
/* PMNT.DLL exported services which can be called directly without using */
/* PMNT.LIB. */
/***************************************************************************/
extern VOID APIENTRY PMNTSetFullScreen(USHORT Register);
extern USHORT APIENTRY PMNTGetWin32Hwnd(ULONG far *pWin32ShellHwnd);
extern USHORT APIENTRY PMNTSetFocus(ULONG Win32Hwnd);
extern USHORT APIENTRY PMNTCloseWindow(VOID);
extern USHORT APIENTRY PMNTGetNextEvent(PMNT_INPUT_RECORD far *ppm_input_rec);
extern USHORT APIENTRY PMNTGetPgmName(char far *Buffer, short BufferLength);
extern USHORT APIENTRY PMNTSetConsoleTitle(PSZ Buffer);
extern USHORT APIENTRY PMNTGetFullScreen(ULONG Operation);
extern USHORT APIENTRY PMNTIOCTL(USHORT req, PVOID pin, PVOID pout);
extern VOID APIENTRY PMNTDbgPrint(PSZ str, ULONG l1, ULONG l2, ULONG l3, ULONG l4);
extern USHORT APIENTRY PMNTMemMap(PUSHORT PSel);
extern USHORT APIENTRY PMNTSetPMshellFlag(VOID);
extern VOID APIENTRY PMNTGetSystemTime(PULONG pTime);
extern USHORT APIENTRY PMNTRegisterDisplayAdapter(PMNT_IOPM_DATA far *MemoryRange, PMNT_IOPM_DATA far *IORange, USHORT col, USHORT row);
extern USHORT APIENTRY PMNTIOMap(VOID);
extern USHORT APIENTRY PMNTIsSessionRoot(VOID);
extern USHORT APIENTRY PMNTIdentifyCodeSelector( USHORT, PVOID );
extern USHORT APIENTRY PMNTCreateHiddenThread(PVOID pfnFun, PUSHORT pTid, PBYTE pbStack);
extern USHORT APIENTRY PMNTProcessIsPMShell(VOID);
extern USHORT APIENTRY PMNTQueryScreenSize(PUSHORT xRight, PUSHORT yTop);
extern USHORT APIENTRY PMNTCreateFontIndirect(PVOID lplf);
extern USHORT APIENTRY PMNTGetTextMetrics(ULONG ulFont, PVOID lptm);
extern USHORT APIENTRY PMNTGetStringBitmap(ULONG ulFont, PSZ lpszStr, ULONG cbStr, ULONG cbData, PVOID lpSB);
extern USHORT APIENTRY PMNTDeleteObject(ULONG ulFont);
extern USHORT APIENTRY PMNTGetEUDCTimeStamp(VOID);
extern USHORT APIENTRY PMNTDisableWin32IME(VOID);
extern USHORT APIENTRY PMNTSetShutdownPriority(ULONG NewPriority, USHORT Disable);
/***************************************************************************/
/* Services provided by PMNT.LIB */
/***************************************************************************/
extern VOID _cdecl far PMNTPrint(PSZ str, ...);
extern USHORT _cdecl far PMNTCreateThread(PFN Thread, USHORT StackSize);
#endif // INCL_16BIT
#ifdef INCL_32BIT
/* Values returned by the server to specify type of application loaded */
#define APPTYPE_CHARMODE 0
#define APPTYPE_PM 1
#define APPTYPE_PMSHELL 2
#define APPTYPE_PMSHELL_CHILD 4
extern ULONG PMFlags;
#define ProcessIsPMProcess() (PMFlags & APPTYPE_PM)
#define ProcessIsPMShell() (PMFlags & APPTYPE_PMSHELL)
#define ProcessIsPMApp() (ProcessIsPMProcess() && !ProcessIsPMShell())
#define ProcessIsPMShellChild() (PMFlags & APPTYPE_PMSHELL_CHILD)
#define SetPMShellFlag() PMFlags |= APPTYPE_PMSHELL;
#define SetPMAppFlag() PMFlags |= APPTYPE_PM;
/***************************************************************************/
/* PM\NT specific error codes and popup */
/***************************************************************************/
#define ERROR_PMSHELL_NOT_UP 0xff01
#define ERROR_2ND_PMSHELL 0xff02
#define ERROR_PMSHELL_FULLSCREEN 0xff03
extern VOID Ow2PMShellErrorPopup(PSZ AppName,int rc);
#endif //INCL_32BIT
#endif /* _PMNTINCLUDE_ */