Download text file
Hi,

  It seems that there have been a rash of key-press questions popping
up again (must be the weather:) so I've prepared the following for
those of you who are still struggling with it. If you don't wish to
use the integer version then I've also sent the string version in the
mesage fGetKey$.

  The variable constants below represent all the 2byte key codes and
are in PB v3+ format. They can be quickly changed with a search and
replace. If you're using Q*Basic then you'll want to:
                  replace " : %" with ", "
                  replace "%" with "CONST"
                  replace "_" with "."      ' or
                  replace "_" with ""       '

At the bottom of the file are 3 versions of the fGetKey% function;
one for PB3.2, one for FirstBASIC and one for the Q*BASICs.

%HOME_key   = &h4700 : %UP_key     = &h4800 : %PGUP_key   = &h4900
%LEFT_key   = &h4B00 : %GREY5_key  = &h4C00 : %RIGHT_key  = &h4D00
%END_key    = &h4F00 : %DOWN_key   = &h5000 : %PGDN_key   = &h5100
%INS_key    = &h5200                        : %DEL_key    = &h5300

%CTRL_HOME  = &h7700 : %CTRL_UP    = &h8D00 : %CTRL_PGUP  = &h8400
%CTRL_LEFT  = &h7300 : %CTRL_GREY5 = &h8F00 : %CTRL_RIGHT = &h7400
%CTRL_END   = &h7500 : %CTRL_DOWN  = &h9100 : %CTRL_PGDN  = &h7600
%CTRL_INS   = &h9200                        : %CTRL_DEL   = &h9300

%ENTER_key  = &h000D                        : %CTRL_ENTER = &h000A
%ESC_key    = &h001B : %ALT_ESC    = &h0100
%BKSPC_key  = &h0008 : %ALT_BKSPC  = &h0E00 : %CTRL_BKSPC = &h007F
%TAB_key    = &h0009                        : %SHIFT_TAB  = &h0F00

%F01_key    = &h3B00 : %F02_key    = &h3C00 : %F03_key    = &h3D00
%F04_key    = &h3E00 : %F05_key    = &h3F00 : %F06_key    = &h4000
%F07_key    = &h4100 : %F08_key    = &h4200 : %F09_key    = &h4300
%F10_key    = &h4400 : %F11_key    = &h8500 : %F12_key    = &h8600
%ALT_F01    = &h6800 : %ALT_F02    = &h6900 : %ALT_F03    = &h6A00
%ALT_F04    = &h6B00 : %ALT_F05    = &h6C00 : %ALT_F06    = &h6D00
%ALT_F07    = &h6E00 : %ALT_F08    = &h6F00 : %ALT_F09    = &h7000
%ALT_F10    = &h7100 : %ALT_F11    = &h8B00 : %ALT_F12    = &h8C00
%CTRL_F01   = &h5E00 : %CTRL_F02   = &h5F00 : %CTRL_F03   = &h6000
%CTRL_F04   = &h6100 : %CTRL_F05   = &h6200 : %CTRL_F06   = &h6300
%CTRL_F07   = &h6400 : %CTRL_F08   = &h6500 : %CTRL_F09   = &h6600
%CTRL_F10   = &h6700 : %CTRL_F11   = &h8900 : %CTRL_F12   = &h8A00
%SHIFT_F01  = &h5400 : %SHIFT_F02  = &h5500 : %SHIFT_F03  = &h5600
%SHIFT_F04  = &h5700 : %SHIFT_F05  = &h5800 : %SHIFT_F06  = &h5900
%SHIFT_F07  = &h5A00 : %SHIFT_F08  = &h5B00 : %SHIFT_F09  = &h5C00
%SHIFT_F10  = &h5D00 : %SHIFT_F11  = &h8700 : %SHIFT_F12  = &h8800

