#define I_NEED_OS2_H
#include "X.h"
#include "Xpoll.h"
#include "compiler.h"
#include <time.h>
#define INCL_DOSPROCESS
#define INCL_KBD
#include "xf86.h"
#include "xf86Priv.h"
#include "xf86_OSlib.h"
#include "xf86Xinput.h"
#include "xf86OSKbd.h"
static void SoundKbdBell(loudness, pitch, duration)
int loudness;
int pitch;
int duration;
{
DosBeep((ULONG)pitch, (ULONG)duration);
}
static void SetKbdLeds(pInfo, leds)
InputInfoPtr pInfo;
int leds;
{
KBDINFO kinfo;
APIRET rc;
rc = KbdGetStatus(&kinfo,(HKBD)xf86Info.consoleFd);
if (!rc) {
kinfo.fsMask = 0x10;
kinfo.fsState &= ~0x70;
kinfo.fsState |= (leds&0x70);
KbdSetStatus(&kinfo,(HKBD)xf86Info.consoleFd);
}
}
static int GetKbdLeds(pInfo)
InputInfoPtr pInfo;
{
KBDINFO kinfo;
APIRET rc;
rc = KbdGetStatus(&kinfo,(HKBD)xf86Info.consoleFd);
return rc ? 0 : kinfo.fsState & 0x70;
}
static void SetKbdRepeat(pInfo, rad)
InputInfoPtr pInfo;
char rad;
{
}
static void KbdInit(pInfo)
InputInfoPtr pInfo;
{
xf86Msg(X_INFO,"XKB module: Keyboard initialized\n");
}
static USHORT OrigKbdState;
static USHORT OrigKbdInterim;
typedef struct {
USHORT state;
UCHAR makeCode;
UCHAR breakCode;
USHORT keyID;
} HOTKEYPARAM;
static int KbdOn(pInfo)
InputInfoPtr pInfo;
{
KBDINFO info;
KbdGetStatus(&info,(HKBD)xf86Info.consoleFd);
OrigKbdState=info.fsMask;
OrigKbdInterim=info.fsInterim;
info.fsMask &= ~0x09;
info.fsMask |= 0x136;
info.fsInterim &= ~0x20;
KbdSetStatus(&info,(HKBD)xf86Info.consoleFd);
return -1;
}
static int KbdOff(pInfo)
InputInfoPtr pInfo;
{
KBDINFO info;
info.fsMask=OrigKbdState;
info.fsInterim=OrigKbdInterim;
KbdSetStatus(&info,(HKBD)xf86Info.consoleFd);
return -1;
}
Bool
xf86OSKbdPreInit(InputInfoPtr pInfo)
{
KbdDevPtr pKbd = pInfo->private;
pKbd->KbdInit = KbdInit;
pKbd->KbdOn = KbdOn;
pKbd->KbdOff = KbdOff;
pKbd->Bell = SoundKbdBell;
pKbd->SetLeds = SetKbdLeds;
pKbd->GetLeds = GetKbdLeds;
pKbd->SetKbdRepeat = SetKbdRepeat;
pKbd->vtSwitchSupported = FALSE;
return FALSE;
}