From beb3471ec8c6f3ca4d4f926344d36f665044fc26 Mon Sep 17 00:00:00 2001 From: "David G. Holm" Date: Wed, 22 Mar 2000 22:28:18 +0000 Subject: [PATCH] See ChangeLog entry 2000-03-22 17:25 GMT-5 David G. Holm --- harbour/ChangeLog | 5 + harbour/source/rtl/gtpca/kbdos2.gcc | 165 ++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 harbour/source/rtl/gtpca/kbdos2.gcc diff --git a/harbour/ChangeLog b/harbour/ChangeLog index e4ba8c5052..4c939c4864 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,8 @@ +2000-03-22 17:25 GMT-5 David G. Holm + + source/rtl/gtpca/kbdos2.gcc + + Added hb_gt_ReadKey() support for os2/gcc platform + (I forgot to run CVS ADD on this module earlier) + 20000322-22:46 GMT+1 Victor Szakats * include/hbdefs.h diff --git a/harbour/source/rtl/gtpca/kbdos2.gcc b/harbour/source/rtl/gtpca/kbdos2.gcc new file mode 100644 index 0000000000..0ce85dd7d3 --- /dev/null +++ b/harbour/source/rtl/gtpca/kbdos2.gcc @@ -0,0 +1,165 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * Video subsystem for OS/2 compilers + * + * Copyright 1999 David G. Holm + * www - http://www.harbour-project.org + * + * 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 2 of the License, or + * (at your option) any later version, with one exception: + * + * The exception is that if you link the Harbour Runtime Library (HRL) + * and/or the Harbour Virtual Machine (HVM) with other files to produce + * an executable, this does not by itself cause the resulting executable + * to be covered by the GNU General Public License. Your use of that + * executable is in no way restricted on account of linking the HRL + * and/or HVM code into it. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit + * their web site at http://www.gnu.org/). + * + */ + +/* NOTE: User programs should never call this layer directly! */ + +int hb_gt_ReadKey( HB_inkey_enum eventmask ) +{ + int ch; + HB_TRACE(HB_TR_DEBUG, ("hb_gt_ReadKey(%d)", (int) event_mask)); + + /* Read from the keyboard with no echo, no wait, and no SIGSEV on Ctrl-C */ + ch = _read_kbd( 0, 0, 0 ); + if( ch == 0 ) + { + /* It's a function key lead-in, so read the function key scan code */ + ch = _read_kbd( 0, 0, 0 ); + if( ch != -1 ) ch += 256; /* If it's really a scan code, offset it */ + } + /* _read_kbd() returns -1 for no key, the switch statement will handle + this. */ + + /* Perform key translations */ + switch( ch ) + { + case -1: /* No key available */ + ch = 0; + break; + case 328: /* Up arrow */ + ch = K_UP; + break; + case 336: /* Down arrow */ + ch = K_DOWN; + break; + case 331: /* Left arrow */ + ch = K_LEFT; + break; + case 333: /* Right arrow */ + ch = K_RIGHT; + break; + case 327: /* Home */ + ch = K_HOME; + break; + case 335: /* End */ + ch = K_END; + break; + case 329: /* Page Up */ + ch = K_PGUP; + break; + case 337: /* Page Down */ + ch = K_PGDN; + break; + case 371: /* Ctrl + Left arrow */ + ch = K_CTRL_LEFT; + break; + case 372: /* Ctrl + Right arrow */ + ch = K_CTRL_RIGHT; + break; + case 375: /* Ctrl + Home */ + ch = K_CTRL_HOME; + break; + case 373: /* Ctrl + End */ + ch = K_CTRL_END; + break; + case 388: /* Ctrl + Page Up */ + ch = K_CTRL_PGUP; + break; + case 374: /* Ctrl + Page Down */ + ch = K_CTRL_PGDN; + break; + case 338: /* Insert */ + ch = K_INS; + break; + case 339: /* Delete */ + ch = K_DEL; + break; + case 315: /* F1 */ + ch = K_F1; + break; + case 316: /* F2 */ + case 317: /* F3 */ + case 318: /* F4 */ + case 319: /* F5 */ + case 320: /* F6 */ + case 321: /* F7 */ + case 322: /* F8 */ + case 323: /* F9 */ + case 324: /* F10 */ + ch = 315 - ch; + break; + case 340: /* Shift + F1 */ + case 341: /* Shift + F2 */ + case 342: /* Shift + F3 */ + case 343: /* Shift + F4 */ + case 344: /* Shift + F5 */ + case 345: /* Shift + F6 */ + case 346: /* Shift + F7 */ + case 347: /* Shift + F8 */ + case 348: /* Shift + F9 */ + case 349: /* Shift + F10 */ + case 350: /* Ctrl + F1 */ + case 351: /* Ctrl + F2 */ + case 352: /* Ctrl + F3 */ + case 353: /* Ctrl + F4 */ + case 354: /* Ctrl + F5 */ + case 355: /* Ctrl + F6 */ + case 356: /* Ctrl + F7 */ + case 357: /* Ctrl + F8 */ + case 358: /* Ctrl + F9 */ + case 359: /* Ctrl + F10 */ + case 360: /* Alt + F1 */ + case 361: /* Alt + F2 */ + case 362: /* Alt + F3 */ + case 363: /* Alt + F4 */ + case 364: /* Alt + F5 */ + case 365: /* Alt + F6 */ + case 366: /* Alt + F7 */ + case 367: /* Alt + F8 */ + case 368: /* Alt + F9 */ + case 369: /* Alt + F10 */ + ch = 330 - ch; + break; + case 389: /* F11 */ + case 390: /* F12 */ + case 391: /* Shift + F11 */ + case 392: /* Shift + F12 */ + case 393: /* Ctrl + F11 */ + case 394: /* Ctrl + F12 */ + case 395: /* Alt + F11 */ + case 396: /* Alt + F12 */ + ch = 349 - ch; + } + return ch; +}