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