\ 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