windows-nt/Source/XPSP1/NT/multimedia/directx/dinput/dx7/dll/dilib2.c
2020-09-26 16:20:57 +08:00

109 lines
3.1 KiB
C

/*****************************************************************************
*
* DILib1.c
*
* Copyright (c) 1996 Microsoft Corporation. All Rights Reserved.
*
* Abstract:
*
* Objects exported statically into our library.
*
* Contents:
*
* c_dfDIKeyboard
*
*****************************************************************************/
#include "dinputpr.h"
/*****************************************************************************
*
* @doc INTERNAL
*
* @global DIOBJECTDATAFORMAT | c_rgdoiDIKbd[] |
*
* Device object data formats for keyboard-style access.
*
* @doc EXTERNAL
*
* @global DIDATAFORMAT | c_dfDIKeyboard |
*
* A predefined <t DIDATAFORMAT> structure which describes a
* keyboard device. This object is provided in the
* DINPUT.LIB library file as a convenience.
*
* A pointer to this structure may be passed to
* <mf IDirectInputDevice::SetDataFormat> to indicate that
* the device will be accessed in the form of a keyboard.
*
* When a device has been set to the keyboard data format,
* the <mf IDirectInputDevice::GetDeviceState> function
* behaves in the same way as the Windows <f GetKeyboardState>
* function: The device state is stored in an array of
* 256 bytes, with each byte corresponding to the state
* of a key. For example, if high bit of the <c DIK_ENTER>'th
* byte is set, then the Enter key is being held down.
*
* When a device has been set to the keyboard data format,
* the <mf IDirectInputDevice::GetDeviceData> function
* returns a <t DIDEVICEOBJECTDATA> whose <p dwOfs>
* field is a <c DIK_*> value which describes the
* key which was pressed or released.
*
*****************************************************************************/
#pragma BEGIN_CONST_DATA
#define MAKEODF(b) \
{ &GUID_Key, b, \
DIDFT_BUTTON | DIDFT_MAKEINSTANCE(b) | 0x80000000, } \
#define MAKEODF16(b) \
MAKEODF(b+0x00), \
MAKEODF(b+0x01), \
MAKEODF(b+0x02), \
MAKEODF(b+0x03), \
MAKEODF(b+0x04), \
MAKEODF(b+0x05), \
MAKEODF(b+0x06), \
MAKEODF(b+0x07), \
MAKEODF(b+0x08), \
MAKEODF(b+0x09), \
MAKEODF(b+0x0A), \
MAKEODF(b+0x0B), \
MAKEODF(b+0x0C), \
MAKEODF(b+0x0D), \
MAKEODF(b+0x0E), \
MAKEODF(b+0x0F) \
static DIOBJECTDATAFORMAT c_rgodfDIKeyboard[] = {
MAKEODF16(0x00),
MAKEODF16(0x10),
MAKEODF16(0x20),
MAKEODF16(0x30),
MAKEODF16(0x40),
MAKEODF16(0x50),
MAKEODF16(0x60),
MAKEODF16(0x70),
MAKEODF16(0x80),
MAKEODF16(0x90),
MAKEODF16(0xA0),
MAKEODF16(0xB0),
MAKEODF16(0xC0),
MAKEODF16(0xD0),
MAKEODF16(0xE0),
MAKEODF16(0xF0),
};
const DIDATAFORMAT c_dfDIKeyboard = {
sizeof(DIDATAFORMAT),
sizeof(DIOBJECTDATAFORMAT),
DIDF_RELAXIS,
256,
cA(c_rgodfDIKeyboard),
c_rgodfDIKeyboard,
};
#pragma END_CONST_DATA