485 lines
6.6 KiB
C++
485 lines
6.6 KiB
C++
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1991 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
screen.hxx
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module contains the declaration for the SCREEN class.
|
|||
|
The SCREEN class provides methods that models the stream
|
|||
|
of bytes, with write access.
|
|||
|
Read operations from a SCREEN are not allowed.
|
|||
|
End of stream in a SCREEN object means that the cursor is
|
|||
|
in the last column of the last row.
|
|||
|
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Jaime Sasson (jaimes) 21-Mar-1991
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
ULIB, User Mode
|
|||
|
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
#if !defined( _SCREEN_ )
|
|||
|
|
|||
|
#define _SCREEN_
|
|||
|
|
|||
|
#include "stream.hxx"
|
|||
|
|
|||
|
|
|||
|
enum SCROLL_DIRECTION {
|
|||
|
SCROLL_UP,
|
|||
|
SCROLL_DOWN,
|
|||
|
SCROLL_LEFT,
|
|||
|
SCROLL_RIGHT
|
|||
|
};
|
|||
|
|
|||
|
DECLARE_CLASS( SCREEN );
|
|||
|
|
|||
|
|
|||
|
class SCREEN : public STREAM {
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
ULIB_EXPORT
|
|||
|
DECLARE_CONSTRUCTOR( SCREEN );
|
|||
|
|
|||
|
ULIB_EXPORT
|
|||
|
DECLARE_CAST_MEMBER_FUNCTION( SCREEN );
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
~SCREEN (
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
BOOLEAN
|
|||
|
Initialize(
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
Initialize(
|
|||
|
IN BOOLEAN CurrentActiveScreen,
|
|||
|
IN USHORT NumberOfRows,
|
|||
|
IN USHORT NumberOfColumns,
|
|||
|
IN USHORT TextAttribute,
|
|||
|
IN BOOLEAN ExpandAsciiControlSequence DEFAULT TRUE,
|
|||
|
IN BOOLEAN WrapAtEndOfLine DEFAULT TRUE
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
BOOLEAN
|
|||
|
ChangeScreenSize(
|
|||
|
IN USHORT NumberOfRows,
|
|||
|
IN USHORT NumberOfColumns,
|
|||
|
OUT PBOOLEAN IsFullScreen DEFAULT NULL
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
ChangeTextAttribute(
|
|||
|
IN USHORT Attribute
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
DisableAsciiControlSequence(
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
DisableWrapMode(
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
EnableAsciiControlSequence(
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
EnableWrapMode(
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
EraseLine(
|
|||
|
IN USHORT LineNumber
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
BOOLEAN
|
|||
|
EraseScreen(
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
#ifdef FE_SB
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
BOOLEAN
|
|||
|
EraseScreenAndResetAttribute(
|
|||
|
);
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
EraseToEndOfLine(
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
FillRectangularRegionAttribute(
|
|||
|
IN USHORT TopLeftRow,
|
|||
|
IN USHORT TopLeftColumn,
|
|||
|
IN USHORT BottomRightRow,
|
|||
|
IN USHORT BottomRightColumn,
|
|||
|
IN USHORT Attribute
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
FillRegionAttribute(
|
|||
|
IN USHORT StartRow,
|
|||
|
IN USHORT StartColumn,
|
|||
|
IN USHORT EndRow,
|
|||
|
IN USHORT EndColumn,
|
|||
|
IN USHORT Attribute
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
FillRectangularRegionCharacter(
|
|||
|
IN USHORT TopLeftRow,
|
|||
|
IN USHORT TopLeftColumn,
|
|||
|
IN USHORT BottomRightRow,
|
|||
|
IN USHORT BottomRightColumn,
|
|||
|
IN CHAR Character
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
FillRegionCharacter(
|
|||
|
IN USHORT StartRow,
|
|||
|
IN USHORT StartColumn,
|
|||
|
IN USHORT EndRow,
|
|||
|
IN USHORT EndColumn,
|
|||
|
IN CHAR Character
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
IsAsciiControlSequenceEnabled(
|
|||
|
) CONST;
|
|||
|
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
BOOLEAN
|
|||
|
IsAtEnd(
|
|||
|
) CONST;
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
IsWrapModeEnabled(
|
|||
|
) CONST;
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
MoveCursorDown(
|
|||
|
IN USHORT Rows
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
MoveCursorLeft(
|
|||
|
IN USHORT Columns
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
MoveCursorRight(
|
|||
|
IN USHORT Columns
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
BOOLEAN
|
|||
|
MoveCursorTo(
|
|||
|
IN USHORT Row,
|
|||
|
IN USHORT Column
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
MoveCursorUp(
|
|||
|
IN USHORT Rows
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
STREAMACCESS
|
|||
|
QueryAccess(
|
|||
|
) CONST;
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
DWORD
|
|||
|
QueryCodePage (
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
QueryCursorPosition(
|
|||
|
OUT PUSHORT Row,
|
|||
|
OUT PUSHORT Column
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
HANDLE
|
|||
|
QueryHandle(
|
|||
|
) CONST;
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
DWORD
|
|||
|
QueryOutputCodePage (
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
VOID
|
|||
|
QueryScreenSize(
|
|||
|
OUT PUSHORT NumberOfRows,
|
|||
|
OUT PUSHORT NumberOfColumns,
|
|||
|
OUT PUSHORT WindowRows DEFAULT NULL,
|
|||
|
OUT PUSHORT WindowColumns DEFAULT NULL
|
|||
|
) CONST;
|
|||
|
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
BOOLEAN
|
|||
|
Read(
|
|||
|
OUT PBYTE Buffer,
|
|||
|
IN ULONG BytesToRead,
|
|||
|
OUT PULONG BytesRead
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
BOOLEAN
|
|||
|
ReadChar(
|
|||
|
OUT PWCHAR Char,
|
|||
|
IN BOOLEAN Unicode DEFAULT FALSE
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
BOOLEAN
|
|||
|
ReadMbString(
|
|||
|
IN PSTR String,
|
|||
|
IN DWORD BufferSize,
|
|||
|
INOUT PDWORD StringSize,
|
|||
|
IN PSTR Delimiters,
|
|||
|
IN BOOLEAN ExpandTabs DEFAULT FALSE,
|
|||
|
IN DWORD TabExp DEFAULT 8
|
|||
|
);
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
BOOLEAN
|
|||
|
ReadWString(
|
|||
|
IN PWSTR String,
|
|||
|
IN DWORD BufferSize,
|
|||
|
INOUT PDWORD StringSize,
|
|||
|
IN PWSTR Delimiters,
|
|||
|
IN BOOLEAN ExpandTabs DEFAULT FALSE,
|
|||
|
IN DWORD TabExp DEFAULT 8
|
|||
|
);
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
BOOLEAN
|
|||
|
ReadString(
|
|||
|
OUT PWSTRING String,
|
|||
|
IN PWSTRING Delimiter,
|
|||
|
IN BOOLEAN Unicode DEFAULT FALSE
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
ScrollScreen(
|
|||
|
USHORT Amount,
|
|||
|
SCROLL_DIRECTION Direction
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
BOOLEAN
|
|||
|
SetCodePage(
|
|||
|
IN DWORD CodePage
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
SetCursorOff(
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
SetCursorOn(
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
SetCursorSize(
|
|||
|
IN ULONG Size
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
ULIB_EXPORT
|
|||
|
BOOLEAN
|
|||
|
SetOutputCodePage(
|
|||
|
IN DWORD CodePage
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
SetScreenActive(
|
|||
|
);
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
BOOLEAN
|
|||
|
WriteString(
|
|||
|
IN PCWSTRING String,
|
|||
|
IN CHNUM Position DEFAULT 0,
|
|||
|
IN CHNUM Length DEFAULT TO_END,
|
|||
|
IN CHNUM Granularity DEFAULT 0
|
|||
|
);
|
|||
|
|
|||
|
VIRTUAL
|
|||
|
BOOLEAN
|
|||
|
WriteChar(
|
|||
|
IN WCHAR Char
|
|||
|
);
|
|||
|
|
|||
|
private:
|
|||
|
|
|||
|
HANDLE _ScreenHandle;
|
|||
|
// USHORT _Rows;
|
|||
|
// USHORT _Columns;
|
|||
|
USHORT _TextAttribute;
|
|||
|
ULONG _ScreenMode;
|
|||
|
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
INLINE
|
|||
|
BOOLEAN
|
|||
|
SCREEN::IsAsciiControlSequenceEnabled(
|
|||
|
) CONST
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Determines if expansion of ASCII control sequences are currently
|
|||
|
allowed.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
BOOLEAN - Indicates if ASCII control sequences are allowed.
|
|||
|
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
{
|
|||
|
if( ( _ScreenMode & ENABLE_PROCESSED_OUTPUT ) ) {
|
|||
|
return( TRUE );
|
|||
|
} else {
|
|||
|
return( FALSE );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
INLINE
|
|||
|
BOOLEAN
|
|||
|
SCREEN::IsWrapModeEnabled(
|
|||
|
) CONST
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Determines if twrap is allowed in the screen.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
BOOLEAN - Indicates if the screen is in the wrap mode.
|
|||
|
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
{
|
|||
|
if( ( _ScreenMode & ENABLE_WRAP_AT_EOL_OUTPUT ) ) {
|
|||
|
return( TRUE );
|
|||
|
} else {
|
|||
|
return( FALSE );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif // _SCREEN_
|