Category : Dbase (Clipper, FoxBase, etc) Languages Source Code
Archive   : KEYGET.ZIP
Filename : KEYGET.PRG

 
Output of file : KEYGET.PRG contained in archive : KEYGET.ZIP

* ÖÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·
* º 07/08/92 KEYGET.PRG 16:57:32 º
* ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
* º Constantine Peters º
* º Sysop of the ENIAC BBS (301)460-9134 º
* º º
* º Copyright (c) 1992 º
* º 14409 Briarwood Terr º
* º Rockville, MD 20853 º
* º º
* º Description: º
* º This program was written out of my frustration of º
* º not being able to take input directly from the º
* º INKEY() function and plug it directly into the º
* º KEYBOARD function. º
* º º
* º Below is a test module which offers the syntx of º
* º using INK2KBD, a procedure which changes the value º
* º if a string parameter from an INKEY return to º
* º a KEYBOARD input. The real meat is in FINK2KYB. º
* º º
* º If you find bugs, address them to my BBS# listed º
* º above. If you want to implement this in a º
* º commercial product, it'll cost ya $5.00 for my time. º
* ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĽ
* >>>> the code below runs a simple test of INK2KBD.
*
tStr = SPACE(10)
SET TALK OFF
* ---------------------- DIRECT inkey test
CLEAR
? "please enter 10 keystrokes ... "
? ""
for ti = 1 to 10
? TRANSFORM(ti,"999")+" : "+fink2kyb(INKEY(0,"S"))
next ti
wait space(15)+"... note that ESC will prompt you to cancel"
? ""
* -------------------- all key test of INK2KBD
FOR ti = 1 to 256
DO ink2kbd WITH ti, tStr IN LOCFILE("KEYGET" ,"PRG;FXP" ,"Where is KEYGET?")
IF LEN(TRIM(tStr)) > 0
? TRANSFORM(ti,"999")+" : "+tStr
* KEYBOARD(tStr) && if you were to use tStr, this is how !
ENDIF
NEXT ti
* -------------------- ESCAPE while there's time
FOR ti = 1 to 10
KEYBOARD(fink2kyb(27)) && send an escape 😉
NEXT ti
** ----------------- [end of test program]------------------
*
*
* ÖÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·
* º INK2KBD º
* º Variable: ii - inkey/asc() number º
* º iStr - return string º
* º Called By: º
* º Object Type: PROCEDURE º
* ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĽ
PROCEDURE ink2kbd
PARAMETER ii, iStr
iStr = fink2kyb(ii)
RETURN
*
* ÖÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·
* º FINK2KYB º
* º Variable: ci - inkey/asc() number º
* º rch - return string º
* º Called By: ink2kbd º
* º Object Type: FUNCTION º
* ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĽ
*
FUNCTION fink2kyb
PARAMETER ci
PRIVATE rch
rch = SPACE(0)
DO CASE
* ------[ KEYBOARD KEYSTROKES ]-----------
CASE (ci >= 97 .AND. ci <= 122) .OR. (ci >= 65 .AND. ci <= 90) .OR. ;
(ci >= 48 .AND. ci <= 57)
rch = "{"+chr(ci)+"}"
CASE (ci >= 35 .AND. ci <= 42) .OR. ci == 33 .OR. ci == 64
rch = chr(ci)

* ------[ CONTROL KEYBOARD KEYSTROKES ]-----------
CASE ci == 127
rch = "{CTRL+H}"
CASE (ci >= 1 .AND. ci <= 7) .OR. (ci >= 9 .AND. ci <= 26)
rch = "{CTRL+"+ chr(ci+64)+"}"

* ------[ FUNCTION KEYS ]-----------
CASE ci < 0 .OR. ci == 28 .OR. ;
(ci >= 84 .AND. ci <= 113) .OR. (ci >= 133 .AND. ci <= 140)
*
* NOTE *
* we embedded this segment of code for the sake of speed
* as it reduces the number of evaluations via the test
* case above
*
DO CASE
CASE ci == 28 && F1
rch = "{F1}"
CASE ci >= -9 .AND. ci <= -1 && F2 to 10
rch = "{F"+alltrim(str((ci*-1)+1))+"}"
CASE ci >=84 .AND. ci <= 93 && SHIFT-F1 to 10
rch = "{SHIFT+F"+alltrim(str(ci - 83))+"}"
CASE ci >=94 .AND. ci <= 103 && CTRL-F1 to 10
rch = "{CTRL+F"+alltrim(str(ci - 93))+"}"
CASE ci >=104 .AND. ci <= 113 && ALT-F1 to 10
rch = "{ALT+F"+alltrim(str(ci - 103))+"}"
CASE ci >= 133 .AND. ci <= 134 && F11 to 12
rch = "{F"+alltrim(str(ci - 122))+"}"
CASE ci >= 135 .AND. ci <= 136 && SHIFT-F11 to 12
rch = "{SHIFT+F"+alltrim(str(ci - 124))+"}"
CASE ci >= 137 .AND. ci <= 138 && CTRL-F11 to 12
rch = "{CTRL+F"+alltrim(str(ci - 126))+"}"
CASE ci >= 139 .AND. ci <= 140 && ALT-F11 to 12
rch = "{ALT+F"+alltrim(str(ci - 128))+"}"
ENDCASE

* ------[ ARROW KEYS ]-----------
CASE ci == 19
rch ="{LEFTARROW}"
CASE ci == 4
rch ="{RIGHTARROW}"
CASE ci == 5
rch ="{UPARROW}"
CASE ci == 24
rch ="{DNARROW}"
CASE ci == 1
rch = "{HOME}"
CASE ci == 6
rch ="{END}"
CASE ci == 18
rch ="{PGUP}"
CASE ci == 3
rch ="{PGDN}"
CASE ci == 7
rch ="{DEL}"
CASE ci == 127
rch ="{BACKSPACE}"
CASE ci == 20 .OR. ci == 32
rch ="{SPACEBAR}"
CASE ci == 22
rch = "{INS}"
CASE ci == 9
rch ="{TAB}"
CASE ci == 15
rch ="{BACKTAB}"
CASE ci == 13
rch ="{ENTER}"
CASE ci == 27
rch ="{ESC}"

* ------[ CTRL + ARROW KEYS ]-----------
CASE ci == 26
rch ="{CTRL+LEFTARROW}"
CASE ci == 2
rch ="{CTRL+RIGHTARROW}"
CASE ci == 29
rch = "{CTRL+HOME}"
CASE ci == 23
rch ="{CTRL+END}"
CASE ci == 31
rch ="{CTRL+PGUP}"
CASE ci == 30
rch ="{CTRL+PGDN}"
ENDCASE
RETURN(rch)