home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l3p070 < prev    next >
Text File  |  1990-07-15  |  4KB  |  108 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 3 Part 070  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.  
  6. Further discussion of the KEY_TEST program from Lesson 3 Part 050
  7.  
  8. New Word:  KEY   Wait for user to press key on keyboard and
  9. KEY  ( --   n )  return the key code n.  If n is < 128 then n
  10.                  is the ASCII code for the key pressed.  If n
  11.                  is > 128 then n is the function key scan code
  12.                  + 128.
  13.  
  14. Old Word:  EXIT  Stops compilation when not in a colon definition
  15. EXIT ( -- )      When compiled in a word, EXIT , will cause
  16.                  termination of word execution when encountered.
  17.  
  18. :  KEY_TEST ( -- )
  19.         BEGIN  CR  KEY       \  Wait for key press by user.
  20.         DUP  CONTROL M  =    \  Control M is return key.
  21.         IF DROP EXIT THEN    \  Exit infinite loop if pressed.
  22.         DUP .  EMIT          \  Otherwise show key pressed.
  23.         AGAIN ;
  24.  
  25. KEY_TEST <enter>
  26. 65 A                  <--- pressed upper case A
  27. 83 S                  <--- pressed upper case S
  28. 187  ??               <--- pressed F1 key
  29. 188  ??               <--- pressed F2 key
  30.  
  31. Note the ?? was one of the extended IBM characters and could not be
  32. captured by Side Kick (TM).  As noted above the F-PC version of KEY
  33. returns the 128 + keyboard scan code for any non ASCII keys that are
  34. pressed.
  35.  
  36. ╓───────────────╖
  37. ║ Problem 3.16  ║
  38. ╙───────────────╜
  39. Use the word KEY_TEST to document the key codes returned for all non
  40. ASCII keys on the IBM key board.  This means function keys, arrow keys,
  41. HOME, END, etc.  Don't forget to try  Alt F1, Shift F1, Ctl F1, etc.
  42.  
  43. Another version of KEY...  or  We don't always like F-PC's  KEY so we
  44. made our own version of KEY that we call  PCKEY .
  45.  
  46. Here is our PCKEY definition.  Our version returns a flag that can
  47. be immediately tested to determine whether an ASCII key was pressed
  48. (true flag returned) or a function key was pressed (false flag
  49. returned).
  50.  
  51. Note:   BIOSKEY ( -- n) Is a primitive keyboard input word that returns
  52. a 16-bit number whose high 8 bits consist of the keyboard scan code and
  53. whose low 8-bits consist of the ASCII code of the key pressed.  If the
  54. key is not an ASCII key then the low 8-bits are zero.
  55.  
  56. \ This is a different type of keyboard input routine.
  57. \ Return  ASCII code and tf or  function key scan code and ff.
  58. : PCKEY  ( --   n  flag )
  59.        BIOSKEY DUP 127 AND    \ Mask of low 8-bits to check for ASCII
  60.        IF   127 AND TRUE      \ Yes its ASCII, mask off ASCII value.
  61.        ELSE FLIP    FALSE     \ Its a function key,  leave scan code.
  62.        THEN ;
  63.  
  64. Here...  Watch and see what FLIP does....
  65. HEX  MYQUIT
  66.  Stack Empty. > AABB
  67.  [1]   AABB > FLIP
  68.  [1]   BBAA > FLIP
  69.  
  70. Stack picture:
  71. FLIP  ( hilo -- lohi )  \ Flips hi 8-bits with low 8-bits.
  72.  
  73. And here is our word to test the new PCKEY
  74.  
  75. \ Test ascii keys and function keys.
  76. :  PCKEY_TEST  ( -- )
  77.         BEGIN  CR  PCKEY
  78.         IF   DUP  CONTROL M  =         \  Control M is return key.
  79.              IF   DROP EXIT THEN       \  Exit infinite loop if pressed.
  80.              ." ASCII key character code = "
  81.              DUP .  EMIT               \  Display code and character.
  82.         ELSE ." Function  key  scan code = " .  \ Display scan code.
  83.         THEN
  84.         AGAIN ;
  85.  
  86. Sample execution:
  87. DECIMAL PCKEY_TEST <enter>
  88. ASCII key character code = 65 A
  89. ASCII key character code = 83 S
  90. Function  key  scan code = 59       <--- Pressed F1
  91. Function  key  scan code = 60       <--- Pressed F2
  92.  
  93. Note: PCKEY returns the actual keyboard scan code for the function keys
  94. as documented in the IBM Tech Reference manual.  F-PC's KEY returns the
  95. actual scan codes + 128.
  96.  
  97. ╓───────────────╖
  98. ║ Problem 3.17  ║
  99. ╙───────────────╜
  100. Use the PCKEY_TEST program to document the actual scan codes for all the
  101. non ASCII keys on an IBM PC keyboard.  Don't forget the key chords like
  102. Alt F1, Ctl F1, Shift F1, etc.  Upload your list here for the rest of
  103. us.
  104.  
  105. ┌────────────────────────────────────┐
  106. │  Please move to Lesson 3 Part 080  │
  107. └────────────────────────────────────┘
  108.