215 lines
3.2 KiB
C++
215 lines
3.2 KiB
C++
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1990 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
Mode
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Mode utility
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Ramon Juan San Andres (ramonsa) 26-Jun-1991
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
#include "mode.hxx"
|
|||
|
#include "system.hxx"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Message stream
|
|||
|
//
|
|||
|
PSTREAM_MESSAGE Message;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// DeviceHandler is an array of pointers to the different device
|
|||
|
// handlers.
|
|||
|
//
|
|||
|
DEVICE_HANDLER DeviceHandler[ NUMBER_OF_DEVICE_TYPES ] = {
|
|||
|
|
|||
|
LptHandler,
|
|||
|
ComHandler,
|
|||
|
ConHandler,
|
|||
|
CommonHandler
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
InitializeMode (
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
DeallocateResources (
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
PSTREAM
|
|||
|
Get_Standard_Input_Stream();
|
|||
|
|
|||
|
PSTREAM
|
|||
|
Get_Standard_Output_Stream();
|
|||
|
|
|||
|
PSTREAM
|
|||
|
Get_Standard_Error_Stream();
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID __cdecl
|
|||
|
main (
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Main function of the Mode utility
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Notes:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
PREQUEST_HEADER Request;
|
|||
|
|
|||
|
//
|
|||
|
// Initialize whatever is necessary
|
|||
|
//
|
|||
|
InitializeMode();
|
|||
|
|
|||
|
//
|
|||
|
// Verify the OS version
|
|||
|
//
|
|||
|
if ( !SYSTEM::IsCorrectVersion() ) {
|
|||
|
|
|||
|
DisplayMessageAndExit( MODE_ERROR_INCORRECT_OS_VERSION,
|
|||
|
NULL,
|
|||
|
(ULONG)EXIT_ERROR );
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Obtain a request from the command line. Note that the
|
|||
|
// first field of the request is the device type.
|
|||
|
//
|
|||
|
Request = GetRequest();
|
|||
|
DebugPtrAssert( Request );
|
|||
|
DebugAssert( Request->DeviceType <= DEVICE_TYPE_ALL );
|
|||
|
|
|||
|
//
|
|||
|
// Let the device handler for the specified type take care of the
|
|||
|
// request.
|
|||
|
//
|
|||
|
DebugPtrAssert( DeviceHandler[ Request->DeviceType ] );
|
|||
|
DeviceHandler[ Request->DeviceType ]( Request );
|
|||
|
|
|||
|
//
|
|||
|
// Deallocate resources
|
|||
|
//
|
|||
|
FREE( Request );
|
|||
|
DeallocateResources();
|
|||
|
|
|||
|
//
|
|||
|
// We're done
|
|||
|
//
|
|||
|
ExitMode( EXIT_SUCCESS );
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
VOID
|
|||
|
InitializeMode (
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Allocates resources and initializes Mode structures
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Notes:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
if ( //
|
|||
|
// Construct and initialize a STREAM_MESSAGE.
|
|||
|
//
|
|||
|
!(Message = NEW STREAM_MESSAGE ) ||
|
|||
|
!Get_Standard_Output_Stream() ||
|
|||
|
!Message->Initialize( Get_Standard_Output_Stream(),
|
|||
|
Get_Standard_Input_Stream() )
|
|||
|
) {
|
|||
|
|
|||
|
//
|
|||
|
// We don't have Message, so we cannot display the error
|
|||
|
// text.
|
|||
|
//
|
|||
|
exit( EXIT_ERROR );
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Allocate resources which are private to each type of device
|
|||
|
//
|
|||
|
ComAllocateStuff();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
VOID
|
|||
|
DeallocateResources (
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Deallocates resources allocated in InitializeMode
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Notes:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
|
|||
|
DELETE( Message );
|
|||
|
ComDeAllocateStuff();
|
|||
|
|
|||
|
}
|