323 lines
10 KiB
C
323 lines
10 KiB
C
// CONSOLE.H
|
||
//
|
||
// (C) Copyright Microsoft Corp., 1988-1994
|
||
//
|
||
// Interfaces for the console
|
||
//
|
||
// Origin: Chicago
|
||
//
|
||
// Change history:
|
||
//
|
||
// Date Who Description
|
||
// --------- --------- -------------------------------------------------
|
||
// 15-Apr-93 Steve Lewin-Berlin (Cypress Software) created
|
||
// 15-Feb-94 JonT Code cleanup and precompiled headers
|
||
|
||
#include <vmdapriv.h>
|
||
|
||
// Console flags
|
||
// WARNING: Don't change these without updating vcond\vconsole.h
|
||
|
||
#define CF_FullscreenSizeOK 1 // ON if switch to fullscreen allowed
|
||
// (available)
|
||
// (available)
|
||
#define CF_InputEOF 8 // ON if input EOF not consumed yet
|
||
#define CF_Fullscreen 16 // ON if console is in full screen mode
|
||
#define CF_ConagentTop 32 // ON if conagent is top level process in console
|
||
#define CF_AttributeSet 64 // ON if attribute specified
|
||
#define CF_Closing 128 // ON if not accepting new process attaches
|
||
#define CF_ConagentWasHere 256 // ON if a kernel-launched conagent successfully rendezvous'd with conapp
|
||
#define CF_PendingSetTitle 512 // ON if SetConsoleTitle() message pending
|
||
#define CF_ConagentIsDone 1024 // ON if CF_Closing on and conagent is finished
|
||
#ifdef NEC_98
|
||
#define CF_ForceSetNative 2048 // ON if temporary native mode
|
||
#endif //NEC_98
|
||
|
||
|
||
// Returned by VCOND_ReadInput
|
||
|
||
#define READ_EOF 0x80000000
|
||
|
||
// Screen buffer state
|
||
//
|
||
typedef enum _SB_STATE {
|
||
SB_PHYSICAL,
|
||
SB_NATIVE,
|
||
SB_MEMORY
|
||
} SB_STATE;
|
||
|
||
// Screen buffer flags (bit masks)
|
||
#define fCursorVisible 1
|
||
#define fAttributeValid 2
|
||
#define fChanged 4
|
||
|
||
// Other defaults, etc
|
||
|
||
#define DEFAULT_ATTRIBUTE 07
|
||
|
||
#define SetFlag(f, mask) (f |= (mask))
|
||
#define ClearFlag(f, mask) (f &= (~mask))
|
||
#define TestFlag(f, mask) (f & (mask))
|
||
|
||
//----------------------------------------------------------------
|
||
// Global variables
|
||
//----------------------------------------------------------------
|
||
|
||
extern HANDLE hheapConsole;
|
||
|
||
//----------------------------------------------------------------
|
||
// Macros
|
||
//----------------------------------------------------------------
|
||
|
||
|
||
#define Coord2Dword(c) ( * (DWORD *) &(c) )
|
||
#define Dword2Coord(c) ( * (COORD *) &(c) )
|
||
|
||
#define LockConsole(pConsole) EnterCrst(&(pConsole->csCRST))
|
||
#define UnlockConsole(pConsole) LeaveCrst(&(pConsole->csCRST));
|
||
|
||
#define LockSB(pSB) EnterCrst(&(((SCREENBUFFER *)(pSB))->csCRST));
|
||
#define UnlockSB(pSB) LeaveCrst(&(((SCREENBUFFER *)(pSB))->csCRST));
|
||
|
||
|
||
|
||
#define MAXCOLS 1024
|
||
|
||
// WARNING: if this definition changes, update the definition in
|
||
// VMDOSAPP\TTYNGRAB.C
|
||
//
|
||
typedef struct _countedattr {
|
||
WORD count;
|
||
char Attr;
|
||
} COUNTEDATTR;
|
||
|
||
// WARNING: if this definition changes, update the definition in
|
||
// VMDOSAPP\TTYNGRAB.C
|
||
//
|
||
typedef struct _packedline {
|
||
COUNTEDATTR *AttribArray; // If not NULL, points to run-length encoded attribute array
|
||
char Attrib; // Attribute for entire line if AttribArray is NULL
|
||
char ascii[]; // Character data
|
||
} PACKEDLINE;
|
||
|
||
|
||
typedef PACKEDLINE *SCREEN[];
|
||
|
||
//----------------------------------------------------------------
|
||
// SCREENBUFFER object
|
||
//
|
||
// WARNING: if this definition changes, update the definition in
|
||
// VMDOSAPP\GRABEMU.ASM
|
||
//
|
||
typedef struct _screen_buffer {
|
||
// WinOldAp references the following fields:
|
||
COMMON_OBJECT // base of every object structure
|
||
COORD cBufsize; // Number of rows/cols in buffer
|
||
SCREEN * Screen; // Screen data
|
||
COORD cCursorPosition; // Current position of cursor
|
||
DWORD dwCursorSize; // Percent of cursor fill (1 - 100)
|
||
SMALL_RECT srWindow; // Window (top, left, bottom, right of visible region)
|
||
WORD flags; // Screen buffer flags
|
||
// WinOldAp does not reference the rest of the structure
|
||
SB_STATE State; // Physical, Native, or Memory
|
||
CRST csCRST; // critical section for synching access to internal data
|
||
struct _console *pConsole; // Pointer to owning console
|
||
WORD wAttribute; // Current default text attribute (color)
|
||
DWORD flOutputMode; // Output mode flags
|
||
#ifdef NEC_98
|
||
BYTE chDBCSLead; // Holds if last string terinated at DBCS lead byte
|
||
#endif
|
||
} SCREENBUFFER;
|
||
|
||
#define MAXINCHARS 256 // Number of input characters to buffer
|
||
|
||
typedef struct _inbuffer {
|
||
char cbBuf[MAXINCHARS]; // Input buffer
|
||
SHORT curPos[MAXINCHARS]; // Remembers cursor pos
|
||
WORD wReadIdx; // Next index to read from
|
||
WORD wWriteIdx; // Next index to write to
|
||
WORD wBufCount; // Count of characters in buffer
|
||
#ifdef DBCS
|
||
WORD wStatus; // DBCS status flags
|
||
#endif
|
||
} INBUFFER;
|
||
|
||
#ifdef DBCS
|
||
// Status flag for DBCS handling
|
||
#define BEGIN_TRAILBYTE 0x0001 // Buffer begin with DBCS trail byte
|
||
#endif
|
||
|
||
#define MAXTITLESIZE cbPathMax
|
||
|
||
//----------------------------------------------------------------
|
||
// CONSOLE object
|
||
//
|
||
// WARNING: if this definition changes, update the definition in
|
||
// VMDOSAPP\GRABEMU.ASM and the definition in
|
||
// CORE\WIN32\VCOND\VCONSOLE.H
|
||
//
|
||
typedef struct _console {
|
||
// WinOldAp references the following fields:
|
||
COMMON_NSOBJECT // base of every object structure - waitable (Input Buffer)
|
||
SCREENBUFFER * psbActiveScreenBuffer; // Pointer to active screen buffer (if any)
|
||
COORD cMaxSize; // Max size of this console (maintained by WinOldAp)
|
||
DWORD flags; // Various console flags
|
||
DWORD pidOwner; // pid of first console "owner"
|
||
DWORD tidOwner; // tid of first console "owner"
|
||
// WinOldAp does not reference the rest of the structure
|
||
COORD cOriginalSize; // Size inherited from DOS
|
||
CRST csCRST; // critical section for synching access to lists, etc.
|
||
struct _lst * plstOwners; // pointer to list of owners (processes)
|
||
struct _lst * plstBuffers; // pointer to list of screen buffers
|
||
DWORD dwLastExitCode; // Most recent exit code by a process in this console group
|
||
char szTitle[MAXTITLESIZE]; // Title (truncated and displayed by WinOldAp)
|
||
DWORD VID; // ID used by VCOND
|
||
HANDLE hVM; // Process handle of VM which supports this console for i/o
|
||
HANDLE hDisplay; // hwnd of display port (used by WinOldAp)
|
||
PDB * ppdbControlFocus; // Process which holds current control focus for this console
|
||
PDB * ppdbTermConProvider; // console provider to terminate
|
||
INBUFFER inbuf; // Input buffer
|
||
WORD wDefaultAttribute; // Default screen buffer attribute
|
||
struct _evt * evtDoneWithVM; // Signalled when all VM communication done
|
||
} CONSOLE;
|
||
|
||
|
||
|
||
//----------------------------------------------------------------
|
||
// Function Prototypes
|
||
//
|
||
|
||
//----------------------------------------------------------------
|
||
// Console
|
||
//----------------------------------------------------------------
|
||
|
||
|
||
VOID KERNENTRY SetControlFocus(void);
|
||
|
||
DWORD KERNENTRY CreateConsole(HANDLE hvm, HANDLE hwnd);
|
||
|
||
VOID KERNENTRY DisposeConsole(CONSOLE *pConsole);
|
||
|
||
DWORD KERNENTRY AttachProcessToConsole(CONSOLE *pConsole, PTDB ptdb, PPDB ppdb);
|
||
|
||
VOID KERNENTRY UnattachProcessFromConsole(CONSOLE *pConsole, PDB *ppdb);
|
||
|
||
VOID KERNENTRY RemoveOwnerFromList(CONSOLE *pConsole, PDB *ppdb);
|
||
|
||
DWORD KERNENTRY AddScreenBufferToList(CONSOLE *pConsole, SCREENBUFFER *pSB);
|
||
|
||
VOID KERNENTRY RemoveScreenBufferFromList(CONSOLE *pConsole, SCREENBUFFER *pSB);
|
||
|
||
VOID KERNENTRY DisposeScreenBuffer(SCREENBUFFER *pSB);
|
||
|
||
VOID KERNENTRY SetConsoleStartupInfo(PDB *ppdb, char *szFile);
|
||
|
||
//----------------------------------------------------------------
|
||
// ScreenBuffer (CONSBUF)
|
||
//----------------------------------------------------------------
|
||
|
||
BOOL KERNENTRY SB_SetActive(SCREENBUFFER *pSB);
|
||
|
||
BOOL KERNENTRY SB_SetCursorPosition(SCREENBUFFER *pSB,
|
||
COORD dwCursorPosition);
|
||
|
||
SCREENBUFFER * KERNENTRY SB_Create(CONSOLE *pConsole,
|
||
BOOL bAllocateMemory);
|
||
|
||
BOOL KERNENTRY SB_GetInfo(SCREENBUFFER *pSB,
|
||
CONSOLE_SCREEN_BUFFER_INFO *lpCSBI);
|
||
|
||
BOOL KERNENTRY SB_SetCursorInfo(SCREENBUFFER *pSB,
|
||
CONST CONSOLE_CURSOR_INFO *lpConsoleCursorInfo);
|
||
|
||
DWORD KERNENTRY SB_StringOut(SCREENBUFFER *pSB,
|
||
LPSTR lpBuffer,
|
||
DWORD cchToWrite);
|
||
|
||
VOID KERNENTRY SB_WriteConsoleOutput(SCREENBUFFER *pSB,
|
||
CONST CHAR_INFO *lpBuffer,
|
||
COORD srcSize,
|
||
COORD srcOrigin,
|
||
SMALL_RECT *lpsrDest);
|
||
|
||
VOID KERNENTRY SB_WriteConsoleOutputCharacters(SCREENBUFFER *pSB,
|
||
LPCSTR lpBuffer,
|
||
DWORD nChars,
|
||
COORD cLoc);
|
||
|
||
VOID KERNENTRY SB_ReadConsoleOutputCharacters(SCREENBUFFER *pSB,
|
||
LPSTR lpCharacter,
|
||
DWORD nLength,
|
||
COORD cLoc);
|
||
|
||
VOID KERNENTRY SB_ReadConsoleOutputAttributes(SCREENBUFFER *pSB,
|
||
LPWORD lpAttribute,
|
||
DWORD nLength,
|
||
COORD cLoc);
|
||
|
||
VOID KERNENTRY SB_FillConsoleOutputAttribute(SCREENBUFFER *pSB,
|
||
WORD wAttribute,
|
||
DWORD nLength,
|
||
COORD cLoc);
|
||
|
||
VOID KERNENTRY SB_WriteAttribute(SCREENBUFFER *pSB,
|
||
CONST WORD *lpAttribute,
|
||
DWORD nLength,
|
||
COORD cLoc);
|
||
|
||
VOID KERNENTRY SB_GetCursorInfo(SCREENBUFFER *pSB,
|
||
PCONSOLE_CURSOR_INFO lpConsoleCursorInfo);
|
||
|
||
VOID KERNENTRY SB_FillConsoleOutputCharacter(SCREENBUFFER *pSB,
|
||
char cCharacter,
|
||
DWORD nLength,
|
||
COORD cLoc);
|
||
|
||
VOID KERNENTRY SB_SetAttribute(SCREENBUFFER *pSB,
|
||
WORD attr);
|
||
|
||
VOID KERNENTRY SB_ReadOutput(SCREENBUFFER *pSB,
|
||
PCHAR_INFO lpBuffer,
|
||
COORD dwBufferSize,
|
||
COORD dwBufferCoord,
|
||
PSMALL_RECT lpReadRegion);
|
||
|
||
BOOL KERNENTRY SB_Scroll(SCREENBUFFER *pSB,
|
||
CONST SMALL_RECT *psrScroll,
|
||
CONST SMALL_RECT *psrClip,
|
||
COORD cDest,
|
||
CONST CHAR_INFO *pciFill);
|
||
|
||
BOOL KERNENTRY SB_SetWindow(SCREENBUFFER *pSB,
|
||
BOOL bAbsolute,
|
||
CONST SMALL_RECT *psrWindow);
|
||
|
||
DWORD KERNENTRY SB_GetLargestConsole(SCREENBUFFER *pSB);
|
||
|
||
BOOL KERNENTRY SB_SetSize(SCREENBUFFER *pSB, COORD cSize);
|
||
|
||
HANDLE KERNENTRY NewHandleToActiveScreenBuffer(PDB *ppdb);
|
||
|
||
HANDLE KERNENTRY NewHandleToInputBuffer(PDB *ppdb);
|
||
|
||
CONSOLE * KERNENTRY CreateNewConsole(WORD wShowWindow);
|
||
|
||
BOOL KERNENTRY FInitConsoleHeap(void);
|
||
|
||
VOID KERNENTRY TerminateConsoleHeap(VOID);
|
||
|
||
VOID * KERNENTRY ConsoleAlloc(DWORD cbSize);
|
||
|
||
VOID * KERNENTRY ConsoleAlloc0(DWORD cbSize);
|
||
|
||
BOOL KERNENTRY ConsoleFree(VOID *pvMem);
|
||
|
||
VOID KERNENTRY SB_ReturnToPhysical(CONSOLE *pConsole);
|
||
|
||
BOOL KERNENTRY SB_ForceToPhysical(CONSOLE *pConsole);
|
||
|
||
BOOL KERNENTRY InternalReadConsoleChars(CONSOLE * pConsole,
|
||
LPSTR lpBuffer,
|
||
DWORD cchToRead,
|
||
LPDWORD lpNumberOfCharsRead);
|
||
|