%ALT_0 = &h8100 : %ALT_1 = &h7800 : %ALT_2 = &h7900 : %ALT_3 = &h7A00
%ALT_4 = &h7B00 : %ALT_5 = &h7C00 : %ALT_6 = &h7D00 : %ALT_7 = &h7E00
%ALT_8 = &h7F00 : %ALT_9 = &h8000 : %ALT_A = &h1E00 : %ALT_B = &h3000
%ALT_C = &h2E00 : %ALT_D = &h2000 : %ALT_E = &h1200 : %ALT_F = &h2100
%ALT_G = &h2200 : %ALT_H = &h2300 : %ALT_I = &h1700 : %ALT_J = &h2400
%ALT_K = &h2500 : %ALT_L = &h2600 : %ALT_M = &h3200 : %ALT_N = &h3100
%ALT_O = &h1800 : %ALT_P = &h1900 : %ALT_Q = &h1000 : %ALT_R = &h1300
%ALT_S = &h1F00 : %ALT_T = &h1400 : %ALT_U = &h1600 : %ALT_V = &h2F00
%ALT_W = &h1100 : %ALT_X = &h2D00 : %ALT_Y = &h1500 : %ALT_Z = &h2C00

%ALT_ESC   = &h0100 : %ALT_MINUS   = &h8200 : %ALT_F_SLASH   = &h3500
%ALT_TAB   = &hA500 : %ALT_EQUAL   = &h8300 : %ALT_L_QUOTE   = &h2900
%ALT_BKSPC = &h0E00 : %ALT_COMMA   = &h3300 : %ALT_R_BRACKET = &h1B00
%ALT_ENTER = &h1C00 : %ALT_PERIOD  = &h3400 : %ALT_L_BRACKET = &h1A00
%ALT_TILDE = &h2800 : %ALT_B_SLASH = &h2B00 : %ALT_SIMICOLON = &h2700

%CTRL_2 = &h0300 : %CTRL_6 = &h001E : %CTRL_A = &h0001
%CTRL_B = &h0002 : %CTRL_C = &h0003 : %CTRL_D = &h0004
%CTRL_E = &h0005 : %CTRL_F = &h0006 : %CTRL_G = &h0007
%CTRL_H = &h0008 : %CTRL_I = &h0009 : %CTRL_J = &h000A
%CTRL_K = &h000B : %CTRL_L = &h000C : %CTRL_M = &h000D
%CTRL_N = &h000E : %CTRL_O = &h000F : %CTRL_P = &h0010
%CTRL_Q = &h0011 : %CTRL_R = &h0012 : %CTRL_S = &h0013
%CTRL_T = &h0014 : %CTRL_U = &h0015 : %CTRL_V = &h0016
%CTRL_W = &h0017 : %CTRL_X = &h0018 : %CTRL_Y = &h0019
%CTRL_Z = &h001A

%CTRL_TAB       = &h9400 : %CTRL_MINUS     = &h001F
%CTRL_BKSPC     = &h007F : %CTRL_R_BRACKET = &h001D
%CTRL_B_SLASH   = &h001C : %CTRL_L_BRACKET = &h001B
%ALT_GREYMINUS  = &h4A00 : %CTRL_GREYMINUS = &h8E00
%ALT_GREYPLUS   = &h4E00 : %CTRL_GREYPLUS  = &h9000
%ALT_GREYSLASH  = &hA400 : %CTRL_GREYSLASH = &h9500
%ALT_GREYSTAR   = &h3700 : %CTRL_GREYSTAR  = &h9600
%ALT_GREYENTER  = &hA600

' PowerBASIC v3.0+
FUNCTION fGetKey%() LOCAL PUBLIC
  LOCAL G$

  WHILE NOT INSTAT : WEND
  G$ = INKEY$
  IF LEN(G$) = 1 THEN
      FUNCTION = ASCII( G$ )
    ELSE
      FUNCTION = CVI( G$ )
  END IF

END FUNCTION

' FirstBASIC and Older versions of PowerBASIC
FUNCTION fGetKey%() LOCAL PUBLIC
  LOCAL G$, L%

  DO
    G$ = INKEY$
    L% = LEN( G$ )
  LOOP UNTIL L% > 0
  IF L% = 1 THEN
      fGetKey% = ASC( G$ )
    ELSE
      fGetKey% = CVI( G$ )
  END IF

END FUNCTION

'Q*BASIC
FUNCTION fGetKey%

  DO
    G$ = INKEY$
    L% = LEN( G$ )
  LOOP UNTIL L% > 0
  IF L% = 1 THEN
      fGetKey% = ASC( G$ )
    ELSE
      fGetKey% = CVI( G$ )
  END IF

END FUNCTION