/*++ Copyright (c) 1985 - 1999, Microsoft Corporation Module Name: consrv.h Abstract: This module contains the include files and definitions for the console server DLL. Author: Therese Stowell (thereses) 16-Nov-1990 Revision History: --*/ #if DBG && defined(DEBUG_PRINT) #define _DBGFONTS 0x00000001 #define _DBGFONTS2 0x00000002 #define _DBGCHARS 0x00000004 #define _DBGOUTPUT 0x00000008 #define _DBGFULLSCR 0x00000010 #define _DBGALL 0xFFFFFFFF extern ULONG gDebugFlag; #define DBGFONTS(_params_) {if (gDebugFlag & _DBGFONTS) DbgPrint _params_ ; } #define DBGFONTS2(_params_) {if (gDebugFlag & _DBGFONTS2) DbgPrint _params_ ; } #define DBGCHARS(_params_) {if (gDebugFlag & _DBGCHARS) DbgPrint _params_ ; } #define DBGOUTPUT(_params_) {if (gDebugFlag & _DBGOUTPUT) DbgPrint _params_ ; } #define DBGFULLSCR(_params_) {if (gDebugFlag & _DBGFULLSCR)DbgPrint _params_ ; } #define DBGPRINT(_params_) DbgPrint _params_ #else #define DBGFONTS(_params_) #define DBGFONTS2(_params_) #define DBGCHARS(_params_) #define DBGOUTPUT(_params_) #define DBGFULLSCR(_params_) #define DBGPRINT(_params_) #endif #define CONSOLE_MAX_FONT_NAME_LENGTH 256 #define DATA_CHUNK_SIZE 8192 #define TMP_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 0)) #define BMP_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 1)) #define ALIAS_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 2)) #define HISTORY_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 3)) #define TITLE_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 4)) #define HANDLE_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 5)) #define CONSOLE_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 6)) #define ICON_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 7)) #define BUFFER_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 8)) #define WAIT_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 9)) #define FONT_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 10)) #define SCREEN_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 11)) #if defined(FE_SB) #define TMP_DBCS_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 12)) #define SCREEN_DBCS_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 13)) #define EUDC_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 14)) #define CONVAREA_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 15)) #define IME_TAG (RTL_HEAP_MAKE_TAG(dwConBaseTag, 16)) #endif #define GetWindowConsole(hWnd) (PCONSOLE_INFORMATION)GetWindowLongPtr((hWnd), GWLP_USERDATA) /* * Used to store some console attributes for the console. This is a means * to cache the color in the extra-window-bytes, so USER/KERNEL can get * at it for hungapp drawing. The window-offsets are defined in NTUSER\INC. * * The other macros are just convenient means for setting the other window * bytes. */ #define SetConsoleBkColor(hw,clr) SetWindowLong(hw, GWL_CONSOLE_BKCOLOR, clr) #define SetConsolePid(hw,pid) SetWindowLong(hw, GWL_CONSOLE_PID, pid) #define SetConsoleTid(hw,tid) SetWindowLong(hw, GWL_CONSOLE_TID, tid) /* * helpful macros */ #define NELEM(array) (sizeof(array)/sizeof(array[0])) #define PACKCOORD(pt) (MAKELONG(((pt).X), ((pt).Y))) // Text Information from PSCREEN_INFORMATION __inline BYTE SCR_FAMILY(PSCREEN_INFORMATION pScreen) { return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.Family; } __inline DWORD SCR_FONTNUMBER(PSCREEN_INFORMATION pScreen) { return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.FontNumber; } __inline LPWSTR SCR_FACENAME(PSCREEN_INFORMATION pScreen) { return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.FaceName; } __inline COORD SCR_FONTSIZE(PSCREEN_INFORMATION pScreen) { return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.FontSize; } __inline LONG SCR_FONTWEIGHT(PSCREEN_INFORMATION pScreen) { return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.Weight; } __inline UINT SCR_FONTCODEPAGE(PSCREEN_INFORMATION pScreen) { return pScreen->BufferInfo.TextInfo.CurrentTextBufferFont.FontCodePage; } // Text Information from PCONSOLE_INFORMATION #define CON_FAMILY(pCon) SCR_FAMILY((pCon)->CurrentScreenBuffer) #define CON_FONTNUMBER(pCon) SCR_FONTNUMBER((pCon)->CurrentScreenBuffer) #define CON_FACENAME(pCon) SCR_FACENAME((pCon)->CurrentScreenBuffer) #define CON_FONTSIZE(pCon) SCR_FONTSIZE((pCon)->CurrentScreenBuffer) #define CON_FONTWEIGHT(pCon) SCR_FONTWEIGHT((pCon)->CurrentScreenBuffer) #define CON_FONTCODEPAGE(pCon) SCR_FONTCODEPAGE((pCon)->CurrentScreenBuffer) #if defined(FE_SB) extern BOOLEAN gfIsDBCSACP; // TRUE if System ACP is associated with DBCS font #define CONSOLE_IS_DBCS_ENABLED() (gfIsDBCSACP) #define CONSOLE_IS_IME_ENABLED() (gfIsDBCSACP) #define CONSOLE_IS_DBCS_OUTPUTCP(Console) ((Console)->fIsDBCSOutputCP) #define CONSOLE_IS_DBCS_CP(Console) ((Console)->fIsDBCSCP) #else // FE_SB #define CONSOLE_IS_DBCS_ENABLED() (FALSE) #define CONSOLE_IS_IME_ENABLED() (FALSE) #endif // FE_SB #ifdef UNICODE #define LoadStringEx LoadStringExW #else #define LoadStringEx LoadStringExA #endif // // Cache the heap pointer for use by memory routines. // extern PWIN32HEAP pConHeap; extern DWORD dwConBaseTag; // // Wrappers for console heap code. // #define ConsoleHeapAlloc(Flags, Size) \ Win32HeapAlloc(pConHeap, Size, Flags, Flags) #define ConsoleHeapReAlloc(Flags, Address, Size) \ Win32HeapReAlloc(pConHeap, Address, Size, Flags) #if DBG #define ConsoleHeapFree(Address) \ { \ Win32HeapFree(pConHeap, Address); \ Address = IntToPtr(0xBAADF00D); \ } #else #define ConsoleHeapFree(Address) \ { \ Win32HeapFree(pConHeap, Address); \ } #endif #define ConsoleHeapSize(Address) \ Win32HeapSize(pConHeap, Address) // // handle.c // #if DBG VOID RefConsole( PCONSOLE_INFORMATION Console); VOID DerefConsole( PCONSOLE_INFORMATION Console); #else __inline VOID RefConsole( PCONSOLE_INFORMATION Console) { Console->RefCount += 1; } __inline VOID DerefConsole( PCONSOLE_INFORMATION Console) { Console->RefCount -= 1; } #endif NTSTATUS ConsoleAddProcessRoutine( IN PCSR_PROCESS ParentProcess, IN PCSR_PROCESS Process ); NTSTATUS DereferenceConsoleHandle( IN HANDLE ConsoleHandle, OUT PCONSOLE_INFORMATION *Console ); NTSTATUS AllocateConsoleHandle( OUT PHANDLE Handle ); NTSTATUS FreeConsoleHandle( IN HANDLE Handle ); NTSTATUS ValidateConsole( IN PCONSOLE_INFORMATION Console ); NTSTATUS ApiPreamble( IN HANDLE ConsoleHandle, OUT PCONSOLE_INFORMATION *Console ); NTSTATUS RevalidateConsole( IN HANDLE ConsoleHandle, OUT PCONSOLE_INFORMATION *Console ); NTSTATUS InitializeConsoleHandleTable( VOID ); #if DBG VOID LockConsoleHandleTable(VOID); VOID UnlockConsoleHandleTable(VOID); VOID LockConsole( IN PCONSOLE_INFORMATION Console ); #else #define LockConsoleHandleTable() RtlEnterCriticalSection(&ConsoleHandleLock) #define UnlockConsoleHandleTable() RtlLeaveCriticalSection(&ConsoleHandleLock) #define LockConsole(Con) RtlEnterCriticalSection(&(Con)->ConsoleLock) #endif // DBG #define ConvertAttrToRGB(Con, Attr) ((Con)->ColorTable[(Attr) & 0x0F]) BOOLEAN UnProtectHandle( HANDLE hObject ); NTSTATUS MapEventHandles( IN HANDLE ClientProcessHandle, IN PCONSOLE_INFORMATION Console, IN OUT PCONSOLE_INFO ConsoleInfo ); NTSTATUS AllocateConsole( IN HANDLE ConsoleHandle, IN LPWSTR Title, IN USHORT TitleLength, IN HANDLE ClientProcessHandle, OUT PHANDLE StdIn, OUT PHANDLE StdOut, OUT PHANDLE StdErr, OUT PCONSOLE_PER_PROCESS_DATA ProcessData, IN OUT PCONSOLE_INFO ConsoleInfo, IN BOOLEAN WindowVisible, IN DWORD ConsoleThreadId ); VOID DestroyConsole( IN PCONSOLE_INFORMATION Console ); VOID FreeCon( IN PCONSOLE_INFORMATION Console ); VOID InsertScreenBuffer( IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo ); VOID RemoveScreenBuffer( IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo ); VOID FreeProcessData( IN PCONSOLE_PER_PROCESS_DATA ProcessData ); NTSTATUS AllocateIoHandle( IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN ULONG HandleType, OUT PHANDLE Handle ); NTSTATUS GrowIoHandleTable( IN PCONSOLE_PER_PROCESS_DATA ProcessData ); NTSTATUS FreeIoHandle( IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN HANDLE Handle ); NTSTATUS DereferenceIoHandleNoCheck( IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN HANDLE Handle, OUT PHANDLE_DATA *HandleData ); NTSTATUS DereferenceIoHandle( IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN HANDLE Handle, IN ULONG HandleType, IN ACCESS_MASK Access, OUT PHANDLE_DATA *HandleData ); BOOLEAN InitializeInputHandle( PHANDLE_DATA HandleData, PINPUT_INFORMATION InputBuffer ); VOID InitializeOutputHandle( PHANDLE_DATA HandleData, PSCREEN_INFORMATION ScreenBuffer ); ULONG SrvVerifyConsoleIoHandle( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); // // share.c // NTSTATUS ConsoleAddShare( IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN OUT PCONSOLE_SHARE_ACCESS ShareAccess, IN OUT PHANDLE_DATA HandleData ); NTSTATUS ConsoleDupShare( IN ACCESS_MASK DesiredAccess, IN ULONG DesiredShareAccess, IN OUT PCONSOLE_SHARE_ACCESS ShareAccess, IN OUT PHANDLE_DATA TargetHandleData ); NTSTATUS ConsoleRemoveShare( IN ULONG DesiredAccess, IN ULONG DesiredShareAccess, IN OUT PCONSOLE_SHARE_ACCESS ShareAccess ); // // find.c // #define SEARCH_STRING_LENGTH (80) VOID DoFind( IN PCONSOLE_INFORMATION Console ); USHORT SearchForString( IN PSCREEN_INFORMATION ScreenInfo, IN PWSTR SearchString, IN USHORT StringLength, IN BOOLEAN IgnoreCase, IN BOOLEAN Reverse, IN BOOLEAN SearchAndSetAttr, IN ULONG Attr, OUT PCOORD StringPosition ); // // output.c // VOID ScrollScreen( IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT ScrollRect, IN PSMALL_RECT MergeRect, IN COORD TargetPoint ); VOID SetProcessForegroundRights( IN PCSR_PROCESS Process, IN BOOL Foreground ); VOID SetProcessFocus( IN PCSR_PROCESS Process, IN BOOL Foreground ); VOID ModifyConsoleProcessFocus( IN PCONSOLE_INFORMATION Console, IN BOOL Foreground ); VOID InitializeSystemMetrics( VOID ); VOID InitializeScreenInfo( VOID ); NTSTATUS ReadScreenBuffer( IN PSCREEN_INFORMATION ScreenInformation, OUT PCHAR_INFO Buffer, IN OUT PSMALL_RECT ReadRegion ); NTSTATUS WriteScreenBuffer( IN PSCREEN_INFORMATION ScreenInformation, OUT PCHAR_INFO Buffer, IN OUT PSMALL_RECT WriteRegion ); NTSTATUS DoCreateScreenBuffer( IN PCONSOLE_INFORMATION Console, IN PCONSOLE_INFO ConsoleInfo ); NTSTATUS CreateScreenBuffer( OUT PSCREEN_INFORMATION *ScreenInformation, IN COORD dwWindowSize OPTIONAL, IN DWORD nFont OPTIONAL, IN COORD dwScreenBufferSize OPTIONAL, IN CHAR_INFO Fill, IN CHAR_INFO PopupFill, IN PCONSOLE_INFORMATION Console, IN DWORD Flags, IN PCONSOLE_GRAPHICS_BUFFER_INFO GraphicsBufferInfo OPTIONAL, OUT PVOID *lpBitmap, OUT HANDLE *hMutex, IN UINT CursorSize, IN LPWSTR FaceName ); VOID AbortCreateConsole( IN PCONSOLE_INFORMATION Console ); NTSTATUS CreateWindowsWindow( IN PCONSOLE_INFORMATION Console ); VOID DestroyWindowsWindow( IN PCONSOLE_INFORMATION Console ); NTSTATUS FreeScreenBuffer( IN PSCREEN_INFORMATION ScreenInformation ); NTSTATUS ReadOutputString( IN PSCREEN_INFORMATION ScreenInfo, OUT PVOID Buffer, IN COORD ReadCoord, IN ULONG StringType, IN OUT PULONG NumRecords // this value is valid even for error cases ); NTSTATUS InitializeScrollBuffer( VOID ); NTSTATUS GetScreenBufferInformation( IN PSCREEN_INFORMATION ScreenInfo, OUT PCOORD Size, OUT PCOORD CursorPosition, OUT PCOORD ScrollPosition, OUT PWORD Attributes, OUT PCOORD CurrentWindowSize, OUT PCOORD MaximumWindowSize ); VOID GetWindowLimits( IN PSCREEN_INFORMATION ScreenInfo, OUT PWINDOW_LIMITS WindowLimits ); NTSTATUS ResizeWindow( IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT WindowDimensions, IN BOOL DoScrollBarUpdate ); NTSTATUS ResizeScreenBuffer( IN PSCREEN_INFORMATION ScreenInfo, IN COORD NewScreenSize, IN BOOL DoScrollBarUpdate ); NTSTATUS ScrollRegion( IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT ScrollRectangle, IN PSMALL_RECT ClipRectangle OPTIONAL, IN COORD DestinationOrigin, IN CHAR_INFO Fill ); NTSTATUS SetWindowOrigin( IN PSCREEN_INFORMATION ScreenInfo, IN BOOLEAN Absolute, IN OUT COORD WindowOrigin ); VOID SetWindowSize( IN PSCREEN_INFORMATION ScreenInfo ); NTSTATUS SetActiveScreenBuffer( IN PSCREEN_INFORMATION ScreenInfo ); NTSTATUS QueueConsoleMessage( PCONSOLE_INFORMATION Console, UINT Message, WPARAM wParam, LPARAM lParam ); VOID ConsoleNotifyWinEvent( IN PCONSOLE_INFORMATION Console, IN DWORD Event, IN LONG idObjectType, IN LONG idObject); LRESULT APIENTRY ConsoleWindowProc( HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam ); VOID VerticalScroll( IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo, IN WORD ScrollCommand, IN WORD AbsoluteChange ); VOID HorizontalScroll( IN PSCREEN_INFORMATION ScreenInfo, IN WORD ScrollCommand, IN WORD AbsoluteChange ); VOID StreamScrollRegion( IN PSCREEN_INFORMATION ScreenInfo ); #if defined(FE_SB) VOID FindAttrIndex( IN PATTR_PAIR String, IN SHORT Index, OUT PATTR_PAIR *IndexedAttr, OUT PSHORT CountOfAttr ); VOID UpdateComplexRegion( IN PSCREEN_INFORMATION ScreenInfo, IN COORD FontSize ); SHORT ScrollEntireScreen( IN PSCREEN_INFORMATION ScreenInfo, IN SHORT ScrollValue, IN BOOL UpdateRowIndex ); VOID UpdateScrollBars( IN PSCREEN_INFORMATION ScreenInfo ); #endif VOID ReadRectFromScreenBuffer( IN PSCREEN_INFORMATION ScreenInfo, IN COORD SourcePoint, IN PCHAR_INFO Target, IN COORD TargetSize, IN PSMALL_RECT TargetRect ); VOID InitializeThreadMessages(VOID); NTSTATUS QueueThreadMessage( DWORD dwThreadId, UINT Message, WPARAM wParam, LPARAM lParam ); BOOL UnqueueThreadMessage( DWORD dwThreadId, UINT* pMessage, WPARAM* pwParam, LPARAM* plParam ); // // Drag/Drop on console windows (output.c) // UINT ConsoleDragQueryFile( IN HANDLE hDrop, IN PVOID lpFile, IN UINT cb ); VOID DoDrop ( IN WPARAM wParam, IN PCONSOLE_INFORMATION Console ); // // input.c // NTSTATUS ReadBuffer( IN PINPUT_INFORMATION InputInformation, OUT PVOID Buffer, IN ULONG Length, OUT PULONG EventsRead, IN BOOL Peek, IN BOOL StreamRead, OUT PBOOL ResetWaitEvent, IN BOOLEAN Unicode ); NTSTATUS ConsoleInputThread( IN PINPUT_THREAD_INIT_INFO pInputThreadInitInfo ); VOID StoreKeyInfo( IN PMSG msg ); VOID RetrieveKeyInfo( IN HWND hWnd, OUT PWORD pwVirtualKeyCode, OUT PWORD pwVirtualScanCode, IN BOOL FreeKeyInfo ); VOID ClearKeyInfo( IN HWND hWnd ); NTSTATUS ReadInputBuffer( IN PINPUT_INFORMATION InputInformation, OUT PINPUT_RECORD lpBuffer, IN OUT PDWORD nLength, IN BOOL Peek, IN BOOL WaitForData, IN BOOL StreamRead, IN PCONSOLE_INFORMATION Console, IN PHANDLE_DATA HandleData OPTIONAL, IN PCSR_API_MSG Message OPTIONAL, IN CSR_WAIT_ROUTINE WaitRoutine OPTIONAL, IN PVOID WaitParameter OPTIONAL, IN ULONG WaitParameterLength OPTIONAL, IN BOOLEAN WaitBlockExists OPTIONAL #if defined(FE_SB) , IN BOOLEAN Unicode #endif ); DWORD WriteInputBuffer( PCONSOLE_INFORMATION Console, PINPUT_INFORMATION InputBufferInformation, PINPUT_RECORD lpBuffer, DWORD nLength ); DWORD PrependInputBuffer( PCONSOLE_INFORMATION Console, PINPUT_INFORMATION InputBufferInformation, PINPUT_RECORD lpBuffer, DWORD nLength ); NTSTATUS CreateInputBuffer( IN ULONG NumberOfEvents OPTIONAL, IN PINPUT_INFORMATION InputBufferInformation #if defined(FE_SB) , IN PCONSOLE_INFORMATION Console #endif ); NTSTATUS ReinitializeInputBuffer( OUT PINPUT_INFORMATION InputBufferInformation ); VOID FreeInputBuffer( IN PINPUT_INFORMATION InputBufferInformation ); #if defined(FE_SB) VOID ProcessCreateConsoleWindow( IN LPMSG lpMsg ); NTSTATUS WaitForMoreToRead( IN PINPUT_INFORMATION InputInformation, IN PCSR_API_MSG Message OPTIONAL, IN CSR_WAIT_ROUTINE WaitRoutine OPTIONAL, IN PVOID WaitParameter OPTIONAL, IN ULONG WaitParameterLength OPTIONAL, IN BOOLEAN WaitBlockExists OPTIONAL ); ULONG GetControlKeyState( LPARAM lParam ); VOID TerminateRead( IN PCONSOLE_INFORMATION Console, IN PINPUT_INFORMATION InputInfo, IN DWORD Flag ); #endif NTSTATUS GetNumberOfReadyEvents( IN PINPUT_INFORMATION InputInformation, OUT PULONG NumberOfEvents ); NTSTATUS FlushInputBuffer( IN PINPUT_INFORMATION InputInformation ); NTSTATUS FlushAllButKeys( PINPUT_INFORMATION InputInformation ); NTSTATUS SetInputBufferSize( IN PINPUT_INFORMATION InputInformation, IN ULONG Size ); BOOL HandleSysKeyEvent( IN PCONSOLE_INFORMATION Console, IN HWND hWnd, IN UINT Message, IN WPARAM wParam, IN LPARAM lParam, IN PBOOL pbUnlockConsole ); VOID HandleKeyEvent( IN PCONSOLE_INFORMATION Console, IN HWND hWnd, IN UINT Message, IN WPARAM wParam, IN LPARAM lParam ); BOOL HandleMouseEvent( IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo, IN UINT Message, IN WPARAM wParam, IN LPARAM lParam ); VOID HandleMenuEvent( IN PCONSOLE_INFORMATION Console, IN DWORD wParam ); VOID HandleFocusEvent( IN PCONSOLE_INFORMATION Console, IN BOOL bSetFocus ); VOID HandleCtrlEvent( IN PCONSOLE_INFORMATION Console, IN DWORD EventType ); #define CONSOLE_SHUTDOWN_FAILED 0 #define CONSOLE_SHUTDOWN_SUCCEEDED 1 #define CONSOLE_SHUTDOWN_SYSTEM 2 int CreateCtrlThread( IN PCONSOLE_PROCESS_TERMINATION_RECORD ProcessHandleList, IN ULONG ProcessHandleListLength, IN PWCHAR Title, IN DWORD EventType, IN BOOL fForce ); VOID UnlockConsole( IN PCONSOLE_INFORMATION Console ); ULONG ShutdownConsole( IN HANDLE ConsoleHandle, IN DWORD dwFlags ); // // link.c // #define LINK_NOINFO 0 #define LINK_SIMPLEINFO 1 #define LINK_FULLINFO 2 DWORD GetLinkProperties( LPWSTR pszLinkName, LPVOID lpvBuffer, UINT cb ); DWORD GetTitleFromLinkName( IN LPWSTR szLinkName, OUT LPWSTR szTitle ); // // misc.c // VOID InitializeFonts( VOID ); BOOL InitializeCustomCP( VOID ); #define EF_NEW 0x0001 // a newly available face #define EF_OLD 0x0002 // a previously available face #define EF_ENUMERATED 0x0004 // all sizes have been enumerated #define EF_OEMFONT 0x0008 // an OEM face #define EF_TTFONT 0x0010 // a TT face #define EF_DEFFACE 0x0020 // the default face NTSTATUS EnumerateFonts( DWORD Flags ); VOID InitializeMouseButtons( VOID ); NTSTATUS GetMouseButtons( PULONG NumButtons ); NTSTATUS FindTextBufferFontInfo( IN PSCREEN_INFORMATION ScreenInfo, IN UINT CodePage, OUT PTEXT_BUFFER_FONT_INFO TextFontInfo ); NTSTATUS StoreTextBufferFontInfo( IN PSCREEN_INFORMATION ScreenInfo, IN ULONG FontIndex, IN COORD FontSize, IN BYTE FontFamily, IN LONG FontWeight, IN LPWSTR FaceName, IN UINT CodePage ); NTSTATUS RemoveTextBufferFontInfo( IN PSCREEN_INFORMATION ScreenInfo ); NTSTATUS GetNumFonts( OUT PULONG NumberOfFonts ); NTSTATUS GetAvailableFonts( IN PSCREEN_INFORMATION ScreenInfo, IN BOOLEAN MaximumWindow, OUT PVOID Buffer, IN OUT PULONG NumFonts ); NTSTATUS GetFontSize( IN DWORD FontIndex, OUT PCOORD FontSize ); NTSTATUS GetCurrentFont( IN PSCREEN_INFORMATION ScreenInfo, IN BOOLEAN MaximumWindow, OUT PULONG FontIndex, OUT PCOORD FontSize ); NTSTATUS SetFont( IN PSCREEN_INFORMATION ScreenInfo ); NTSTATUS SetScreenBufferFont( IN PSCREEN_INFORMATION ScreenInfo, IN ULONG FontIndex #if defined(FE_SB) , IN UINT CodePage #endif ); int ConvertToOem( IN UINT Codepage, IN LPWSTR Source, IN int SourceLength, OUT LPSTR Target, IN int TargetLength ); int ConvertInputToUnicode( IN UINT Codepage, IN LPSTR Source, IN int SourceLength, OUT LPWSTR Target, IN int TargetLength ); #if defined(FE_SB) WCHAR SB_CharToWcharGlyph( IN UINT Codepage, IN char Ch ); WCHAR SB_CharToWchar( IN UINT Codepage, IN char Ch ); #else WCHAR CharToWcharGlyph( IN UINT Codepage, IN char Ch ); WCHAR CharToWchar( IN UINT Codepage, IN char Ch ); #endif char WcharToChar( IN UINT Codepage, IN WCHAR Wchar ); int ConvertOutputToUnicode( IN UINT Codepage, IN LPSTR Source, IN int SourceLength, OUT LPWSTR Target, IN int TargetLength ); int ConvertOutputToOem( IN UINT Codepage, IN LPWSTR Source, IN int SourceLength, // in chars OUT LPSTR Target, IN int TargetLength // in chars ); NTSTATUS RealUnicodeToFalseUnicode( IN OUT LPWSTR Source, IN int SourceLength, // in chars IN UINT Codepage ); NTSTATUS FalseUnicodeToRealUnicode( IN OUT LPWSTR Source, IN int SourceLength, // in chars IN UINT Codepage ); VOID InitializeSubst( VOID ); VOID ShutdownSubst( VOID ); ULONG SrvConsoleSubst( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); typedef struct tagFACENODE { struct tagFACENODE *pNext; DWORD dwFlag; WCHAR awch[]; } FACENODE, *PFACENODE; BOOL DoFontEnum( IN HDC hDC OPTIONAL, IN LPWSTR pwszFace OPTIONAL, IN SHORT TTPointSize); #if defined(FE_SB) VOID SetConsoleCPInfo( IN PCONSOLE_INFORMATION Console, IN BOOL Output ); BOOL CheckBisectStringW( IN PSCREEN_INFORMATION ScreenInfo, IN DWORD CodePage, IN PWCHAR Buffer, IN DWORD NumWords, IN DWORD NumBytes ); BOOL CheckBisectProcessW( IN PSCREEN_INFORMATION ScreenInfo, IN DWORD CodePage, IN PWCHAR Buffer, IN DWORD NumWords, IN DWORD NumBytes, IN SHORT OriginalXPosition, IN BOOL Echo ); #endif // FE_SB // // directio.c // ULONG SrvGetConsoleInput( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvWriteConsoleInput( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvReadConsoleOutput( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvWriteConsoleOutput( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvReadConsoleOutputString( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvWriteConsoleOutputString( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvFillConsoleOutput( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvCreateConsoleScreenBuffer( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); NTSTATUS TranslateOutputToPaddingUnicode( IN PCONSOLE_INFORMATION Console, IN OUT PCHAR_INFO OutputBuffer, IN COORD Size, IN OUT PCHAR_INFO OutputBufferR ); // // getset.c // ULONG SrvGetConsoleMode( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleNumberOfFonts( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleNumberOfInputEvents( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetLargestConsoleWindowSize( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleScreenBufferInfo( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleCursorInfo( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleSelectionInfo( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleMouseInfo( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleFontInfo( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleFontSize( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleCurrentFont( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleMode( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGenerateConsoleCtrlEvent( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleActiveScreenBuffer( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvFlushConsoleInputBuffer( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleScreenBufferSize( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleCursorPosition( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleCursorInfo( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleWindowInfo( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvScrollConsoleScreenBuffer( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleTextAttribute( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleFont( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleIcon( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); NTSTATUS SetScreenColors( IN PSCREEN_INFORMATION ScreenInfo, IN WORD Attributes, IN WORD PopupAttributes, IN BOOL UpdateWholeScreen ); ULONG SrvSetConsoleCP( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleCP( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleKeyboardLayoutName( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleWindow( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); // // stream.c // NTSTATUS CookedRead( IN PCOOKED_READ_DATA CookedReadData, IN PCSR_API_MSG WaitReplyMessage, IN PCSR_THREAD WaitingThread, IN BOOLEAN WaitRoutine ); NTSTATUS ReadChars( IN PINPUT_INFORMATION InputInfo, IN PCONSOLE_INFORMATION Console, IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN PSCREEN_INFORMATION ScreenInfo, IN OUT PWCHAR lpBuffer, IN OUT PDWORD NumBytes, IN DWORD InitialNumBytes, IN DWORD CtrlWakeupMask, IN PHANDLE_DATA HandleData, IN PCOMMAND_HISTORY CommandHistory, IN PCSR_API_MSG Message OPTIONAL, IN HANDLE HandleIndex, IN USHORT ExeNameLength, IN PWCHAR ExeName, IN BOOLEAN Unicode ); ULONG SrvOpenConsole( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvReadConsole( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvWriteConsole( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvDuplicateHandle( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetHandleInformation( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetHandleInformation( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); VOID UnblockWriteConsole( IN PCONSOLE_INFORMATION Console, IN DWORD Reason); NTSTATUS CloseInputHandle( IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN PCONSOLE_INFORMATION Console, IN PHANDLE_DATA HandleData, IN HANDLE Handle ); NTSTATUS CloseOutputHandle( IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN PCONSOLE_INFORMATION Console, IN PHANDLE_DATA HandleData, IN HANDLE Handle, IN BOOLEAN FreeHandle ); ULONG SrvCloseHandle( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); VOID MakeCursorVisible( IN PSCREEN_INFORMATION ScreenInfo, IN COORD CursorPosition ); #if defined(FE_SB) HANDLE FindActiveScreenBufferHandle( IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN PCONSOLE_INFORMATION Console ); NTSTATUS WriteString( IN PSCREEN_INFORMATION ScreenInfo, IN PWCHAR String, IN ULONG NumChars, IN BOOL KeepCursorVisible, OUT PSHORT ScrollY OPTIONAL ); #endif // // cursor.c // NTSTATUS SetCursorInformation( PSCREEN_INFORMATION ScreenInfo, ULONG Size, BOOLEAN Visible ); NTSTATUS SetCursorPosition( IN OUT PSCREEN_INFORMATION ScreenInfo, IN COORD Position, IN BOOL TurnOn ); NTSTATUS SetCursorMode( PSCREEN_INFORMATION ScreenInfo, BOOLEAN DoubleCursor ); VOID CursorTimerRoutine( IN PSCREEN_INFORMATION ScreenInfo ); #if defined(FE_SB) VOID SB_InvertPixels( IN PSCREEN_INFORMATION ScreenInfo ); #endif VOID ConsoleHideCursor( IN PSCREEN_INFORMATION ScreenInfo ); VOID ConsoleShowCursor( IN PSCREEN_INFORMATION ScreenInfo ); #ifdef i386 NTSTATUS SetCursorInformationHW( PSCREEN_INFORMATION ScreenInfo, ULONG Size, BOOLEAN Visible ); NTSTATUS SetCursorPositionHW( IN OUT PSCREEN_INFORMATION ScreenInfo, IN COORD Position ); #endif // // cmdline.c // VOID InitializeConsoleCommandData( IN PCONSOLE_INFORMATION Console ); ULONG SrvAddConsoleAlias( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleAlias( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); DWORD SrvGetConsoleAliasesLength( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); DWORD SrvGetConsoleAliasExesLength( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); DWORD SrvGetConsoleAliases( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); DWORD SrvGetConsoleAliasExes( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); DWORD SrvExpungeConsoleCommandHistory( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); DWORD SrvSetConsoleNumberOfCommands( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); DWORD SrvGetConsoleCommandHistoryLength( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); DWORD SrvGetConsoleCommandHistory( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); DWORD SrvSetConsoleCommandHistoryMode( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); NTSTATUS MatchandCopyAlias( IN PCONSOLE_INFORMATION Console, IN PWCHAR Source, IN USHORT SourceLength, OUT PWCHAR TargetBuffer, IN OUT PUSHORT TargetLength, IN LPWSTR Exe, IN USHORT ExeLength, OUT PDWORD LineCount ); NTSTATUS AddCommand( IN PCOMMAND_HISTORY CommandHistory, IN PWCHAR Command, IN USHORT Length, IN BOOL HistoryNoDup ); NTSTATUS RetrieveCommand( IN PCOMMAND_HISTORY CommandHistory, IN WORD VirtualKeyCode, IN PWCHAR Buffer, IN ULONG BufferSize, OUT PULONG CommandSize ); PCOMMAND_HISTORY AllocateCommandHistory( IN PCONSOLE_INFORMATION Console, IN DWORD AppNameLength, IN PWCHAR AppName, IN HANDLE ProcessHandle ); VOID ResetCommandHistory( IN PCOMMAND_HISTORY CommandHistory ); ULONG SrvGetConsoleTitle( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleTitle( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); VOID FreeAliasBuffers( IN PCONSOLE_INFORMATION Console ); VOID FreeCommandHistory( IN PCONSOLE_INFORMATION Console, IN HANDLE ProcessHandle ); VOID FreeCommandHistoryBuffers( IN OUT PCONSOLE_INFORMATION Console ); VOID ResizeCommandHistoryBuffers( IN PCONSOLE_INFORMATION Console, IN UINT NumCommands ); int MyStringCompareW( IN LPWSTR Str1, IN LPWSTR Str2, IN USHORT Length, IN BOOLEAN bCaseInsensitive ); int LoadStringExW( IN HINSTANCE hModule, IN UINT wID, OUT LPWSTR lpBuffer, IN int cchBufferMax, IN WORD wLangId ); // // srvinit.c // ULONG SrvAllocConsole( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvFreeConsole( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvAttachConsole( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleProcessList( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); NTSTATUS RemoveConsole( IN PCONSOLE_PER_PROCESS_DATA ProcessData, IN HANDLE ProcessHandle, IN HANDLE ProcessId ); BOOL MapHandle( IN HANDLE ClientProcessHandle, IN HANDLE ServerHandle, OUT PHANDLE ClientHandle ); VOID InitializeConsoleAttributes( VOID ); VOID GetRegistryValues( IN LPWSTR ConsoleTitle, OUT PCONSOLE_REGISTRY_INFO RegInfo ); #if defined(FE_SB) NTSTATUS MyRegOpenKey( IN HANDLE hKey, IN LPWSTR lpSubKey, OUT PHANDLE phResult ); NTSTATUS MyRegQueryValue( IN HANDLE hKey, IN LPWSTR lpValueName, IN DWORD dwValueLength, OUT LPBYTE lpData ); NTSTATUS MyRegQueryValueEx( IN HANDLE hKey, IN LPWSTR lpValueName, IN DWORD dwValueLength, OUT LPBYTE lpData, OUT LPDWORD lpDataLength ); NTSTATUS MyRegEnumValue( IN HANDLE hKey, IN DWORD dwIndex, OUT DWORD dwValueLength, OUT LPWSTR lpValueName, OUT DWORD dwDataLength, OUT LPBYTE lpData ); #endif LPWSTR TranslateConsoleTitle( LPWSTR ConsoleTitle, PUSHORT pcbTranslatedLength, BOOL Unexpand, BOOL Substitute ); NTSTATUS GetConsoleLangId( IN UINT OutputCP, OUT LANGID* pLangId ); ULONG SrvGetConsoleLangId( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); // // bitmap.c // NTSTATUS CreateConsoleBitmap( IN OUT PCONSOLE_GRAPHICS_BUFFER_INFO GraphicsInfo, IN OUT PSCREEN_INFORMATION ScreenInfo, OUT PVOID *lpBitmap, OUT HANDLE *hMutex ); NTSTATUS WriteRegionToScreenBitMap( IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT Region ); ULONG SrvInvalidateBitMapRect( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvVDMConsoleOperation( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); // // private.c // VOID UpdateMousePosition( PSCREEN_INFORMATION ScreenInfo, COORD Position ); ULONG SrvSetConsoleCursor( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvShowConsoleCursor( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvConsoleMenuControl( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsolePalette( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleDisplayMode( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); VOID SetActivePalette( IN PSCREEN_INFORMATION ScreenInfo ); VOID UnsetActivePalette( IN PSCREEN_INFORMATION ScreenInfo ); ULONG SrvRegisterConsoleVDM( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); NTSTATUS SrvConsoleNotifyLastClose( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleHardwareState( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleHardwareState( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleDisplayMode( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleMenuClose( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleKeyShortcuts( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); #ifdef i386 VOID ReadRegionFromScreenHW( IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT Region, IN PCHAR_INFO ReadBufPtr ); VOID ScrollHW( IN PSCREEN_INFORMATION ScreenInfo, IN PSMALL_RECT ScrollRect, IN PSMALL_RECT MergeRect, IN COORD TargetPoint ); ULONG MatchWindowSize( #if defined(FE_SB) IN UINT CodePage, #endif IN COORD WindowSize, OUT PCOORD pWindowSize ); BOOL SetVideoMode( IN PSCREEN_INFORMATION ScreenInfo ); NTSTATUS DisplayModeTransition( IN BOOL Foreground, IN PCONSOLE_INFORMATION Console, IN PSCREEN_INFORMATION ScreenInfo ); NTSTATUS ConvertToWindowed( IN PCONSOLE_INFORMATION Console ); NTSTATUS ConvertToFullScreen( IN PCONSOLE_INFORMATION Console ); NTSTATUS SetROMFontCodePage( IN UINT wCodePage, IN ULONG ModeIndex ); #endif BOOL InitializeFullScreen( VOID ); NTSTATUS ChangeDispSettings( PCONSOLE_INFORMATION Console, HWND hwnd, DWORD dwFlags ); #define SCREEN_BUFFER_POINTER(X,Y,XSIZE,CELLSIZE) (((XSIZE * (Y)) + (X)) * (ULONG)CELLSIZE) // // menu.c // VOID InitSystemMenu( IN PCONSOLE_INFORMATION Console ); VOID InitializeMenu( IN PCONSOLE_INFORMATION Console ); VOID SetWinText( IN PCONSOLE_INFORMATION Console, IN UINT wID, IN BOOL Add ); VOID PropertiesDlgShow( IN PCONSOLE_INFORMATION Console, IN BOOL fCurrent ); VOID PropertiesUpdate( IN PCONSOLE_INFORMATION Console, IN HANDLE hClientSection ); // // fontdlg.c // int FindCreateFont( DWORD Family, LPWSTR pwszTTFace, COORD Size, LONG Weight, UINT CodePage); // // clipbrd.c // VOID DoCopy( IN PCONSOLE_INFORMATION Console ); VOID DoMark( IN PCONSOLE_INFORMATION Console ); VOID DoSelectAll( IN PCONSOLE_INFORMATION Console ); VOID DoStringPaste( IN PCONSOLE_INFORMATION Console, IN PWCHAR pwStr, IN UINT DataSize ); VOID DoPaste( IN PCONSOLE_INFORMATION Console ); VOID InitializeMouseSelection( IN PCONSOLE_INFORMATION Console, IN COORD CursorPosition ); VOID ExtendSelection( IN PCONSOLE_INFORMATION Console, IN COORD CursorPosition ); VOID ClearSelection( IN PCONSOLE_INFORMATION Console ); VOID StoreSelection( IN PCONSOLE_INFORMATION Console ); VOID ColorSelection( IN PCONSOLE_INFORMATION Console, IN PSMALL_RECT Rect, IN ULONG Attr ); VOID InvertSelection( IN PCONSOLE_INFORMATION Console, BOOL Inverting ); #if defined(FE_SB) BOOL SB_MyInvert( IN PCONSOLE_INFORMATION Console, IN PSMALL_RECT SmallRect ); #else BOOL MyInvert( IN PCONSOLE_INFORMATION Console, IN PSMALL_RECT SmallRect ); #endif VOID ConvertToMouseSelect( IN PCONSOLE_INFORMATION Console, IN COORD MousePosition ); VOID DoScroll( IN PCONSOLE_INFORMATION Console ); VOID ClearScroll( IN PCONSOLE_INFORMATION Console ); // // External private functions used by consrv // BOOL SetConsoleReserveKeys( HWND hWnd, DWORD fsReserveKeys ); int APIENTRY GreGetDIBitsInternal( HDC hdc, HBITMAP hBitmap, UINT iStartScan, UINT cNumScan, LPBYTE pjBits, LPBITMAPINFO pBitsInfo, UINT iUsage, UINT cjMaxBits, UINT cjMaxInfo ); #if defined(FE_SB) // // constubs.c // ULONG SrvGetConsoleCharType( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleLocalEUDC( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleCursorMode( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvGetConsoleCursorMode( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvRegisterConsoleOS2( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleOS2OemFormat( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); #if defined(FE_IME) ULONG SrvGetConsoleNlsMode( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvSetConsoleNlsMode( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvRegisterConsoleIME( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); ULONG SrvUnregisterConsoleIME( IN OUT PCSR_API_MSG m, IN OUT PCSR_REPLY_STATUS ReplyStatus ); #endif // FE_IME // // dispatch.c // VOID InvertPixels( IN PSCREEN_INFORMATION ScreenInfo ); WCHAR CharToWchar( IN PCONSOLE_INFORMATION Console, IN UINT Codepage, IN char *Ch ); BOOL MyInvert( IN PCONSOLE_INFORMATION Console, IN PSMALL_RECT SmallRect ); #endif // FE_SB