windows-nt/Source/XPSP1/NT/base/fs/utils/ulib/inc/message.hxx
2020-09-26 16:20:57 +08:00

599 lines
9.2 KiB
C++

/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
message.hxx
Abstract:
The MESSAGE class provides a dummy implementation of a message displayer
class. Message displayers are meant to be used by applications to
relay information to the user. Many functions will require a 'MESSAGE'
parameter through which to relay their output.
This particular implementation of this concept will do nothing. It
will be used by users who do not wish to have any output from their
applications.
Additionally, this class serves as a base class to real implementations
of the virtual methods.
Author:
Norbert P. Kusters (norbertk) 1-Apr-91
--*/
#if !defined(MESSAGE_DEFN)
#define MESSAGE_DEFN
#include "wstring.hxx"
#include "hmem.hxx"
extern "C" {
#include <stdarg.h>
}
enum MESSAGE_TYPE {
NORMAL_MESSAGE,
ERROR_MESSAGE,
PROGRESS_MESSAGE
};
//
// Each message also has a visualization: text or GUI. The default is both
//
#define TEXT_MESSAGE 0x1
#define GUI_MESSAGE 0x2
#define NORMAL_VISUAL (TEXT_MESSAGE | GUI_MESSAGE)
DECLARE_CLASS( MESSAGE );
DECLARE_CLASS( HMEM );
DEFINE_TYPE(ULONG, MSGID);
class MESSAGE : public OBJECT {
public:
ULIB_EXPORT
DECLARE_CONSTRUCTOR(MESSAGE);
VIRTUAL
ULIB_EXPORT
~MESSAGE(
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
Initialize(
);
VIRTUAL
ULIB_EXPORT
BOOLEAN
IsSuppressedMessage(
);
NONVIRTUAL
MSGID &
GetMessageId(
);
NONVIRTUAL
VOID
SetMessageId(
IN MSGID MsgId
);
VIRTUAL
BOOLEAN
Set(
IN MSGID MsgId,
IN MESSAGE_TYPE MessageType DEFAULT NORMAL_MESSAGE,
IN ULONG MessageVisual DEFAULT NORMAL_VISUAL
);
NONVIRTUAL
BOOLEAN
Display(
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
Display(
IN PCSTR Format ...
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
DisplayMsg(
IN MSGID MsgId,
IN PCSTR Format ...
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
DisplayMsg(
IN MSGID MsgId
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
DisplayMsg(
IN MSGID MsgId,
IN MESSAGE_TYPE MessageType,
IN ULONG MessageVisual DEFAULT NORMAL_VISUAL
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
DisplayMsg(
IN MSGID MsgId,
IN MESSAGE_TYPE MessageType,
IN ULONG MessageVisual,
IN PCSTR Format ...
);
NONVIRTUAL
BOOLEAN
Log(
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
Log(
IN PCSTR Format ...
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
LogMsg(
IN MSGID MsgId,
IN PCSTR Format ...
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
LogMsg(
IN MSGID MsgId
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
DumpDataToLog(
IN PVOID Data,
IN ULONG Length
);
VIRTUAL
BOOLEAN
DisplayV(
IN PCSTR Format,
IN va_list VarPointer
);
NONVIRTUAL
BOOLEAN
LogV(
IN PCSTR Format,
IN va_list VarPointer
);
VIRTUAL
ULIB_EXPORT
BOOLEAN
IsYesResponse(
IN BOOLEAN Default DEFAULT TRUE
);
VIRTUAL
ULIB_EXPORT
BOOLEAN
QueryStringInput(
OUT PWSTRING String
);
VIRTUAL
ULIB_EXPORT
BOOLEAN
IsInAutoChk(
);
VIRTUAL
ULIB_EXPORT
BOOLEAN
IsInSetup(
);
VIRTUAL
ULIB_EXPORT
BOOLEAN
IsKeyPressed(
MSGID MsgId,
ULONG TimeOutInSeconds
);
VIRTUAL
ULIB_EXPORT
BOOLEAN
WaitForUserSignal(
);
VIRTUAL
ULIB_EXPORT
MSGID
SelectResponse(
IN ULONG NumberOfSelections ...
);
VIRTUAL
PMESSAGE
Dup(
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
IsLoggingEnabled(
);
NONVIRTUAL
ULIB_EXPORT
VOID
SetLoggingEnabled(
IN BOOLEAN Enable DEFAULT TRUE
);
NONVIRTUAL
ULIB_EXPORT
VOID
ResetLoggingIterator(
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
QueryNextLoggedMessage(
OUT PFSTRING MessageText
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
QueryPackedLog(
IN OUT PHMEM Mem,
OUT PULONG PackedDataLength
);
VIRTUAL
ULIB_EXPORT
BOOLEAN
SetDotsOnly(
IN BOOLEAN DotsState
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
LogMessage(
PCWSTRING Message
);
NONVIRTUAL
ULIB_EXPORT
VOID
Lock(
);
NONVIRTUAL
ULIB_EXPORT
VOID
Unlock(
);
private:
NONVIRTUAL
VOID
Construct(
);
NONVIRTUAL
VOID
Destroy(
);
HMEM _log_buffer;
ULONG _logged_chars;
ULONG _next_message_offset;
BOOLEAN _logging_enabled;
MSGID _msgid;
LONG _inuse;
LARGE_INTEGER _timeout;
};
INLINE
BOOLEAN
MESSAGE::Display(
)
/*++
Routine Description:
This routine displays the message with no parameters.
Arguments:
None.
Return Value:
FALSE - Failure.
TRUE - Success.
--*/
{
return Display("");
}
INLINE
BOOLEAN
MESSAGE::DisplayMsg(
IN MSGID MsgId
)
/*++
Routine Description:
This routine displays the message with no parameters.
Arguments:
MsgId - Supplies the resource message id.
Return Value:
FALSE - Failure.
TRUE - Success.
--*/
{
return DisplayMsg(MsgId, "");
}
INLINE
BOOLEAN
MESSAGE::DisplayMsg(
IN MSGID MsgId,
IN MESSAGE_TYPE MessageType,
IN ULONG MessageVisual
)
/*++
Routine Description:
This routine displays the message with no parameters.
Arguments:
MsgId - Supplies the resource message id.
Return Value:
FALSE - Failure.
TRUE - Success.
--*/
{
return DisplayMsg(MsgId, MessageType, MessageVisual, "");
}
INLINE
BOOLEAN
MESSAGE::Log(
)
/*++
Routine Description:
This routine logs the message with no parameters.
Arguments:
None.
Return Value:
FALSE - Failure.
TRUE - Success.
--*/
{
return Log("");
}
INLINE
BOOLEAN
MESSAGE::LogMsg(
IN MSGID MsgId
)
/*++
Routine Description:
This routine logs the message with no parameters.
Arguments:
MsgId - Supplies the resource message id.
Return Value:
FALSE - Failure.
TRUE - Success.
--*/
{
return LogMsg(MsgId, "");
}
INLINE
BOOLEAN
MESSAGE::Set(
IN MSGID MsgId,
IN MESSAGE_TYPE MessageType,
IN ULONG MessageVisual
)
/*++
Routine Description:
This routine sets up the class to display the message with the 'MsgId'
resource identifier.
Arguments:
MsgId - Supplies the resource message id.
Return Value:
FALSE - Failure.
TRUE - Success.
--*/
{
(void) MessageType;
(void) MessageVisual;
_msgid = MsgId;
return TRUE;
}
INLINE
MSGID &
MESSAGE::GetMessageId(
)
/*++
Routine Description:
This routine returns the message id last passed to Set() or SetMessageId().
Arguments:
N/A
Return Value:
MSGID - A reference to the message id
--*/
{
return _msgid;
}
INLINE
VOID
MESSAGE::SetMessageId(
IN MSGID MsgId
)
/*++
Routine Description:
This routine sets the message id to the given one.
Arguments:
MsgId - Supplies the message id
Return Value:
N/A
--*/
{
_msgid = MsgId;
}
INLINE
BOOLEAN
MESSAGE::IsLoggingEnabled(
)
/*++
Routine Description:
This routines returns the logging state of the logging facility.
Arguments:
N/A
Return Value:
TRUE if logging is enabled.
FALSE if logging is disabled.
--*/
{
return _logging_enabled;
}
INLINE
VOID
MESSAGE::SetLoggingEnabled(
IN BOOLEAN Enable
)
/*++
Routine Description:
This routines enables/disable the logging facility.
Arguments:
Enable - TRUE if logging should be enabled.
Return Value:
N/A
--*/
{
_logging_enabled = Enable;
}
INLINE
VOID
MESSAGE::ResetLoggingIterator(
)
{
_next_message_offset = 0;
}
#endif // MESSAGE_DEFN