Source code of Windows XP (NT5)
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.0 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();