You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
293 lines
4.3 KiB
293 lines
4.3 KiB
/*++
|
|
|
|
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();
|