294 lines
4 KiB
C++
294 lines
4 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1990 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
Mode.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Header file for the Mode utility
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Ramon Juan San Andres (ramonsa) 26-Jun-1991
|
||
|
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#include "ulib.hxx"
|
||
|
#include "smsg.hxx"
|
||
|
#include "wstring.hxx"
|
||
|
|
||
|
#include "rtmsg.h"
|
||
|
|
||
|
|
||
|
// ==================================================================
|
||
|
//
|
||
|
// Types
|
||
|
//
|
||
|
// ==================================================================
|
||
|
|
||
|
|
||
|
//
|
||
|
// Device types
|
||
|
//
|
||
|
typedef enum _DEVICE_TTYPE {
|
||
|
|
||
|
DEVICE_TYPE_LPT = 0,
|
||
|
DEVICE_TYPE_COM = 1,
|
||
|
DEVICE_TYPE_CON = 2,
|
||
|
DEVICE_TYPE_ALL = 3
|
||
|
|
||
|
} DEVICE_TTYPE, *PDEVICE_TTYPE;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Number of device types
|
||
|
//
|
||
|
#define NUMBER_OF_DEVICE_TYPES (DEVICE_TYPE_ALL + 1)
|
||
|
|
||
|
#define LAST_LPT 9
|
||
|
#define LAST_COM 9
|
||
|
|
||
|
|
||
|
//
|
||
|
// Request types
|
||
|
//
|
||
|
typedef enum _REQUEST_TYPE {
|
||
|
|
||
|
//
|
||
|
// NULL request (for operations accepted but that are no-ops )
|
||
|
//
|
||
|
REQUEST_TYPE_NULL,
|
||
|
|
||
|
//
|
||
|
// Requests common to 2 or more devices
|
||
|
//
|
||
|
REQUEST_TYPE_STATUS,
|
||
|
REQUEST_TYPE_CODEPAGE_PREPARE,
|
||
|
REQUEST_TYPE_CODEPAGE_SELECT,
|
||
|
REQUEST_TYPE_CODEPAGE_REFRESH,
|
||
|
REQUEST_TYPE_CODEPAGE_STATUS,
|
||
|
//
|
||
|
// LPT
|
||
|
//
|
||
|
REQUEST_TYPE_LPT_SETUP,
|
||
|
REQUEST_TYPE_LPT_REDIRECT,
|
||
|
REQUEST_TYPE_LPT_ENDREDIR,
|
||
|
//
|
||
|
// COM
|
||
|
//
|
||
|
REQUEST_TYPE_COM_SET,
|
||
|
//
|
||
|
// CONSOLE
|
||
|
//
|
||
|
REQUEST_TYPE_CON_SET_ROWCOL,
|
||
|
REQUEST_TYPE_CON_SET_TYPEMATIC
|
||
|
|
||
|
} REQUEST_TYPE, *PREQUEST_TYPE;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Request packet header
|
||
|
//
|
||
|
typedef struct _REQUEST_HEADER {
|
||
|
|
||
|
DEVICE_TTYPE DeviceType; // Device type
|
||
|
LONG DeviceNumber; // Device number
|
||
|
PWSTRING DeviceName; // Optional device name
|
||
|
REQUEST_TYPE RequestType; // Request type
|
||
|
|
||
|
} REQUEST_HEADER, *PREQUEST_HEADER;
|
||
|
//
|
||
|
// ALL_DEVICES is a magic DeviceNumber that means "all devices available
|
||
|
// of this type"
|
||
|
//
|
||
|
#define ALL_DEVICES ((LONG)-1)
|
||
|
|
||
|
|
||
|
//
|
||
|
// Device handler. A device handler is the function that takes care of
|
||
|
// handling all requests for a device. There is one per device type.
|
||
|
//
|
||
|
typedef BOOLEAN( *DEVICE_HANDLER )( IN PREQUEST_HEADER Request );
|
||
|
|
||
|
|
||
|
|
||
|
// ==================================================================
|
||
|
//
|
||
|
// Macros
|
||
|
//
|
||
|
// ==================================================================
|
||
|
|
||
|
//
|
||
|
// Exit codes
|
||
|
//
|
||
|
#define EXIT_SUCCESS 0
|
||
|
#define EXIT_ERROR ((int)-1)
|
||
|
|
||
|
|
||
|
|
||
|
// ==================================================================
|
||
|
//
|
||
|
// Global Data
|
||
|
//
|
||
|
// ==================================================================
|
||
|
|
||
|
|
||
|
//
|
||
|
// The message stream, for displaying messages
|
||
|
//
|
||
|
extern PSTREAM_MESSAGE Message;
|
||
|
|
||
|
|
||
|
//
|
||
|
// DeviceHandler is an array of pointers to the different device
|
||
|
// handlers.
|
||
|
//
|
||
|
extern DEVICE_HANDLER DeviceHandler[];
|
||
|
|
||
|
|
||
|
|
||
|
// ==================================================================
|
||
|
//
|
||
|
// Prototypes
|
||
|
//
|
||
|
// ==================================================================
|
||
|
|
||
|
|
||
|
//
|
||
|
// Argument.hxx
|
||
|
//
|
||
|
PREQUEST_HEADER
|
||
|
GetRequest(
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
ParseError (
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// common.cxx
|
||
|
//
|
||
|
BOOLEAN
|
||
|
CommonHandler(
|
||
|
IN PREQUEST_HEADER Request
|
||
|
);
|
||
|
|
||
|
|
||
|
BOOLEAN
|
||
|
IsAValidDevice (
|
||
|
IN DEVICE_TTYPE DeviceType,
|
||
|
IN ULONG DeviceNumber,
|
||
|
OUT PPATH *DeviceName
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
IsAValidLptDevice (
|
||
|
IN DEVICE_TTYPE DeviceType,
|
||
|
IN ULONG DeviceNumber,
|
||
|
OUT PPATH *DeviceName
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
IsAValidCommDevice (
|
||
|
IN DEVICE_TTYPE DeviceType,
|
||
|
IN ULONG DeviceNumber,
|
||
|
OUT PPATH *DeviceName
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
WriteStatusHeader (
|
||
|
IN PCPATH DevicePath
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// lpt.cxx
|
||
|
//
|
||
|
BOOLEAN
|
||
|
LptHandler(
|
||
|
IN PREQUEST_HEADER Request
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Com.cxx
|
||
|
//
|
||
|
BOOLEAN
|
||
|
ComAllocateStuff(
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
ComDeAllocateStuff(
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
ComHandler(
|
||
|
IN PREQUEST_HEADER Request
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// con.cxx
|
||
|
//
|
||
|
BOOLEAN
|
||
|
ConHandler(
|
||
|
IN PREQUEST_HEADER Request
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// support.cxx
|
||
|
//
|
||
|
VOID
|
||
|
DisplayMessage (
|
||
|
IN MSGID MsgId,
|
||
|
IN PCWSTRING String
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
DisplayMessageAndExit (
|
||
|
IN MSGID MsgId,
|
||
|
IN PCWSTRING String,
|
||
|
IN ULONG ExitCode
|
||
|
);
|
||
|
|
||
|
PWSTRING
|
||
|
QueryMessageString (
|
||
|
IN MSGID MsgId
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
ExitWithError(
|
||
|
IN DWORD ErrorCode
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
ExitMode(
|
||
|
IN DWORD ExitCode
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
PSTREAM
|
||
|
Get_Standard_Input_Stream();
|
||
|
|
||
|
PSTREAM
|
||
|
Get_Standard_Output_Stream();
|
||
|
|
||
|
PSTREAM
|
||
|
Get_Standard_Error_Stream();
|