From db82688f627f2b3462279b96999969ae68e81251 Mon Sep 17 00:00:00 2001 From: Bradley Bell Date: Fri, 15 Feb 2002 07:18:00 +0000 Subject: [PATCH] copied files from d1x --- arch/dos/include/key_arch.h | 207 +++++++++++++++++ arch/dos/key_arch.c | 396 ++++++++++++++++++++++++++++++++ arch/ggi/include/key_arch.h | 207 +++++++++++++++++ arch/ggi/key_arch.c | 26 +++ arch/sdl/include/key_arch.h | 207 +++++++++++++++++ arch/sdl/key_arch.c | 37 +++ arch/svgalib/include/key_arch.h | 207 +++++++++++++++++ arch/svgalib/key_arch.c | 38 +++ arch/win32/include/key_arch.h | 216 +++++++++++++++++ arch/win32/key_arch.c | 169 ++++++++++++++ 10 files changed, 1710 insertions(+) create mode 100644 arch/dos/include/key_arch.h create mode 100644 arch/dos/key_arch.c create mode 100644 arch/ggi/include/key_arch.h create mode 100644 arch/ggi/key_arch.c create mode 100644 arch/sdl/include/key_arch.h create mode 100644 arch/sdl/key_arch.c create mode 100644 arch/svgalib/include/key_arch.h create mode 100644 arch/svgalib/key_arch.c create mode 100644 arch/win32/include/key_arch.h create mode 100644 arch/win32/key_arch.c diff --git a/arch/dos/include/key_arch.h b/arch/dos/include/key_arch.h new file mode 100644 index 00000000..d18dfd1c --- /dev/null +++ b/arch/dos/include/key_arch.h @@ -0,0 +1,207 @@ +/* +THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX +SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO +END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A +ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS +IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS +SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE +FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE +CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS +AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. +COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. +*/ +/* + * $Source: /cvs/cvsroot/d2x/arch/dos/include/key_arch.h,v $ + * $Revision: 1.1 $ + * $Author: bradleyb $ + * $Date: 2002-02-15 07:18:00 $ + * + * Header for keyboard functions + * + * $Log: not supported by cvs2svn $ + * Revision 1.1 2000/01/17 05:58:38 donut + * switched from multiply reimplemented/reduntant/buggy key.c for each arch to a single main/key.c that calls the much smaller arch-specific parts. Also adds working emulated key repeat support. + * + * Revision 1.1.1.1 1999/06/14 22:00:12 donut + * Import of d1x 1.37 source. + * + * Revision 1.19 1994/10/24 13:58:12 john + * Hacked in support for pause key onto code 0x61. + * + * Revision 1.18 1994/10/21 15:17:10 john + * Added KEY_PRINT_SCREEN + * + * Revision 1.17 1994/08/31 12:22:13 john + * Added KEY_DEBUGGED + * + * Revision 1.16 1994/08/24 18:53:50 john + * Made Cyberman read like normal mouse; added dpmi module; moved + * mouse from assembly to c. Made mouse buttons return time_down. + * + * Revision 1.15 1994/08/18 14:56:16 john + * *** empty log message *** + * + * Revision 1.14 1994/08/08 10:43:24 john + * Recorded when a key was pressed for key_inkey_time. + * + * Revision 1.13 1994/06/17 17:17:28 john + * Added keyd_time_last_key_was_pressed or something like that. + * + * Revision 1.12 1994/04/29 12:14:19 john + * Locked all memory used during interrupts so that program + * won't hang when using virtual memory. + * + * Revision 1.11 1994/02/17 15:57:14 john + * Changed key libary to C. + * + * Revision 1.10 1994/01/31 08:34:09 john + * Fixed reversed lshift/rshift keys. + * + * Revision 1.9 1994/01/18 10:58:17 john + * *** empty log message *** + * + * Revision 1.8 1993/10/16 19:24:43 matt + * Added new function key_clear_times() & key_clear_counts() + * + * Revision 1.7 1993/10/15 10:17:09 john + * added keyd_last_key_pressed and released for use with recorder. + * + * Revision 1.6 1993/10/06 16:20:37 john + * fixed down arrow bug + * + * Revision 1.5 1993/10/04 13:26:42 john + * changed the #defines for scan codes. + * + * Revision 1.4 1993/09/28 11:35:20 john + * added key_peekkey + * + * Revision 1.3 1993/09/20 18:36:43 john + * *** empty log message *** + * + * Revision 1.1 1993/07/10 13:10:39 matt + * Initial revision + * + * + */ + +#ifndef _DOS_KEY_H +#define _DOS_KEY_H + +#define ARCH_KEY_0 0x0B +#define ARCH_KEY_1 0x02 +#define ARCH_KEY_2 0x03 +#define ARCH_KEY_3 0x04 +#define ARCH_KEY_4 0x05 +#define ARCH_KEY_5 0x06 +#define ARCH_KEY_6 0x07 +#define ARCH_KEY_7 0x08 +#define ARCH_KEY_8 0x09 +#define ARCH_KEY_9 0x0A + +#define ARCH_KEY_A 0x1E +#define ARCH_KEY_B 0x30 +#define ARCH_KEY_C 0x2E +#define ARCH_KEY_D 0x20 +#define ARCH_KEY_E 0x12 +#define ARCH_KEY_F 0x21 +#define ARCH_KEY_G 0x22 +#define ARCH_KEY_H 0x23 +#define ARCH_KEY_I 0x17 +#define ARCH_KEY_J 0x24 +#define ARCH_KEY_K 0x25 +#define ARCH_KEY_L 0x26 +#define ARCH_KEY_M 0x32 +#define ARCH_KEY_N 0x31 +#define ARCH_KEY_O 0x18 +#define ARCH_KEY_P 0x19 +#define ARCH_KEY_Q 0x10 +#define ARCH_KEY_R 0x13 +#define ARCH_KEY_S 0x1F +#define ARCH_KEY_T 0x14 +#define ARCH_KEY_U 0x16 +#define ARCH_KEY_V 0x2F +#define ARCH_KEY_W 0x11 +#define ARCH_KEY_X 0x2D +#define ARCH_KEY_Y 0x15 +#define ARCH_KEY_Z 0x2C + +#define ARCH_KEY_MINUS 0x0C +#define ARCH_KEY_EQUAL 0x0D +//this is what we normally think of as slash: +#define ARCH_KEY_DIVIDE 0x35 +//this is BACKslash: +#define ARCH_KEY_SLASH 0x2B +#define ARCH_KEY_COMMA 0x33 +#define ARCH_KEY_PERIOD 0x34 +#define ARCH_KEY_SEMICOL 0x27 + +#define ARCH_KEY_LBRACKET 0x1A +#define ARCH_KEY_RBRACKET 0x1B + +#define ARCH_KEY_RAPOSTRO 0x28 +#define ARCH_KEY_LAPOSTRO 0x29 + +#define ARCH_KEY_ESC 0x01 +#define ARCH_KEY_ENTER 0x1C +#define ARCH_KEY_BACKSP 0x0E +#define ARCH_KEY_TAB 0x0F +#define ARCH_KEY_SPACEBAR 0x39 + +#define ARCH_KEY_NUMLOCK 0x45 +#define ARCH_KEY_SCROLLOCK 0x46 +#define ARCH_KEY_CAPSLOCK 0x3A + +#define ARCH_KEY_LSHIFT 0x2A +#define ARCH_KEY_RSHIFT 0x36 + +#define ARCH_KEY_LALT 0x38 +#define ARCH_KEY_RALT 0xB8 + +#define ARCH_KEY_LCTRL 0x1D +#define ARCH_KEY_RCTRL 0x9D + +#define ARCH_KEY_F1 0x3B +#define ARCH_KEY_F2 0x3C +#define ARCH_KEY_F3 0x3D +#define ARCH_KEY_F4 0x3E +#define ARCH_KEY_F5 0x3F +#define ARCH_KEY_F6 0x40 +#define ARCH_KEY_F7 0x41 +#define ARCH_KEY_F8 0x42 +#define ARCH_KEY_F9 0x43 +#define ARCH_KEY_F10 0x44 +#define ARCH_KEY_F11 0x57 +#define ARCH_KEY_F12 0x58 + +#define ARCH_KEY_PAD0 0x52 +#define ARCH_KEY_PAD1 0x4F +#define ARCH_KEY_PAD2 0x50 +#define ARCH_KEY_PAD3 0x51 +#define ARCH_KEY_PAD4 0x4B +#define ARCH_KEY_PAD5 0x4C +#define ARCH_KEY_PAD6 0x4D +#define ARCH_KEY_PAD7 0x47 +#define ARCH_KEY_PAD8 0x48 +#define ARCH_KEY_PAD9 0x49 +#define ARCH_KEY_PADMINUS 0x4A +#define ARCH_KEY_PADPLUS 0x4E +#define ARCH_KEY_PADPERIOD 0x53 +#define ARCH_KEY_PADDIVIDE 0xB5 +#define ARCH_KEY_PADMULTIPLY 0x37 +#define ARCH_KEY_PADENTER 0x9C + +#define ARCH_KEY_INSERT 0xD2 +#define ARCH_KEY_HOME 0xC7 +#define ARCH_KEY_PAGEUP 0xC9 +#define ARCH_KEY_DELETE 0xD3 +#define ARCH_KEY_END 0xCF +#define ARCH_KEY_PAGEDOWN 0xD1 +#define ARCH_KEY_UP 0xC8 +#define ARCH_KEY_DOWN 0xD0 +#define ARCH_KEY_LEFT 0xCB +#define ARCH_KEY_RIGHT 0xCD + +#define ARCH_KEY_PRINT_SCREEN 0xB7 +#define ARCH_KEY_PAUSE 0x61 + +#endif diff --git a/arch/dos/key_arch.c b/arch/dos/key_arch.c new file mode 100644 index 00000000..2557455f --- /dev/null +++ b/arch/dos/key_arch.c @@ -0,0 +1,396 @@ +/* +THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX +SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO +END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A +ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS +IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS +SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE +FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE +CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS +AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. +COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. +*/ +/* + * $Source: /cvs/cvsroot/d2x/arch/dos/key_arch.c,v $ + * $Revision: 1.1 $ + * $Author: bradleyb $ + * $Date: 2002-02-15 07:18:00 $ + * + * Functions for keyboard handler. + * + * $Log: not supported by cvs2svn $ + * Revision 1.2 2000/02/07 10:09:52 donut + * dos pragma ifdefs + * + * Revision 1.1 2000/01/17 05:58:38 donut + * switched from multiply reimplemented/reduntant/buggy key.c for each arch to a single main/key.c that calls the much smaller arch-specific parts. Also adds working emulated key repeat support. + * + * Revision 1.1.1.1 1999/06/14 21:58:32 donut + * Import of d1x 1.37 source. + * + * Revision 1.35 1995/01/25 20:13:30 john + * Took out not passing keys to debugger if w10. + * + * Revision 1.34 1995/01/14 19:19:31 john + * Made so when you press Shift+Baskspace, it release keys autmatically. + * + * Revision 1.33 1994/12/13 09:21:48 john + * Took out keyd_editor_mode, and KEY_DEBUGGED stuff for NDEBUG versions. + * + * Revision 1.32 1994/11/12 13:52:01 john + * Fixed bug with code that cleared bios buffer. + * + * Revision 1.31 1994/10/24 15:16:16 john + * Added code to detect KEY_PAUSE. + * + * Revision 1.30 1994/10/24 13:57:53 john + * Hacked in support for pause key onto code 0x61. + * + * Revision 1.29 1994/10/21 15:18:13 john + * *** empty log message *** + * + * Revision 1.28 1994/10/21 15:17:24 john + * Made LSHIFT+BACKSPACE do what PrtScr used to. + * + * Revision 1.27 1994/09/22 16:09:18 john + * Fixed some virtual memory lockdown problems with timer and + * joystick. + * + * Revision 1.26 1994/09/15 21:32:47 john + * Added bounds checking for down_count scancode + * parameter. + * + * Revision 1.25 1994/08/31 12:22:20 john + * Added KEY_DEBUGGED + * + * Revision 1.24 1994/08/24 18:53:48 john + * Made Cyberman read like normal mouse; added dpmi module; moved + * mouse from assembly to c. Made mouse buttons return time_down. + * + * Revision 1.23 1994/08/18 15:17:51 john + * *** empty log message *** + * + * Revision 1.22 1994/08/18 15:16:38 john + * fixed some bugs with clear_key_times and then + * removed it because i fixed key_flush to do the + * same. + * + * Revision 1.21 1994/08/17 19:01:25 john + * Attempted to fix a bug with a key being held down + * key_flush called, then the key released having too + * long of a time. + * + * Revision 1.20 1994/08/08 10:43:48 john + * Recorded when a key was pressed for key_inkey_time. + * + * Revision 1.19 1994/06/22 15:00:03 john + * Made keyboard close automatically on exit. + * + * Revision 1.18 1994/06/21 09:16:29 john + * *** empty log message *** + * + * Revision 1.17 1994/06/21 09:08:23 john + * *** empty log message *** + * + * Revision 1.16 1994/06/21 09:05:01 john + * *** empty log message *** + * + * Revision 1.15 1994/06/21 09:04:24 john + * Made PrtScreen do an int5 + * + * Revision 1.14 1994/06/17 17:17:06 john + * Added keyd_time_last_key_was_pressed or something like that. + * + * Revision 1.13 1994/05/14 13:55:16 matt + * Added #define to control key passing to bios + * + * Revision 1.12 1994/05/05 18:09:39 john + * Took out BIOS to prevent stuck keys. + * + * Revision 1.11 1994/05/03 17:39:12 john + * *** empty log message *** + * + * Revision 1.10 1994/04/29 12:14:20 john + * Locked all memory used during interrupts so that program + * won't hang when using virtual memory. + * + * Revision 1.9 1994/04/28 23:49:41 john + * Made key_flush flush more keys and also did something else but i forget what. + * + * Revision 1.8 1994/04/22 12:52:12 john + * *** empty log message *** + * + * Revision 1.7 1994/04/01 10:44:59 mike + * Change key_getch() to call getch() if our interrupt hasn't been installed. + * + * Revision 1.6 1994/03/09 10:45:48 john + * Neatend code a bit. + * + * Revision 1.5 1994/02/17 17:24:16 john + * Neatened up a bit. + * + * Revision 1.4 1994/02/17 16:30:29 john + * Put in code to pass keys when in debugger. + * + * Revision 1.3 1994/02/17 15:57:59 john + * Made handler not chain to BIOS handler. + * + * Revision 1.2 1994/02/17 15:56:06 john + * Initial version. + * + * Revision 1.1 1994/02/17 15:54:07 john + * Initial revision + * + * + */ + +//#define PASS_KEYS_TO_BIOS 1 //if set, bios gets keys + +#ifdef RCS +static char rcsid[] = "$Id: key_arch.c,v 1.1 2002-02-15 07:18:00 bradleyb Exp $"; +#endif + +#include +#include +#include +#include +#include + +//#define WATCOM_10 +#ifdef __DJGPP__ +#include +#define _far +#define __far +#define __interrupt +#define near +_go32_dpmi_seginfo kbd_hand_info; +#endif +#include "error.h" +#include "key.h" +#include "timer.h" +#include "u_dpmi.h" + +#define LOCAL_KEY_BUFFER_SIZE 32 + + +typedef struct keyboard { + unsigned short keybuffer[LOCAL_KEY_BUFFER_SIZE]; + unsigned short statebuffer[LOCAL_KEY_BUFFER_SIZE]; + unsigned int keyhead, keytail; + unsigned char E0Flag; + unsigned char E1Flag; + int in_key_handler; +#ifdef __DJGPP__ + _go32_dpmi_seginfo prev_int_9; +#else + void (__interrupt __far *prev_int_9)(); +#endif +} keyboard; + +static volatile keyboard key_data; + +static unsigned char Installed=0; + +void arch_key_poll(void){ + _disable(); + while (key_data.keytail!=key_data.keyhead){ + generic_key_handler(key_data.keybuffer[key_data.keyhead],key_data.statebuffer[key_data.keyhead]); + key_data.keyhead++; + if ( key_data.keyhead >= LOCAL_KEY_BUFFER_SIZE ) key_data.keyhead=0; + } + _enable(); +} + +void key_clear_bios_buffer_all() +{ +#ifdef __WATCOMC__ + // Clear keyboard buffer... + *(ushort *)0x41a=*(ushort *)0x41c; + // Clear the status bits... + *(ubyte *)0x417 = 0; + *(ubyte *)0x418 = 0; +#else + _farpokew(_dos_ds,0x41a, _farpeekw(_dos_ds, 0x41c)); + _farpokeb(_dos_ds,0x417, 0); + _farpokeb(_dos_ds,0x418, 0); +#endif +} + +void key_clear_bios_buffer() +{ +#ifdef __WATCOMC__ + // Clear keyboard buffer... + *(ushort *)0x41a=*(ushort *)0x41c; +#else + _farpokew(_dos_ds,0x41a, _farpeekw(_dos_ds, 0x41c)); +#endif +} + +void arch_key_flush() +{ + int i; + + _disable(); + + // Clear the BIOS buffer + key_clear_bios_buffer(); + + key_data.keyhead = key_data.keytail = 0; + + //Clear the keyboard buffer + for (i=0; i')) || + ((MONO[14]=='<') && (MONO[16]=='i') && (MONO[18]=='>') && (MONO[20]==' ') && (MONO[22]=='-')) || + ((MONO[0]==200 ) && (MONO[2]==27) && (MONO[4]==17) ) + ) + _chain_intr( key_data.prev_int_9 ); +#endif +#endif +#endif + + // Read in scancode + scancode = inp( 0x60 ); + + switch( scancode ) { + case 0xE0: + key_data.E0Flag = 0x80; + break; + default: + // Parse scancode and break bit + if (key_data.E1Flag > 0 ) { // Special code for Pause, which is E1 1D 45 E1 9D C5 + key_data.E1Flag--; + if ( scancode == 0x1D ) { + scancode = KEY_PAUSE; + breakbit = 0; + } else if ( scancode == 0x9d ) { + scancode = KEY_PAUSE; + breakbit = 1; + } else { + break; // skip this keycode + } + } else if ( scancode==0xE1 ) { + key_data.E1Flag = 2; + break; + } else { + breakbit = scancode & 0x80; // Get make/break bit + scancode &= 0x7f; // Strip make/break bit off of scancode + scancode |= key_data.E0Flag; // Add in extended key code + } + key_data.E0Flag = 0; // Clear extended key code + temp = key_data.keytail+1; + if ( temp >= LOCAL_KEY_BUFFER_SIZE ) temp=0; + + if (temp!=key_data.keyhead) { + keycode=scancode; + + key_data.keybuffer[key_data.keytail] = keycode; + key_data.statebuffer[key_data.keytail] = !breakbit; + key_data.keytail = temp; + } + } + +#ifndef NDEBUG +#ifdef PASS_KEYS_TO_BIOS + _chain_intr( key_data.prev_int_9 ); +#endif +#endif + + temp = inp(0x61); // Get current port 61h state + temp |= 0x80; // Turn on bit 7 to signal clear keybrd + outp( 0x61, temp ); // Send to port + temp &= 0x7f; // Turn off bit 7 to signal break + outp( 0x61, temp ); // Send to port + outp( 0x20, 0x20 ); // Reset interrupt controller +} + +#ifndef __GNUC__ +#pragma on (check_stack) +#endif + +void key_handler_end() { // Dummy function to help calculate size of keyboard handler function +} + +void arch_key_init() +{ + // Initialize queue + + key_data.in_key_handler = 0; + key_data.E0Flag = 0; + key_data.E1Flag = 0; + + if (Installed) return; + Installed = 1; + + //--------------- lock everything for the virtal memory ---------------------------------- + if (!dpmi_lock_region ((void near *)key_handler, (char *)key_handler_end - (char near *)key_handler)) { + printf( "Error locking keyboard handler!\n" ); + exit(1); + } + if (!dpmi_lock_region ((void *)&key_data, sizeof(keyboard))) { + printf( "Error locking keyboard handler's data1!\n" ); + exit(1); + } + +#ifndef __DJGPP__ + key_data.prev_int_9 = (void *)_dos_getvect( 9 ); + _dos_setvect( 9, key_handler ); +#else + _go32_dpmi_get_protected_mode_interrupt_vector(9, + (_go32_dpmi_seginfo *)&key_data.prev_int_9); + kbd_hand_info.pm_offset = (int)key_handler; + kbd_hand_info.pm_selector = _my_cs(); + _go32_dpmi_allocate_iret_wrapper(&kbd_hand_info); + _go32_dpmi_set_protected_mode_interrupt_vector(9, &kbd_hand_info); +#endif +} + +void arch_key_close() +{ + if (!Installed) return; + Installed = 0; + +#ifndef __DJGPP__ + _dos_setvect( 9, key_data.prev_int_9 ); +#else + _go32_dpmi_set_protected_mode_interrupt_vector(9, + (_go32_dpmi_seginfo *)&key_data.prev_int_9); +#endif + + _disable(); + key_clear_bios_buffer_all(); + _enable(); + +} diff --git a/arch/ggi/include/key_arch.h b/arch/ggi/include/key_arch.h new file mode 100644 index 00000000..88ecdb5c --- /dev/null +++ b/arch/ggi/include/key_arch.h @@ -0,0 +1,207 @@ +/* +THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX +SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO +END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A +ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS +IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS +SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE +FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE +CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS +AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. +COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. +*/ +/* + * $Source: /cvs/cvsroot/d2x/arch/ggi/include/key_arch.h,v $ + * $Revision: 1.1 $ + * $Author: bradleyb $ + * $Date: 2002-02-15 07:18:00 $ + * + * Header for keyboard functions + * + * $Log: not supported by cvs2svn $ + * Revision 1.1 2000/01/17 05:58:38 donut + * switched from multiply reimplemented/reduntant/buggy key.c for each arch to a single main/key.c that calls the much smaller arch-specific parts. Also adds working emulated key repeat support. + * + * Revision 1.2 1999/07/10 02:59:06 donut + * more from orulz + * + * Revision 1.19 1994/10/24 13:58:12 john + * Hacked in support for pause key onto code 0x61. + * + * Revision 1.18 1994/10/21 15:17:10 john + * Added KEY_PRINT_SCREEN + * + * Revision 1.17 1994/08/31 12:22:13 john + * Added KEY_DEBUGGED + * + * Revision 1.16 1994/08/24 18:53:50 john + * Made Cyberman read like normal mouse; added dpmi module; moved + * mouse from assembly to c. Made mouse buttons return time_down. + * + * Revision 1.15 1994/08/18 14:56:16 john + * *** empty log message *** + * + * Revision 1.14 1994/08/08 10:43:24 john + * Recorded when a key was pressed for key_inkey_time. + * + * Revision 1.13 1994/06/17 17:17:28 john + * Added keyd_time_last_key_was_pressed or something like that. + * + * Revision 1.12 1994/04/29 12:14:19 john + * Locked all memory used during interrupts so that program + * won't hang when using virtual memory. + * + * Revision 1.11 1994/02/17 15:57:14 john + * Changed key libary to C. + * + * Revision 1.10 1994/01/31 08:34:09 john + * Fixed reversed lshift/rshift keys. + * + * Revision 1.9 1994/01/18 10:58:17 john + * *** empty log message *** + * + * Revision 1.8 1993/10/16 19:24:43 matt + * Added new function key_clear_times() & key_clear_counts() + * + * Revision 1.7 1993/10/15 10:17:09 john + * added keyd_last_key_pressed and released for use with recorder. + * + * Revision 1.6 1993/10/06 16:20:37 john + * fixed down arrow bug + * + * Revision 1.5 1993/10/04 13:26:42 john + * changed the #defines for scan codes. + * + * Revision 1.4 1993/09/28 11:35:20 john + * added key_peekkey + * + * Revision 1.3 1993/09/20 18:36:43 john + * *** empty log message *** + * + * Revision 1.1 1993/07/10 13:10:39 matt + * Initial revision + * + * + */ + +#ifndef _GII_KEY_H +#define _GII_KEY_H + +#include + +#define ARCH_KEY_0 GIIUC_0 +#define ARCH_KEY_1 GIIUC_1 +#define ARCH_KEY_2 GIIUC_2 +#define ARCH_KEY_3 GIIUC_3 +#define ARCH_KEY_4 GIIUC_4 +#define ARCH_KEY_5 GIIUC_5 +#define ARCH_KEY_6 GIIUC_6 +#define ARCH_KEY_7 GIIUC_7 +#define ARCH_KEY_8 GIIUC_8 +#define ARCH_KEY_9 GIIUC_9 + +#define ARCH_KEY_A GIIUC_A +#define ARCH_KEY_B GIIUC_B +#define ARCH_KEY_C GIIUC_C +#define ARCH_KEY_D GIIUC_D +#define ARCH_KEY_E GIIUC_E +#define ARCH_KEY_F GIIUC_F +#define ARCH_KEY_G GIIUC_G +#define ARCH_KEY_H GIIUC_H +#define ARCH_KEY_I GIIUC_I +#define ARCH_KEY_J GIIUC_J +#define ARCH_KEY_K GIIUC_K +#define ARCH_KEY_L GIIUC_L +#define ARCH_KEY_M GIIUC_M +#define ARCH_KEY_N GIIUC_N +#define ARCH_KEY_O GIIUC_O +#define ARCH_KEY_P GIIUC_P +#define ARCH_KEY_Q GIIUC_Q +#define ARCH_KEY_R GIIUC_R +#define ARCH_KEY_S GIIUC_S +#define ARCH_KEY_T GIIUC_T +#define ARCH_KEY_U GIIUC_U +#define ARCH_KEY_V GIIUC_V +#define ARCH_KEY_W GIIUC_W +#define ARCH_KEY_X GIIUC_X +#define ARCH_KEY_Y GIIUC_Y +#define ARCH_KEY_Z GIIUC_Z + +#define ARCH_KEY_MINUS GIIUC_Minus +#define ARCH_KEY_EQUAL GIIUC_Equal +#define ARCH_KEY_DIVIDE GIIUC_Slash +#define ARCH_KEY_SLASH GIIUC_BackSlash +#define ARCH_KEY_COMMA GIIUC_Comma +#define ARCH_KEY_PERIOD GIIUC_Period +#define ARCH_KEY_SEMICOL GIIUC_Semicolon + +#define ARCH_KEY_LBRACKET GIIUC_BracketLeft +#define ARCH_KEY_RBRACKET GIIUC_BracketRight + +#define ARCH_KEY_RAPOSTRO GIIUC_Apostrophe +#define ARCH_KEY_LAPOSTRO GIIUC_Grave + +#define ARCH_KEY_ESC GIIUC_Escape +#define ARCH_KEY_ENTER GIIK_Enter +#define ARCH_KEY_BACKSP GIIUC_BackSpace +#define ARCH_KEY_TAB GIIUC_Tab +#define ARCH_KEY_SPACEBAR GIIUC_Space + +#define ARCH_KEY_NUMLOCK GIIK_NumLock +#define ARCH_KEY_SCROLLOCK GIIK_ScrollLock +#define ARCH_KEY_CAPSLOCK GIIK_CapsLock + +#define ARCH_KEY_LSHIFT GIIK_ShiftL +#define ARCH_KEY_RSHIFT GIIK_ShiftR + +#define ARCH_KEY_LALT GIIK_AltL +#define ARCH_KEY_RALT GIIK_AltR + +#define ARCH_KEY_LCTRL GIIK_CtrlL +#define ARCH_KEY_RCTRL GIIK_CtrlR + +#define ARCH_KEY_F1 GIIK_F1 +#define ARCH_KEY_F2 GIIK_F2 +#define ARCH_KEY_F3 GIIK_F3 +#define ARCH_KEY_F4 GIIK_F4 +#define ARCH_KEY_F5 GIIK_F5 +#define ARCH_KEY_F6 GIIK_F6 +#define ARCH_KEY_F7 GIIK_F7 +#define ARCH_KEY_F8 GIIK_F8 +#define ARCH_KEY_F9 GIIK_F9 +#define ARCH_KEY_F10 GIIK_F10 +#define ARCH_KEY_F11 GIIK_F11 +#define ARCH_KEY_F12 GIIK_F12 + +#define ARCH_KEY_PAD0 GIIK_P0 +#define ARCH_KEY_PAD1 GIIK_P1 +#define ARCH_KEY_PAD2 GIIK_P2 +#define ARCH_KEY_PAD3 GIIK_P3 +#define ARCH_KEY_PAD4 GIIK_P4 +#define ARCH_KEY_PAD5 GIIK_P5 +#define ARCH_KEY_PAD6 GIIK_P6 +#define ARCH_KEY_PAD7 GIIK_P7 +#define ARCH_KEY_PAD8 GIIK_P8 +#define ARCH_KEY_PAD9 GIIK_P9 +#define ARCH_KEY_PADMINUS GIIK_PMinus +#define ARCH_KEY_PADPLUS GIIK_PPlus +#define ARCH_KEY_PADPERIOD GIIK_PDecimal +#define ARCH_KEY_PADDIVIDE GIIK_PSlash +#define ARCH_KEY_PADMULTIPLY GIIK_PAsterisk +#define ARCH_KEY_PADENTER GIIK_PEnter + +#define ARCH_KEY_INSERT GIIK_Insert +#define ARCH_KEY_HOME GIIK_Home +#define ARCH_KEY_PAGEUP GIIK_PageUp +#define ARCH_KEY_DELETE GIIK_Delete +#define ARCH_KEY_END GIIK_End +#define ARCH_KEY_PAGEDOWN GIIK_PageDown +#define ARCH_KEY_UP GIIK_Up +#define ARCH_KEY_DOWN GIIK_Down +#define ARCH_KEY_LEFT GIIK_Left +#define ARCH_KEY_RIGHT GIIK_Right + +#define ARCH_KEY_PRINT_SCREEN GIIK_PrintScreen +#define ARCH_KEY_PAUSE GIIK_Pause + +#endif diff --git a/arch/ggi/key_arch.c b/arch/ggi/key_arch.c new file mode 100644 index 00000000..7dc4b490 --- /dev/null +++ b/arch/ggi/key_arch.c @@ -0,0 +1,26 @@ +#include "key.h" +#include "event.h" + +void keyboard_handler(int button, ubyte state) +{ + generic_key_handler(button,state); +} + +void arch_key_poll() +{ + event_poll(); +} + +void arch_key_close() +{ +} + +void arch_key_init() +{ + keyd_fake_repeat=1; +} + +void arch_key_flush() +{ +} + diff --git a/arch/sdl/include/key_arch.h b/arch/sdl/include/key_arch.h new file mode 100644 index 00000000..6c2cc2df --- /dev/null +++ b/arch/sdl/include/key_arch.h @@ -0,0 +1,207 @@ +/* +THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX +SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO +END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A +ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS +IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS +SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE +FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE +CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS +AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. +COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. +*/ +/* + * $Source: /cvs/cvsroot/d2x/arch/sdl/include/key_arch.h,v $ + * $Revision: 1.1 $ + * $Author: bradleyb $ + * $Date: 2002-02-15 07:18:00 $ + * + * Header for keyboard functions + * + * $Log: not supported by cvs2svn $ + * Revision 1.1 2000/01/17 05:58:38 donut + * switched from multiply reimplemented/reduntant/buggy key.c for each arch to a single main/key.c that calls the much smaller arch-specific parts. Also adds working emulated key repeat support. + * + * Revision 1.1.1.1 1999/06/14 22:02:01 donut + * Import of d1x 1.37 source. + * + * Revision 1.19 1994/10/24 13:58:12 john + * Hacked in support for pause key onto code 0x61. + * + * Revision 1.18 1994/10/21 15:17:10 john + * Added KEY_PRINT_SCREEN + * + * Revision 1.17 1994/08/31 12:22:13 john + * Added KEY_DEBUGGED + * + * Revision 1.16 1994/08/24 18:53:50 john + * Made Cyberman read like normal mouse; added dpmi module; moved + * mouse from assembly to c. Made mouse buttons return time_down. + * + * Revision 1.15 1994/08/18 14:56:16 john + * *** empty log message *** + * + * Revision 1.14 1994/08/08 10:43:24 john + * Recorded when a key was pressed for key_inkey_time. + * + * Revision 1.13 1994/06/17 17:17:28 john + * Added keyd_time_last_key_was_pressed or something like that. + * + * Revision 1.12 1994/04/29 12:14:19 john + * Locked all memory used during interrupts so that program + * won't hang when using virtual memory. + * + * Revision 1.11 1994/02/17 15:57:14 john + * Changed key libary to C. + * + * Revision 1.10 1994/01/31 08:34:09 john + * Fixed reversed lshift/rshift keys. + * + * Revision 1.9 1994/01/18 10:58:17 john + * *** empty log message *** + * + * Revision 1.8 1993/10/16 19:24:43 matt + * Added new function key_clear_times() & key_clear_counts() + * + * Revision 1.7 1993/10/15 10:17:09 john + * added keyd_last_key_pressed and released for use with recorder. + * + * Revision 1.6 1993/10/06 16:20:37 john + * fixed down arrow bug + * + * Revision 1.5 1993/10/04 13:26:42 john + * changed the #defines for scan codes. + * + * Revision 1.4 1993/09/28 11:35:20 john + * added key_peekkey + * + * Revision 1.3 1993/09/20 18:36:43 john + * *** empty log message *** + * + * Revision 1.1 1993/07/10 13:10:39 matt + * Initial revision + * + * + */ + +#ifndef _SDL_KEY_H +#define _SDL_KEY_H + +#include + +#define ARCH_KEY_0 SDLK_0 +#define ARCH_KEY_1 SDLK_1 +#define ARCH_KEY_2 SDLK_2 +#define ARCH_KEY_3 SDLK_3 +#define ARCH_KEY_4 SDLK_4 +#define ARCH_KEY_5 SDLK_5 +#define ARCH_KEY_6 SDLK_6 +#define ARCH_KEY_7 SDLK_7 +#define ARCH_KEY_8 SDLK_8 +#define ARCH_KEY_9 SDLK_9 + +#define ARCH_KEY_A SDLK_a +#define ARCH_KEY_B SDLK_b +#define ARCH_KEY_C SDLK_c +#define ARCH_KEY_D SDLK_d +#define ARCH_KEY_E SDLK_e +#define ARCH_KEY_F SDLK_f +#define ARCH_KEY_G SDLK_g +#define ARCH_KEY_H SDLK_h +#define ARCH_KEY_I SDLK_i +#define ARCH_KEY_J SDLK_j +#define ARCH_KEY_K SDLK_k +#define ARCH_KEY_L SDLK_l +#define ARCH_KEY_M SDLK_m +#define ARCH_KEY_N SDLK_n +#define ARCH_KEY_O SDLK_o +#define ARCH_KEY_P SDLK_p +#define ARCH_KEY_Q SDLK_q +#define ARCH_KEY_R SDLK_r +#define ARCH_KEY_S SDLK_s +#define ARCH_KEY_T SDLK_t +#define ARCH_KEY_U SDLK_u +#define ARCH_KEY_V SDLK_v +#define ARCH_KEY_W SDLK_w +#define ARCH_KEY_X SDLK_x +#define ARCH_KEY_Y SDLK_y +#define ARCH_KEY_Z SDLK_z + +#define ARCH_KEY_MINUS SDLK_MINUS +#define ARCH_KEY_EQUAL SDLK_EQUALS +#define ARCH_KEY_DIVIDE SDLK_SLASH +#define ARCH_KEY_SLASH SDLK_BACKSLASH +#define ARCH_KEY_COMMA SDLK_COMMA +#define ARCH_KEY_PERIOD SDLK_PERIOD +#define ARCH_KEY_SEMICOL SDLK_SEMICOLON + +#define ARCH_KEY_LBRACKET SDLK_LEFTBRACKET +#define ARCH_KEY_RBRACKET SDLK_RIGHTBRACKET + +#define ARCH_KEY_RAPOSTRO SDLK_QUOTE +#define ARCH_KEY_LAPOSTRO SDLK_BACKQUOTE + +#define ARCH_KEY_ESC SDLK_ESCAPE +#define ARCH_KEY_ENTER SDLK_RETURN +#define ARCH_KEY_BACKSP SDLK_BACKSPACE +#define ARCH_KEY_TAB SDLK_TAB +#define ARCH_KEY_SPACEBAR SDLK_SPACE + +#define ARCH_KEY_NUMLOCK SDLK_NUMLOCK +#define ARCH_KEY_SCROLLOCK SDLK_SCROLLOCK +#define ARCH_KEY_CAPSLOCK SDLK_CAPSLOCK + +#define ARCH_KEY_LSHIFT SDLK_LSHIFT +#define ARCH_KEY_RSHIFT SDLK_RSHIFT + +#define ARCH_KEY_LALT SDLK_LALT +#define ARCH_KEY_RALT SDLK_RALT + +#define ARCH_KEY_LCTRL SDLK_LCTRL +#define ARCH_KEY_RCTRL SDLK_RCTRL + +#define ARCH_KEY_F1 SDLK_F1 +#define ARCH_KEY_F2 SDLK_F2 +#define ARCH_KEY_F3 SDLK_F3 +#define ARCH_KEY_F4 SDLK_F4 +#define ARCH_KEY_F5 SDLK_F5 +#define ARCH_KEY_F6 SDLK_F6 +#define ARCH_KEY_F7 SDLK_F7 +#define ARCH_KEY_F8 SDLK_F8 +#define ARCH_KEY_F9 SDLK_F9 +#define ARCH_KEY_F10 SDLK_F10 +#define ARCH_KEY_F11 SDLK_F11 +#define ARCH_KEY_F12 SDLK_F12 + +#define ARCH_KEY_PAD0 SDLK_KP0 +#define ARCH_KEY_PAD1 SDLK_KP1 +#define ARCH_KEY_PAD2 SDLK_KP2 +#define ARCH_KEY_PAD3 SDLK_KP3 +#define ARCH_KEY_PAD4 SDLK_KP4 +#define ARCH_KEY_PAD5 SDLK_KP5 +#define ARCH_KEY_PAD6 SDLK_KP6 +#define ARCH_KEY_PAD7 SDLK_KP7 +#define ARCH_KEY_PAD8 SDLK_KP8 +#define ARCH_KEY_PAD9 SDLK_KP9 +#define ARCH_KEY_PADMINUS SDLK_KP_MINUS +#define ARCH_KEY_PADPLUS SDLK_KP_PLUS +#define ARCH_KEY_PADPERIOD SDLK_KP_PERIOD +#define ARCH_KEY_PADDIVIDE SDLK_KP_DIVIDE +#define ARCH_KEY_PADMULTIPLY SDLK_KP_MULTIPLY +#define ARCH_KEY_PADENTER SDLK_KP_ENTER + +#define ARCH_KEY_INSERT SDLK_INSERT +#define ARCH_KEY_HOME SDLK_HOME +#define ARCH_KEY_PAGEUP SDLK_PAGEUP +#define ARCH_KEY_DELETE SDLK_DELETE +#define ARCH_KEY_END SDLK_END +#define ARCH_KEY_PAGEDOWN SDLK_PAGEDOWN +#define ARCH_KEY_UP SDLK_UP +#define ARCH_KEY_DOWN SDLK_DOWN +#define ARCH_KEY_LEFT SDLK_LEFT +#define ARCH_KEY_RIGHT SDLK_RIGHT + +#define ARCH_KEY_PRINT_SCREEN SDLK_PRINT +#define ARCH_KEY_PAUSE SDLK_PAUSE + +#endif diff --git a/arch/sdl/key_arch.c b/arch/sdl/key_arch.c new file mode 100644 index 00000000..6c073b47 --- /dev/null +++ b/arch/sdl/key_arch.c @@ -0,0 +1,37 @@ +// SDL keyboard input support + +#include +#include + +#include + +#include "event.h" +#include "error.h" +#include "key.h" +#include "timer.h" + + + +void key_handler(SDL_KeyboardEvent *event) +{ + generic_key_handler(event->keysym.sym,(event->state == SDL_PRESSED)); +} +void arch_key_close(void) +{ +} +void arch_key_init(void) +{ + keyd_fake_repeat=1; +} +void arch_key_flush(void) +{ +} + + +void arch_key_poll(void) +{ + event_poll(); +} + + + diff --git a/arch/svgalib/include/key_arch.h b/arch/svgalib/include/key_arch.h new file mode 100644 index 00000000..3b0468a5 --- /dev/null +++ b/arch/svgalib/include/key_arch.h @@ -0,0 +1,207 @@ +/* +THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX +SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO +END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A +ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS +IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS +SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE +FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE +CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS +AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. +COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. +*/ +/* + * $Source: /cvs/cvsroot/d2x/arch/svgalib/include/key_arch.h,v $ + * $Revision: 1.1 $ + * $Author: bradleyb $ + * $Date: 2002-02-15 07:18:00 $ + * + * Header for keyboard functions + * + * $Log: not supported by cvs2svn $ + * Revision 1.1 2000/01/17 05:58:38 donut + * switched from multiply reimplemented/reduntant/buggy key.c for each arch to a single main/key.c that calls the much smaller arch-specific parts. Also adds working emulated key repeat support. + * + * Revision 1.1.1.1 1999/06/14 22:01:46 donut + * Import of d1x 1.37 source. + * + * Revision 1.19 1994/10/24 13:58:12 john + * Hacked in support for pause key onto code 0x61. + * + * Revision 1.18 1994/10/21 15:17:10 john + * Added KEY_PRINT_SCREEN + * + * Revision 1.17 1994/08/31 12:22:13 john + * Added KEY_DEBUGGED + * + * Revision 1.16 1994/08/24 18:53:50 john + * Made Cyberman read like normal mouse; added dpmi module; moved + * mouse from assembly to c. Made mouse buttons return time_down. + * + * Revision 1.15 1994/08/18 14:56:16 john + * *** empty log message *** + * + * Revision 1.14 1994/08/08 10:43:24 john + * Recorded when a key was pressed for key_inkey_time. + * + * Revision 1.13 1994/06/17 17:17:28 john + * Added keyd_time_last_key_was_pressed or something like that. + * + * Revision 1.12 1994/04/29 12:14:19 john + * Locked all memory used during interrupts so that program + * won't hang when using virtual memory. + * + * Revision 1.11 1994/02/17 15:57:14 john + * Changed key libary to C. + * + * Revision 1.10 1994/01/31 08:34:09 john + * Fixed reversed lshift/rshift keys. + * + * Revision 1.9 1994/01/18 10:58:17 john + * *** empty log message *** + * + * Revision 1.8 1993/10/16 19:24:43 matt + * Added new function key_clear_times() & key_clear_counts() + * + * Revision 1.7 1993/10/15 10:17:09 john + * added keyd_last_key_pressed and released for use with recorder. + * + * Revision 1.6 1993/10/06 16:20:37 john + * fixed down arrow bug + * + * Revision 1.5 1993/10/04 13:26:42 john + * changed the #defines for scan codes. + * + * Revision 1.4 1993/09/28 11:35:20 john + * added key_peekkey + * + * Revision 1.3 1993/09/20 18:36:43 john + * *** empty log message *** + * + * Revision 1.1 1993/07/10 13:10:39 matt + * Initial revision + * + * + */ + +#ifndef _SVGALIB_KEY_H +#define _SVGALIB_KEY_H + +#include + +#define ARCH_KEY_0 11 +#define ARCH_KEY_1 2 +#define ARCH_KEY_2 3 +#define ARCH_KEY_3 4 +#define ARCH_KEY_4 5 +#define ARCH_KEY_5 6 +#define ARCH_KEY_6 7 +#define ARCH_KEY_7 8 +#define ARCH_KEY_8 9 +#define ARCH_KEY_9 10 + +#define ARCH_KEY_A 30 +#define ARCH_KEY_B 48 +#define ARCH_KEY_C 46 +#define ARCH_KEY_D 32 +#define ARCH_KEY_E 18 +#define ARCH_KEY_F 33 +#define ARCH_KEY_G 34 +#define ARCH_KEY_H 35 +#define ARCH_KEY_I 23 +#define ARCH_KEY_J 36 +#define ARCH_KEY_K 37 +#define ARCH_KEY_L 38 +#define ARCH_KEY_M 50 +#define ARCH_KEY_N 49 +#define ARCH_KEY_O 24 +#define ARCH_KEY_P 25 +#define ARCH_KEY_Q 16 +#define ARCH_KEY_R 19 +#define ARCH_KEY_S 31 +#define ARCH_KEY_T 20 +#define ARCH_KEY_U 22 +#define ARCH_KEY_V 47 +#define ARCH_KEY_W 17 +#define ARCH_KEY_X 45 +#define ARCH_KEY_Y 21 +#define ARCH_KEY_Z 44 + +#define ARCH_KEY_MINUS 12 +#define ARCH_KEY_EQUAL 13 +#define ARCH_KEY_DIVIDE 43 +#define ARCH_KEY_SLASH 28 +#define ARCH_KEY_COMMA 51 +#define ARCH_KEY_PERIOD 52 +#define ARCH_KEY_SEMICOL 39 + +#define ARCH_KEY_LBRACKET 26 +#define ARCH_KEY_RBRACKET 27 + +#define ARCH_KEY_RAPOSTRO 40 +#define ARCH_KEY_LAPOSTRO 41 + +#define ARCH_KEY_ESC 1 +#define ARCH_KEY_ENTER 28 +#define ARCH_KEY_BACKSP 14 +#define ARCH_KEY_TAB 15 +#define ARCH_KEY_SPACEBAR 57 + +#define ARCH_KEY_NUMLOCK 69 +#define ARCH_KEY_SCROLLOCK 70 +#define ARCH_KEY_CAPSLOCK 58 + +#define ARCH_KEY_LSHIFT 42 +#define ARCH_KEY_RSHIFT 54 + +#define ARCH_KEY_LALT 56 +#define ARCH_KEY_RALT 100 + +#define ARCH_KEY_LCTRL 29 +#define ARCH_KEY_RCTRL 97 + +#define ARCH_KEY_F1 59 +#define ARCH_KEY_F2 60 +#define ARCH_KEY_F3 61 +#define ARCH_KEY_F4 62 +#define ARCH_KEY_F5 63 +#define ARCH_KEY_F6 64 +#define ARCH_KEY_F7 65 +#define ARCH_KEY_F8 66 +#define ARCH_KEY_F9 67 +#define ARCH_KEY_F10 68 +#define ARCH_KEY_F11 87 +#define ARCH_KEY_F12 88 + +#define ARCH_KEY_PAD0 82 +#define ARCH_KEY_PAD1 79 +#define ARCH_KEY_PAD2 80 +#define ARCH_KEY_PAD3 81 +#define ARCH_KEY_PAD4 75 +#define ARCH_KEY_PAD5 76 +#define ARCH_KEY_PAD6 77 +#define ARCH_KEY_PAD7 71 +#define ARCH_KEY_PAD8 72 +#define ARCH_KEY_PAD9 73 +#define ARCH_KEY_PADMINUS 74 +#define ARCH_KEY_PADPLUS 78 +#define ARCH_KEY_PADPERIOD 83 +#define ARCH_KEY_PADDIVIDE 98 +#define ARCH_KEY_PADMULTIPLY 55 +#define ARCH_KEY_PADENTER 96 + +#define ARCH_KEY_INSERT 110 +#define ARCH_KEY_HOME 102 +#define ARCH_KEY_PAGEUP 104 +#define ARCH_KEY_DELETE 111 +#define ARCH_KEY_END 107 +#define ARCH_KEY_PAGEDOWN 109 +#define ARCH_KEY_UP 103 +#define ARCH_KEY_DOWN 108 +#define ARCH_KEY_LEFT 105 +#define ARCH_KEY_RIGHT 106 + +#define ARCH_KEY_PRINT_SCREEN 99 +#define ARCH_KEY_PAUSE 119 + +#endif diff --git a/arch/svgalib/key_arch.c b/arch/svgalib/key_arch.c new file mode 100644 index 00000000..65694b6e --- /dev/null +++ b/arch/svgalib/key_arch.c @@ -0,0 +1,38 @@ +/// SDL keyboard input support + +#include +#include + +#include + +#include "error.h" +#include "event.h" +#include "key.h" + +void key_handler(int scancode, int press) +{ + generic_key_handler(scancode,press); +} + +void arch_key_close(void) +{ + keyboard_close(); +} + +void arch_key_init(void) +{ + if (keyboard_init()) + Error ("SVGAlib Keyboard Init Failed"); + + keyboard_seteventhandler (key_handler); + //keyd_fake_repeat = 1; +} + +void arch_key_flush(void) +{ +} + +void arch_key_poll(void) +{ + event_poll(); +} diff --git a/arch/win32/include/key_arch.h b/arch/win32/include/key_arch.h new file mode 100644 index 00000000..abeaf04b --- /dev/null +++ b/arch/win32/include/key_arch.h @@ -0,0 +1,216 @@ +/* +THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX +SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO +END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A +ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS +IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS +SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE +FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE +CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS +AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. +COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. +*/ +/* + * $Source: /cvs/cvsroot/d2x/arch/win32/include/key_arch.h,v $ + * $Revision: 1.1 $ + * $Author: bradleyb $ + * $Date: 2002-02-15 07:18:00 $ + * + * Header for keyboard functions + * + * $Log: not supported by cvs2svn $ + * Revision 1.2 2001/12/07 05:38:31 donut + * Fix mismatched arg types in the win32 code, work around byte being defined by windows headers as well as our own, and allow overriding of make vars. + * + * Revision 1.1 2000/01/17 05:58:38 donut + * switched from multiply reimplemented/reduntant/buggy key.c for each arch to a single main/key.c that calls the much smaller arch-specific parts. Also adds working emulated key repeat support. + * + * Revision 1.1.1.1 1999/06/14 22:01:23 donut + * Import of d1x 1.37 source. + * + * Revision 1.19 1994/10/24 13:58:12 john + * Hacked in support for pause key onto code 0x61. + * + * Revision 1.18 1994/10/21 15:17:10 john + * Added KEY_PRINT_SCREEN + * + * Revision 1.17 1994/08/31 12:22:13 john + * Added KEY_DEBUGGED + * + * Revision 1.16 1994/08/24 18:53:50 john + * Made Cyberman read like normal mouse; added dpmi module; moved + * mouse from assembly to c. Made mouse buttons return time_down. + * + * Revision 1.15 1994/08/18 14:56:16 john + * *** empty log message *** + * + * Revision 1.14 1994/08/08 10:43:24 john + * Recorded when a key was pressed for key_inkey_time. + * + * Revision 1.13 1994/06/17 17:17:28 john + * Added keyd_time_last_key_was_pressed or something like that. + * + * Revision 1.12 1994/04/29 12:14:19 john + * Locked all memory used during interrupts so that program + * won't hang when using virtual memory. + * + * Revision 1.11 1994/02/17 15:57:14 john + * Changed key libary to C. + * + * Revision 1.10 1994/01/31 08:34:09 john + * Fixed reversed lshift/rshift keys. + * + * Revision 1.9 1994/01/18 10:58:17 john + * *** empty log message *** + * + * Revision 1.8 1993/10/16 19:24:43 matt + * Added new function key_clear_times() & key_clear_counts() + * + * Revision 1.7 1993/10/15 10:17:09 john + * added keyd_last_key_pressed and released for use with recorder. + * + * Revision 1.6 1993/10/06 16:20:37 john + * fixed down arrow bug + * + * Revision 1.5 1993/10/04 13:26:42 john + * changed the #defines for scan codes. + * + * Revision 1.4 1993/09/28 11:35:20 john + * added key_peekkey + * + * Revision 1.3 1993/09/20 18:36:43 john + * *** empty log message *** + * + * Revision 1.1 1993/07/10 13:10:39 matt + * Initial revision + * + * + */ + +#ifndef _WIN32_KEY_H +#define _WIN32_KEY_H + +//changed key defines to use DIK_* - 2000/01/14 Matt Mueller. -heh, a bunch were wrong. +#define byte w32_byte +#define WIN32_LEAN_AND_MEAN +#include +#include // For DIK_* +#undef byte + +#define ARCH_KEY_0 DIK_0 +#define ARCH_KEY_1 DIK_1 +#define ARCH_KEY_2 DIK_2 +#define ARCH_KEY_3 DIK_3 +#define ARCH_KEY_4 DIK_4 +#define ARCH_KEY_5 DIK_5 +#define ARCH_KEY_6 DIK_6 +#define ARCH_KEY_7 DIK_7 +#define ARCH_KEY_8 DIK_8 +#define ARCH_KEY_9 DIK_9 + +#define ARCH_KEY_A DIK_A +#define ARCH_KEY_B DIK_B +#define ARCH_KEY_C DIK_C +#define ARCH_KEY_D DIK_D +#define ARCH_KEY_E DIK_E +#define ARCH_KEY_F DIK_F +#define ARCH_KEY_G DIK_G +#define ARCH_KEY_H DIK_H +#define ARCH_KEY_I DIK_I +#define ARCH_KEY_J DIK_J +#define ARCH_KEY_K DIK_K +#define ARCH_KEY_L DIK_L +#define ARCH_KEY_M DIK_M +#define ARCH_KEY_N DIK_N +#define ARCH_KEY_O DIK_O +#define ARCH_KEY_P DIK_P +#define ARCH_KEY_Q DIK_Q +#define ARCH_KEY_R DIK_R +#define ARCH_KEY_S DIK_S +#define ARCH_KEY_T DIK_T +#define ARCH_KEY_U DIK_U +#define ARCH_KEY_V DIK_V +#define ARCH_KEY_W DIK_W +#define ARCH_KEY_X DIK_X +#define ARCH_KEY_Y DIK_Y +#define ARCH_KEY_Z DIK_Z + +#define ARCH_KEY_MINUS DIK_MINUS +#define ARCH_KEY_EQUAL DIK_EQUALS +#define ARCH_KEY_DIVIDE DIK_SLASH +#define ARCH_KEY_SLASH DIK_BACKSLASH +#define ARCH_KEY_COMMA DIK_COMMA +#define ARCH_KEY_PERIOD DIK_PERIOD +#define ARCH_KEY_SEMICOL DIK_SEMICOLON + +#define ARCH_KEY_LBRACKET DIK_LBRACKET +#define ARCH_KEY_RBRACKET DIK_RBRACKET + +#define ARCH_KEY_RAPOSTRO DIK_APOSTROPHE +#define ARCH_KEY_LAPOSTRO DIK_GRAVE + +#define ARCH_KEY_ESC DIK_ESCAPE +#define ARCH_KEY_ENTER DIK_RETURN +#define ARCH_KEY_BACKSP DIK_BACK +#define ARCH_KEY_TAB DIK_TAB +#define ARCH_KEY_SPACEBAR DIK_SPACE + +#define ARCH_KEY_NUMLOCK DIK_NUMLOCK +#define ARCH_KEY_SCROLLOCK DIK_SCROLL +#define ARCH_KEY_CAPSLOCK DIK_CAPSLOCK + +#define ARCH_KEY_LSHIFT DIK_LSHIFT +#define ARCH_KEY_RSHIFT DIK_RSHIFT + +#define ARCH_KEY_LALT DIK_LALT +#define ARCH_KEY_RALT DIK_RALT + +#define ARCH_KEY_LCTRL DIK_LCONTROL +#define ARCH_KEY_RCTRL DIK_RCONTROL + +#define ARCH_KEY_F1 DIK_F1 +#define ARCH_KEY_F2 DIK_F2 +#define ARCH_KEY_F3 DIK_F3 +#define ARCH_KEY_F4 DIK_F4 +#define ARCH_KEY_F5 DIK_F5 +#define ARCH_KEY_F6 DIK_F6 +#define ARCH_KEY_F7 DIK_F7 +#define ARCH_KEY_F8 DIK_F8 +#define ARCH_KEY_F9 DIK_F9 +#define ARCH_KEY_F10 DIK_F10 +#define ARCH_KEY_F11 DIK_F11 +#define ARCH_KEY_F12 DIK_F12 + +#define ARCH_KEY_PAD0 DIK_NUMPAD0 +#define ARCH_KEY_PAD1 DIK_NUMPAD1 +#define ARCH_KEY_PAD2 DIK_NUMPAD2 +#define ARCH_KEY_PAD3 DIK_NUMPAD3 +#define ARCH_KEY_PAD4 DIK_NUMPAD4 +#define ARCH_KEY_PAD5 DIK_NUMPAD5 +#define ARCH_KEY_PAD6 DIK_NUMPAD6 +#define ARCH_KEY_PAD7 DIK_NUMPAD7 +#define ARCH_KEY_PAD8 DIK_NUMPAD8 +#define ARCH_KEY_PAD9 DIK_NUMPAD9 +#define ARCH_KEY_PADMINUS DIK_NUMPADMINUS +#define ARCH_KEY_PADPLUS DIK_NUMPADPLUS +#define ARCH_KEY_PADPERIOD DIK_NUMPADPERIOD +#define ARCH_KEY_PADDIVIDE DIK_NUMPADSLASH +#define ARCH_KEY_PADMULTIPLY DIK_NUMPADSTAR +#define ARCH_KEY_PADENTER DIK_NUMPADENTER + +#define ARCH_KEY_INSERT DIK_INSERT +#define ARCH_KEY_HOME DIK_HOME +#define ARCH_KEY_PAGEUP DIK_PGUP +#define ARCH_KEY_DELETE DIK_DELETE +#define ARCH_KEY_END DIK_END +#define ARCH_KEY_PAGEDOWN DIK_PGDN +#define ARCH_KEY_UP DIK_UP +#define ARCH_KEY_DOWN DIK_DOWN +#define ARCH_KEY_LEFT DIK_LEFT +#define ARCH_KEY_RIGHT DIK_RIGHT + +#define ARCH_KEY_PRINT_SCREEN DIK_SYSRQ +//there doesn't seem to be a DIK_PAUSE. +#define ARCH_KEY_PAUSE 197 + +#endif diff --git a/arch/win32/key_arch.c b/arch/win32/key_arch.c new file mode 100644 index 00000000..2693097e --- /dev/null +++ b/arch/win32/key_arch.c @@ -0,0 +1,169 @@ +#define byte w32_byte +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#undef byte +//#include "inferno.h" +#include "fix.h" +#include "timer.h" +#include "key.h" + +extern void PumpMessages(void); + +// These are to kludge up a bit my slightly broken GCC directx port. +#ifndef E_FAIL +#define E_FAIL (HRESULT)0x80004005L +#endif +#ifndef SUCCEEDED +#define SUCCEEDED(a) ((HRESULT)(a) >= 0) +#endif +#ifndef S_OK +#define S_OK 0 +#define S_FALSE 1 +#endif + +extern void PumpMessages(void); + +unsigned char WMKey_Handler_Ready=0; + + +LPDIRECTINPUT g_lpdi; +LPDIRECTINPUTDEVICE g_lpdidKeybd; +extern HWND g_hWnd; + +typedef int KEYCODE; + +static BOOL EnsureInit (void) +{ + if (g_lpdidKeybd == NULL) + { + key_init (); + } + + return g_lpdidKeybd != NULL; +} + +void arch_key_init() +{ + HRESULT hr; + + keyd_fake_repeat=1;//direct input doesn't repeat. -MPM + + // my kingdom, my kingdom for C++... + if (SUCCEEDED (hr = DirectInputCreate (GetModuleHandle (NULL), DIRECTINPUT_VERSION, &g_lpdi, NULL))) + { + if (SUCCEEDED (hr = IDirectInput_CreateDevice (g_lpdi, (void *)&GUID_SysKeyboard, &g_lpdidKeybd, NULL))) + { + DIPROPDWORD dipdw; + + dipdw.diph.dwSize = sizeof (DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof (DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 40; + + if (SUCCEEDED (hr = IDirectInputDevice_SetDataFormat (g_lpdidKeybd, &c_dfDIKeyboard)) && + SUCCEEDED (hr = IDirectInputDevice_SetCooperativeLevel (g_lpdidKeybd, g_hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND)) && + SUCCEEDED (hr = IDirectInputDevice_SetProperty (g_lpdidKeybd, DIPROP_BUFFERSIZE, &dipdw.diph)) && + SUCCEEDED (hr = IDirectInputDevice_Acquire (g_lpdidKeybd))) + { + // fine + WMKey_Handler_Ready = 1; + + } + else + { + IDirectInputDevice_Release (g_lpdidKeybd); + g_lpdidKeybd = NULL; + } + } + } +} + +void arch_key_close(void) +{ + WMKey_Handler_Ready = 0; + if (g_lpdidKeybd != NULL) + { + IDirectInputDevice_Unacquire (g_lpdidKeybd); + IDirectInputDevice_Release (g_lpdidKeybd); + g_lpdidKeybd = NULL; + } + if (g_lpdi != NULL) + { + IDirectInput_Release (g_lpdi); + g_lpdi = NULL; + } +} + +HRESULT ReadKey (DIDEVICEOBJECTDATA *pdidod) +{ + DWORD cElements = 1; + HRESULT hr; + if (g_lpdidKeybd == NULL) + return E_FAIL; + hr = IDirectInputDevice_Acquire (g_lpdidKeybd); + if (SUCCEEDED (hr)) + { + hr = IDirectInputDevice_GetDeviceData ( + g_lpdidKeybd, + sizeof (*pdidod), + pdidod, + &cElements, + 0); + if (SUCCEEDED (hr) && cElements != 1) + hr = E_FAIL; + } + + return hr; +} + +void UpdateState (DIDEVICEOBJECTDATA *pdidod) +{ + generic_key_handler(pdidod->dwOfs,(pdidod->dwData & 0x80)); +} + +void keyboard_handler() +{ +// static int peekmsgcount = 0; + DIDEVICEOBJECTDATA didod; + while (SUCCEEDED (ReadKey (&didod))) + { + UpdateState (&didod); + + //added 02/20/99 by adb to prevent message overflow + //(this should probably go somewhere else...) +// if (++peekmsgcount == 64) // 64 = wild guess... +// { +// peekmsgcount = 0; +// } + //end additions + } + PumpMessages(); +} + + + +void arch_key_flush() +{ + if (EnsureInit ()) + { + DWORD cElements = INFINITE; +// HRESULT hr = + IDirectInputDevice_GetDeviceData ( + g_lpdidKeybd, + sizeof (DIDEVICEOBJECTDATA), + NULL, + &cElements, + 0); + + } +} + + + +void arch_key_poll(void) +{ + keyboard_handler(); +} -- 2.39.2