home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c031 / 4.ddi / INCLUDE / READCHAR.H$ / READCHAR
Encoding:
Text File  |  1992-01-15  |  5.4 KB  |  174 lines

  1. /* READCHAR.H - Key codes, masks, and macros for use with ReadChar in
  2.  *              custom PWB extensions
  3.  *
  4.  * Copyright (C) Microsoft Corp. 1991-1992, All Rights Reserved
  5.  *
  6.  */
  7.  
  8. /*
  9.  *  The low word of the ReadChar return value is the ASCII code of
  10.  *  the key, if there is one. If there is no ASCII code for the
  11.  *  key, it is the virtual key code.
  12.  *
  13.  */
  14.  
  15. /*  For codes lower than VK_MIN, there is no virtual key code: it
  16.  *  is an ASCII code. ASCII is used mostly for punctuation keys.
  17.  */
  18. #define VK_MIN          0x100
  19.  
  20. #define VK_LBUTTON      0x101
  21. #define VK_RBUTTON      0x102
  22. #define VK_CANCEL       0x103
  23. #define VK_MBUTTON      0x104
  24. #define VK_BACK         0x108
  25. #define VK_TAB          0x109
  26. #define VK_CLEAR        0x10C
  27. #define VK_RETURN       0x10D
  28. #define VK_SHIFT        0x110
  29. #define VK_CONTROL      0x111
  30. #define VK_ALT          0x112
  31. #define VK_PAUSE        0x113
  32. #define VK_CAPLOCK      0x114
  33.  
  34. #define VK_ESCAPE       0x11B
  35. #define VK_SPACE        0x120
  36. #define VK_PRIOR        0x121   /* Page Up   */
  37. #define VK_NEXT         0x122   /* Page Down */
  38. #define VK_END          0x123
  39. #define VK_HOME         0x124
  40. #define VK_LEFT         0x125
  41. #define VK_UP           0x126
  42. #define VK_RIGHT        0x127
  43. #define VK_DOWN         0x128
  44.  
  45. #define VK_0            0x130
  46. #define VK_1            0x131
  47. #define VK_2            0x132
  48. #define VK_3            0x133
  49. #define VK_4            0x134
  50. #define VK_5            0x135
  51. #define VK_6            0x136
  52. #define VK_7            0x137
  53. #define VK_8            0x138
  54. #define VK_9            0x139
  55.  
  56. #define VK_A            0x141
  57. #define VK_B            0x142
  58. #define VK_C            0x143
  59. #define VK_D            0x144
  60. #define VK_E            0x145
  61. #define VK_F            0x146
  62. #define VK_G            0x147
  63. #define VK_H            0x148
  64. #define VK_I            0x149
  65. #define VK_J            0x14A
  66. #define VK_K            0x14B
  67. #define VK_L            0x14C
  68. #define VK_M            0x14D
  69. #define VK_N            0x14E
  70. #define VK_O            0x14F
  71. #define VK_P            0x150
  72. #define VK_Q            0x151
  73. #define VK_R            0x152
  74. #define VK_S            0x153
  75. #define VK_T            0x154
  76. #define VK_U            0x155
  77. #define VK_V            0x156
  78. #define VK_W            0x157
  79. #define VK_X            0x158
  80. #define VK_Y            0x159
  81. #define VK_Z            0x15A
  82.  
  83. #define VK_INSERT       0x12D
  84. #define VK_DELETE       0x12E
  85.  
  86. #define VK_NUMPAD0      0x160
  87. #define VK_NUMPAD1      0x161
  88. #define VK_NUMPAD2      0x162
  89. #define VK_NUMPAD3      0x163
  90. #define VK_NUMPAD4      0x164
  91. #define VK_NUMPAD5      0x165
  92. #define VK_NUMPAD6      0x166
  93. #define VK_NUMPAD7      0x167
  94. #define VK_NUMPAD8      0x168
  95. #define VK_NUMPAD9      0x169
  96. #define VK_MULTIPLY     0x16A   /* *  */
  97. #define VK_ADD          0x16B   /* +  */
  98. #define VK_SEPARATOR    0x16C   /* NUM in Kanji PWB */
  99. #define VK_SUBTRACT     0x16D   /* -  */
  100. #define VK_DECIMAL      0x16E   /* .  */
  101. #define VK_DIVIDE       0x16F   /* /  */
  102.  
  103. #define VK_F1           0x170
  104. #define VK_F2           0x171
  105. #define VK_F3           0x172
  106. #define VK_F4           0x173
  107. #define VK_F5           0x174
  108. #define VK_F6           0x175
  109. #define VK_F7           0x176
  110. #define VK_F8           0x177
  111. #define VK_F9           0x178
  112. #define VK_F10          0x179
  113. #define VK_F11          0x17A
  114. #define VK_F12          0x17B
  115. #define VK_F13          0x17C
  116. #define VK_F14          0x17D
  117. #define VK_F15          0x17E
  118. #define VK_F16          0x17F
  119.  
  120. #define VK_NUMLOCK      0x190
  121. #define VK_SCRLOCK      0x191
  122.  
  123.  
  124. /*  Masks for fields of the high word of the long returned by
  125.  *  ReadChar
  126.  */
  127. #define KK_EXTENDED     0x8000  /* From extended number pad     */
  128. #define KK_CAPLOCK      0x4000  /* CAPSLOCK is turned ON        */
  129. #define KK_NUMLOCK      0x2000  /* NUMLOCK is turned ON         */
  130. #define KK_SCRLOCK      0x1000  /* SCROLLLOCK is ON             */
  131. #define KK_ALT          0x0800  /* The ALT key is held down     */
  132. #define KK_CONTROL      0x0400  /* The CONTROL key is held down */
  133. #define KK_SHIFT        0x0200  /* The SHIFT key is held down   */
  134. #define KK_VK           0x01FF  /* The virtual key code         */
  135.  
  136. /*  Macros to extract parts of key record */
  137.  
  138. /*
  139.  *  LOWORD(Key)            ASCII code, VK code if no ASCII code
  140.  *  HIWORD(Key) & KK_VK    VK code always
  141.  *  HIWORD(Key) & ~KK_VK   Shift state
  142.  *  KeyCode & KK_VK        VK code, or ASCII if VK is VK_MIN
  143.  *  KeyCode & ~KK_VK       Shift state
  144.  *
  145.  */
  146.  
  147. #ifndef WORD
  148. typedef unsigned short WORD;
  149. #endif
  150. #ifndef DWORD
  151. typedef unsigned long  DWORD;
  152. #endif
  153.  
  154. #define LOWORD(l)       ((WORD)(l))
  155. #define HIWORD(l)       ((WORD)(((DWORD)(l) >> 16) & 0xffff))
  156.  
  157. #define VKEYSTATE(ks)   (HIWORD(ks) & ~KK_VK)
  158. #define VKEYCODE(ks)    ((HIWORD(ks) & KK_VK) == \
  159.                             VK_MIN ? LOWORD(ks) : HIWORD(ks) & KK_VK)
  160.  
  161. #define KEYCODE(k)      ((k) & (KK_VK|KK_EXTENDED))
  162. #define KEYSHIFT(k)     ((k) & ~KK_VK)
  163.  
  164. /*  Test macros: Booleans that affirm the specified state  */
  165.  
  166. #define FKEYCTRL(k)     (KEYSHIFT(k) & KK_CONTROL)
  167. #define FKEYALT(k)      (KEYSHIFT(k) & KK_ALT)
  168. #define FKEYSHIFT(k)    (FISLETTER(k) ? \
  169.                             (((KEYSHIFT(k) & (KK_SHIFT)) == 0) != \
  170.                             (((KEYSHIFT(k) & (KK_CAPLOCK)) == 0) \
  171.                              || FKEYCTRL(k))) \
  172.                             : (KEYSHIFT(k) & (KK_SHIFT)))
  173. #define FISLETTER(k)    ((KEYCODE(k) >= VK_A) && (KEYCODE(k) <= VK_Z))
  174.