home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
149.lha
/
ColorTerm
/
keyconvert.4th
< prev
next >
Wrap
Text File
|
1988-04-25
|
2KB
|
79 lines
\ This file Copyright 1988 by Warren Block.
\ keyconvert.f
HEX
CREATE ConvTable \ note: bk=DEL, ESC=HOME
\ `123 4567 890- =\ 0 qwer tyui
60313233 , 34353637 , 3839302D , 3D5C0030 , 71776572 , 74797569 ,
\ op[] nul 123 asdf ghjk l;' cr 456
6F705B5D , 00313233 , 61736466 , 67686A6B , 6C3B270D , 00343536 ,
\ zxc vbnm ,./ nul .789 sp bk tb cr cr esc del
007A7863 , 76626E6D , 2C2E2F00 , 2E373839 , 2014090D , 0D137F14 ,
CREATE ShiftTable \ note: shift-bk=INSERT, shift-ESC=CLEAR
\ ~!@# $%^& *()_ +| 0 QWER TYUI
7E214023 , 24255E26 , 2A282920 , 2B7C0030 , D1D7C5D2 , D4D9D5C9 ,
\ OP{} 123 ASDF GHJK L:" cr 456
CFD0DBDD , 00313233 , C1D3C4C6 , C7C8CACB , CC3A220D , 00343536 ,
\ ZXC VBNM <>? .789 sp bk tb cr cr esc del
00DAD8C3 , D6C2CECD , 3C3E3F00 , 2E373839 , 2094090D , 0D937F14 ,
CREATE ArrowTable
\ up down right left
91111D9D ,
CREATE FKeyTable
\ black white red cyan purple green blue yellow rvson rvsoff
90051C9F , 9C1E1F9E , 12920000 ,
CREATE ShiftFKeyTable
\ orange brown lt.red gray1 gray2 lt.green lt.blue gray3 rvson rvsoff
81959697 , 98999A9B , 12920000 ,
DECIMAL
3 CONSTANT SHIFT
8 CONSTANT CTRL
4 CONSTANT CAPSLOCK
: IsAlpha ( char --- flag ) \ Check if a character is alpha.
65 90 RANGE SWAP 97 122 RANGE SWAP DROP OR ;
: KeyConvert ( keycode qualifier --- char ) \ Get ASCII value for key.
0 LOCALS| result qualifier keycode |
keycode 71 < IF
qualifier SHIFT AND IF \ SHIFT
ShiftTable
ELSE
ConvTable
THEN
keycode + C@ TO result
qualifier CAPSLOCK AND result IsAlpha AND IF \ CAPS LOCK
ShiftTable keycode + C@ TO result
THEN
qualifier CTRL AND result IsAlpha AND IF \ CTRL
result 31 AND TO result
THEN
ELSE \ keycode was 71 or greater
keycode CASE
76 79 RANGE.OF ArrowTable keycode 76 - + C@ TO result ENDOF
80 89 RANGE.OF
qualifier SHIFT AND qualifier CTRL AND OR IF
ShiftFKeyTable
ELSE
FKeyTable
THEN
keycode 80 - + C@ TO result ENDOF
90 255 RANGE.OF 0 TO result ENDOF
ENDCASE
THEN
result ;
\ 69 32768 KeyConvert