home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / ISSHIFT.C < prev    next >
C/C++ Source or Header  |  1997-07-05  |  3KB  |  100 lines

  1. /* +++Date last modified: 05-Jul-1997 */
  2.  
  3. /*-------------------------[ IsShift ]--------------------------*/
  4. /*             Determine whether a shift key is depressed       */
  5. /*                public domain snippet by Jeff Dunlop          */
  6. /*  Revisions:                                                  */
  7. /*  30-Mar-96  Ed Blackman  OS/2 mods, added #defines for keys, */
  8. /*                          wrapped platform dependant actions  */
  9. /*                          in a macro, added some discussion   */
  10. /*--------------------------------------------------------------*/
  11. /* local:                                                       */
  12. /*      kf =                                                    */
  13. /*          DOS: pointer to bios shift key area                 */
  14. /*          OS2: pointer to previously stored key info struct   */
  15. /* return:                                                      */
  16. /*      non-zero if shift key is depressed                      */
  17. /*--------------------------------------------------------------*/
  18.  
  19. #include "extkword.h"
  20. #include "snipkbio.h"
  21. #include "mk_fp.h"
  22.  
  23. #ifdef __OS2__
  24. KBDKEYINFO ki;                            /* holds key status */
  25. #endif /* !__OS2__ */
  26.  
  27. int IsLeftShift(void)
  28. {
  29.       unsigned short FAR* kf = peekkey();
  30.  
  31.       return (*kf & LEFT_SHIFT);
  32. }
  33.  
  34. int IsRightShift(void)
  35. {
  36.       unsigned short FAR* kf = peekkey();
  37.  
  38.       return (*kf & RIGHT_SHIFT);
  39. }
  40.  
  41. int IsShift(void)
  42. {
  43.       return (IsLeftShift()) || (IsRightShift());
  44. }
  45.  
  46. int IsLeftAlt(void)
  47. {
  48.       unsigned short FAR* kf = peekkey();
  49.  
  50.       return (*kf & EITHER_ALT) && (*kf & LEFT_ALT);
  51. }
  52.  
  53. int IsRightAlt(void)
  54. {
  55.       unsigned short FAR* kf = peekkey();
  56.  
  57. /* 30-Mar-96 - EBB: In DOS there is no direct way to tell if the right
  58. ** Alt key is depressed. DOS sets a status bit if either Alt key was
  59. ** pressed, and another if the left Alt key was pressed.  By
  60. ** elimination, we can say that the right Alt key was pressed if one of
  61. ** the Alt keys was pressed and it wasn't the left one.
  62. */
  63.     return (*kf & EITHER_ALT) && !(*kf & LEFT_ALT);
  64. }
  65.  
  66. int IsAlt(void)
  67. {
  68.       return (IsLeftAlt()) || (IsRightAlt());
  69. }
  70.  
  71. int IsLeftCtl(void)
  72. {
  73.       unsigned short FAR* kf = peekkey();
  74.  
  75.       return (*kf & EITHER_CTL) && (*kf & LEFT_CTL);
  76. }
  77.  
  78. int IsRightCtl(void)
  79. {
  80.     unsigned short FAR* kf = peekkey();
  81.  
  82. /* 30-Mar-96 - EBB: The discussion about the right Alt key in
  83. ** IsRightAlt() also applies to the right Ctl key
  84. */
  85.  
  86.       return (*kf & EITHER_CTL) && !(*kf & LEFT_CTL);
  87. }
  88.  
  89. int IsCtl(void)
  90. {
  91.       return (IsLeftCtl()) || (IsRightCtl());
  92. }
  93.  
  94. int IsSysRq(void)
  95. {
  96.       unsigned short FAR* kf = peekkey();
  97.  
  98.       return (*kf & SYSRQ);
  99. }
  100.