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.
128 lines
3.2 KiB
128 lines
3.2 KiB
5 years ago
|
/*
|
||
|
in_dos.c - DOS input
|
||
|
Copyright (C) 2020 mittorn
|
||
|
|
||
|
This program is free software: you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation, either version 3 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
*/
|
||
|
#include "platform/platform.h"
|
||
|
#include "input.h"
|
||
|
#include <dos.h>
|
||
|
|
||
|
static struct key_s
|
||
|
{
|
||
|
byte buf[256];
|
||
|
byte buf_head;
|
||
|
qboolean shift;
|
||
|
qboolean chars;
|
||
|
} keystate;
|
||
|
|
||
|
//=============================================================================
|
||
|
|
||
|
byte scantokey[128] =
|
||
|
{
|
||
|
// 0 1 2 3 4 5 6 7
|
||
|
// 8 9 A B C D E F
|
||
|
0 , 27, '1', '2', '3', '4', '5', '6',
|
||
|
'7', '8', '9', '0', '-', '=', K_BACKSPACE, 9, // 0
|
||
|
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
|
||
|
'o', 'p', '[', ']', 13 , K_CTRL,'a', 's', // 1
|
||
|
'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
|
||
|
'\'' , '`', K_SHIFT,'\\', 'z', 'x', 'c', 'v', // 2
|
||
|
'b', 'n', 'm', ',', '.', '/', K_SHIFT,'*',
|
||
|
K_ALT,' ', 0 , K_F1, K_F2, K_F3, K_F4, K_F5, // 3
|
||
|
K_F6, K_F7, K_F8, K_F9, K_F10,0 , 0 , K_HOME,
|
||
|
K_UPARROW,K_PGUP,'-',K_LEFTARROW,'5',K_RIGHTARROW,'+',K_END, //4
|
||
|
K_DOWNARROW,K_PGDN,K_INS,K_DEL,0,0, 0, K_F11,
|
||
|
K_F12,0 , 0 , 0 , 0 , 0 , 0 , 0, // 5
|
||
|
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,
|
||
|
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0, // 6
|
||
|
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,
|
||
|
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 // 7
|
||
|
};
|
||
|
|
||
|
|
||
|
// will be implemented later
|
||
|
void Platform_RunEvents( void )
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for( i = 0; i < keystate.buf_head;i++ )
|
||
|
{
|
||
|
int k = keystate.buf[i];
|
||
|
int key = scantokey[k&0x7f];
|
||
|
int value = !(k & 0x80);
|
||
|
|
||
|
Key_Event( key , value );
|
||
|
|
||
|
if( keystate.chars && value )
|
||
|
{
|
||
|
if( key >= 32 && key < 127 )
|
||
|
{
|
||
|
if( keystate.shift )
|
||
|
{
|
||
|
key = Key_ToUpper( key );
|
||
|
}
|
||
|
CL_CharEvent( key );
|
||
|
}
|
||
|
}
|
||
|
if( key == K_SHIFT )
|
||
|
keystate.shift = value;
|
||
|
}
|
||
|
keystate.buf_head = 0;
|
||
|
|
||
|
}
|
||
|
|
||
|
void GAME_EXPORT Platform_GetMousePos( int *x, int *y )
|
||
|
{
|
||
|
*x = *y = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void GAME_EXPORT Platform_SetMousePos(int x, int y)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
int Platform_JoyInit( int numjoy )
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void Platform_EnableTextInput( qboolean enable )
|
||
|
{
|
||
|
keystate.chars = enable;
|
||
|
}
|
||
|
|
||
|
void Platform_PreCreateMove( void )
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Platform_MouseMove( float *x, float *y )
|
||
|
{
|
||
|
static int lx,ly;
|
||
|
union REGS regs;
|
||
|
|
||
|
regs.w.ax = regs.w.bx = regs.w.cx = regs.w.dx = 0;
|
||
|
|
||
|
regs.w.ax = 11;
|
||
|
int386(0x33,®s,®s);
|
||
|
*x = (short)regs.w.cx, *y = (short)regs.w.dx;
|
||
|
regs.w.ax = regs.w.bx = regs.w.cx = regs.w.dx = 0;
|
||
|
int386(0x33,®s,®s);// reset
|
||
|
}
|
||
|
|
||
|
void __interrupt __far keyhandler( void )
|
||
|
{
|
||
|
keystate.buf[keystate.buf_head++] = inp(0x60);
|
||
|
outp(0x20, 0x20);
|
||
|
}
|