home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 149.lha / ColorTerm / keyconvert.4th < prev    next >
Text File  |  1988-04-25  |  2KB  |  79 lines

  1. \ This file Copyright 1988 by Warren Block.
  2.  
  3. \ keyconvert.f
  4.  
  5. HEX
  6.  
  7. CREATE ConvTable       \ note: bk=DEL, ESC=HOME
  8.  
  9. \ `123       4567       890-       =\ 0       qwer       tyui
  10. 60313233 , 34353637 , 3839302D , 3D5C0030 , 71776572 , 74797569 ,
  11. \ op[]     nul 123      asdf       ghjk      l;'  cr     456
  12. 6F705B5D , 00313233 , 61736466 , 67686A6B , 6C3B270D , 00343536 ,
  13. \  zxc       vbnm      ,./ nul     .789   sp bk tb cr  cr esc del
  14. 007A7863 , 76626E6D , 2C2E2F00 , 2E373839 , 2014090D , 0D137F14 ,
  15.  
  16. CREATE ShiftTable      \ note: shift-bk=INSERT, shift-ESC=CLEAR
  17.  
  18. \ ~!@#       $%^&       *()_       +| 0       QWER       TYUI
  19. 7E214023 , 24255E26 , 2A282920 , 2B7C0030 , D1D7C5D2 , D4D9D5C9 ,
  20. \ OP{}        123       ASDF       GHJK       L:" cr      456
  21. CFD0DBDD , 00313233 , C1D3C4C6 , C7C8CACB , CC3A220D , 00343536 ,
  22. \  ZXC       VBNM       <>?        .789   sp bk tb cr  cr esc del
  23. 00DAD8C3 , D6C2CECD , 3C3E3F00 , 2E373839 , 2094090D , 0D937F14 ,
  24.  
  25. CREATE ArrowTable
  26.  
  27. \ up down right left
  28. 91111D9D ,
  29.  
  30. CREATE FKeyTable
  31.  
  32. \ black white red cyan   purple green blue yellow   rvson rvsoff
  33.      90051C9F ,                 9C1E1F9E ,           12920000 ,
  34.  
  35. CREATE ShiftFKeyTable
  36. \ orange brown lt.red gray1   gray2 lt.green lt.blue gray3    rvson rvsoff
  37.      81959697 ,                 98999A9B ,                      12920000 ,
  38.  
  39. DECIMAL
  40.  
  41. 3 CONSTANT SHIFT
  42. 8 CONSTANT CTRL
  43. 4 CONSTANT CAPSLOCK
  44.  
  45. : IsAlpha   ( char --- flag )  \ Check if a character is alpha.
  46.    65 90 RANGE SWAP 97 122 RANGE SWAP DROP OR ;
  47.  
  48. : KeyConvert   ( keycode qualifier --- char )  \ Get ASCII value for key.
  49.    0 LOCALS| result qualifier keycode |
  50.    keycode 71 < IF
  51.      qualifier SHIFT AND IF                            \ SHIFT
  52.        ShiftTable
  53.      ELSE
  54.        ConvTable
  55.      THEN
  56.      keycode + C@ TO result
  57.      qualifier CAPSLOCK AND  result IsAlpha  AND IF    \ CAPS LOCK
  58.        ShiftTable keycode + C@ TO result
  59.      THEN
  60.      qualifier CTRL AND  result IsAlpha  AND IF        \ CTRL
  61.        result 31 AND TO result
  62.      THEN
  63.    ELSE                   \ keycode was 71 or greater
  64.      keycode CASE
  65.        76 79 RANGE.OF  ArrowTable keycode 76 - + C@ TO result ENDOF
  66.        80 89 RANGE.OF
  67.          qualifier SHIFT AND  qualifier CTRL AND  OR IF
  68.            ShiftFKeyTable
  69.          ELSE
  70.            FKeyTable
  71.          THEN
  72.          keycode 80 - + C@ TO result                          ENDOF
  73.        90 255 RANGE.OF  0 TO result                           ENDOF
  74.      ENDCASE
  75.    THEN
  76.    result ;
  77.  
  78. \ 69 32768 KeyConvert
  79.