home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ST-Computer Leser-CD 2000 January
/
LCD_01_2000.iso
/
games
/
doom
/
pmdoom
/
src
/
control
/
joypad.c
< prev
Wrap
C/C++ Source or Header
|
1999-12-17
|
2KB
|
78 lines
/*
* Joypad routine update
*
* Patrice Mandin
*/
#include <osbind.h>
#include "doomdef.h"
#include "d_main.h"
#include "d_event.h"
#include "control/joypad.h"
unsigned long cur_joypad=0;
void I_UpdateJoypad_hardware(void)
{
event_t event;
/* Hardware read joypads */
Supexec(I_Asm_UpdateJoypad);
/* Scan joypad 0 changes */
/* Simulate keyboard */
#define PAD_DOWN(a) (atari_joypad0 & a)
#define PAD_PRESS(a) ( (atari_joypad0 & a) && !(cur_joypad & a) )
#define PAD_WASPRESSED(a) ( (cur_joypad & a) && !(atari_joypad0 & a) )
#define PROCESS_PAD(k,t) \
if (PAD_PRESS(k)) \
{ \
event.type = ev_keydown; \
event.data1 = t; \
D_PostEvent(&event); \
} \
if (PAD_WASPRESSED(k)) \
{ \
event.type = ev_keyup; \
event.data1 = t; \
D_PostEvent(&event); \
}
if (atari_joypad0 != cur_joypad)
{
PROCESS_PAD(JP_UP,KEY_UPARROW);
PROCESS_PAD(JP_DOWN,KEY_DOWNARROW);
PROCESS_PAD(JP_LEFT,KEY_LEFTARROW);
PROCESS_PAD(JP_RIGHT,KEY_RIGHTARROW);
PROCESS_PAD(JP_OPTION,KEY_ESCAPE);
PROCESS_PAD(JP_PAUSE,KEY_PAUSE);
PROCESS_PAD(JP_FIRE0,KEY_RALT);
PROCESS_PAD(JP_FIRE1,KEY_RCTRL);
PROCESS_PAD(JP_FIRE2,' ');
PROCESS_PAD(JP_K1,'1');
PROCESS_PAD(JP_K2,'2');
PROCESS_PAD(JP_K3,'3');
PROCESS_PAD(JP_K5,'4');
PROCESS_PAD(JP_KASTER,'5');
PROCESS_PAD(JP_K0,'6');
PROCESS_PAD(JP_KNUM,'7');
PROCESS_PAD(JP_KL,KEY_RALT);
PROCESS_PAD(JP_KL,KEY_LEFTARROW);
PROCESS_PAD(JP_KR,KEY_RALT);
PROCESS_PAD(JP_KR,KEY_RIGHTARROW);
PROCESS_PAD(JP_KX,KEY_RSHIFT);
PROCESS_PAD(JP_KY,KEY_ENTER);
PROCESS_PAD(JP_KZ,KEY_TAB);
cur_joypad=atari_joypad0;
}
}