# Patent

## Title
Multi-key macros to speed data input

## Abstract

Systems for initiating the execution of a macro by simultaneously depressing multiple keys and for reducing the misclassification of keyboard input by distinguishing between rollovers in normal typing and the simultaneous depression of two keys. Only keystrokes that follow a pause are considered candidates for macro initiation. Keystrokes not separated by a pause are dispatched to the operating system for normal processing. If a user types in a normal fashion, no macro is recognized, and the user experiences no unexpected behavior. A user dictionary of macro definitions is used to determine whether the first keystroke is part of a macro input pair.

## Background
This application claims the benefit of the filing date(s) of the following earlier application(s):

    
    
        U.S. Provisional Patent Application No. 60/332,989, entitled, “Two-Key Keyboard Macros,” filed November, 14, 2001, naming Bruce M. Zweig as the sole inventor.
    
    


U.S. Provisional Patent Application No. 60/332,989 is incorporated by reference herein.


This invention relates to computer input, keyboards and typing. More particularly, this invention relates to speeding input to a computer through multi-key keyboard macros and, in the process, disambiguating rollover and multi-key macro initiation.
BACKGROUND
Currently, a computer user enters data by keyboard, that is, by typing. To enter a system command or move the cursors, for example, the user moves her hand out of the home-row position.
System commands are menu selections by mouse, menu commands combining the Alt key with an alphabetic character (in the Microsoft WindowsTM operating system) or shortcuts combining the Ctrl key and another character. All of these methods require the user to move her hands off of the normal home-row position to press the Ctrl or Alt key or to move the mouse. Also, a user generally glances away from the screen to the keyboard or mouse to enter the command, and the user generally glances down again to return her hand(s) to (the correct position on) the keyboard. The moving of the hands from the home-row position and the pausing to look at the hands slows the entry of data. Where the entry of data is time sensitive, the slow data entry is particularly critical.
Therefore there is a need to allow a user to more efficiently enter system commands. There is a need to allow a user to enter system commands without moving her hands from the home row position or moving her eyes from the monitor.
To achieve a high level of commercial success, a computer input system must operate with an extremely low error rate. Users have been reluctant to accept input error rates on the order of even 2%. Witness, for example, the failure of speech-input systems to achieve any significant degree of market acceptance.
Therefore there is a need to allow a user to more efficiently enter data with an extremely low error rate.
Macros are a prior-art means for entering input through a keyboard. Generally speaking, macros are an association of an invocation sequence and a data sequence. The data sequence is typically much longer or much more complex than the invocation sequence. When a user types the macro invocation sequence (macro input sequence, macro activation sequence), software recognizes that sequence and replaces the invocation sequence with the associated data sequence. The user is thereby spared having to type or even remember the longer or more complex data sequence.
Macros are not an error-free proposition, particularly where the invocation sequence is the simultaneous depressing of multiple keys. There are two types of macro input classification errors: a false positive, in which two sequential keystrokes are misclassified as simultaneous keystrokes, and a false negative, in which two simultaneous keystrokes are misclassified as sequential.
Accordingly, there is a need to allow a user to more efficiently enter data with an extremely low error rate, including eliminating as much as possible the misclassification of her input.
In the Microsoft WordTM word processor, the sequence Ctrl-[decreases the font size of a selection and Ctrl-] increases the font size of a selection. For a typical user, these keystrokes are not easily remembered.
Accordingly, there is a need for macro-invocation sequences that are more easily remembered.
Rollhaus et al., U.S. Pat. No. 4,638,306 (1987) and the related Rollhaus et al., U.S. Pat. No. 4,696,280 (1987) (together, “Rollhaus et al.” herein) teach keyboard entry. Rollhaus et al. respond to conventional sequential activation of individual keys, outputting individual letters associated with the activated keys. Rollhaus et al. also respond to chords of simultaneously activated multiple keys, using these chords to retrieve stored words from a dictionary. The stored words rather than the entered chords are treated as input. Rollhaus et al. allow an user to use enter both conventional key sequences and key chords. Feedback alerts the user of inadvertent chords.
Rollhaus et al. however, do not recognize autorepeat key events. Rollhaus et al. do not work with keyboards or operating systems with this feature.
Also, Rollhaus et al. have no provision to minimize false negatives. Rollhaus et al. determine macro invocation from the difference between the time of the last key down and the time of the last key up. If this difference is above a threshold, Rollhaus et al. assume a macro has been invoked.
These and other goals of the invention will be readily apparent to one of ordinary skill in the art on reading the background above and the description below.
SUMMARY
Herein are taught methods and apparatus for initiating the execution of a macro by simultaneously depressing multiple keys and for reducing the misclassification of keyboard input by, for example, distinguishing between rollovers in normal typing and the simultaneous depression of two keys. In one embodiment, only keystrokes that follow a pause are considered candidates for macro initiation. Keystrokes not separated by a pause are dispatched to the operating system for normal processing. If a user types in a normal fashion, no macro is recognized, and the user experiences no unexpected behavior.
In one embodiment, the method includes examining a user dictionary of macro definitions to determine whether the candidate keystroke is the first keystroke of a macro's input pair. If it is not, or if the succeeding keystroke does not complete the initiating input pair of any defined macro, or if the two keys are not pressed simultaneously, the keystroke(s) are dispatched to the operating system for normal processing. The method includes generating a probability that the two keystrokes are simultaneous.



BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a flowchart summarizing the flow of control in the state machine 631 in one embodiment of the invention.
FIG. 2 illustrates a state machine 631 incorporating an embodiment of the invention.
FIG. 3 shows the Ambiguity Resolution state #_280 in more detail, according to one embodiment of the invention.
FIG. 4 illustrates the analysis of the keystroke data in the AnalyzingKeystrokes state #_292, according to one embodiment of the invention.
FIG. 5 further illustrates the ExecuteMacro meta-state, according to one embodiment of the invention.
FIG. 6 illustrates a computer system 600 incorporating an embodiment of the invention.
FIG. 7 is a flowchart summarizing the determination of simultaneity, according to one embodiment of the invention.
FIG. 8 is a flowchart summarizing the resolution of ambiguity of keystrokes, according to one embodiment of the invention.



DESCRIPTION OF SPECIFIC EMBODIMENTS
FIG. 6 illustrates a computer 600 incorporating an embodiment of the invention. Well known in the art, the hardware of the system 600 typically includes a CPU 610, monitor 620, memory 630, keyboard 640, clock 650 and a bus 670. The bus 670 communicatively couples these computer components. As is well-known in the art, the computer 600 may associate timing signals from the clock 650 with input from the keyboard 640.
The memory 630 typically includes software (user-level applications, an operating system and drivers for example) and files (both user and system, not shown). Keyboard drivers are well known in the art and thus not fully described herein.
The memory 630 includes drivers, macro definitions (associations) and user preferences more specific to this invention. A keyboard driver maybe modified to incorporate the instant invention, for example, by implementing a state machine 631 as described herein.
FIG. 1 is a flowchart summarizing the flow of control in the state machine 631. The control begins when the state machine 631 receives a keystroke.
The driver 631 classifies the keyboard input, distinguishing between rollovers in normal typing and the simultaneous depression of two keys. The driver determines whether a keystroke follows a pause, step 30. The driver 631 forwards keystrokes not separated by a pause to the operating system for normal processing, step 10. Only keystrokes preceded by a pause are considered candidates for macro initiation. If a user types in a normal fashion, no macro is recognized, and the user experiences no unexpected behavior.
The driver 631 examines a user dictionary of macro definitions to determine whether the candidate keystroke is the first keystroke of a macro's input pair, step A0. If it is not, or if the succeeding keystroke does not complete any candidate input pairs, step 50, or if the two keys are not pressed simultaneously, step 70. the keystroke or keystrokes are dispatched to the operating system for normal processing, step 10.
FIG. 7 is a flowchart summarizing the determination of simultaneity, according to one embodiment of the invention. To determine simultaneity, step 70, in one embodiment, the driver 631 determines the probability that the keystrokes are simultaneous, step 710. If the probability is sufficiently high, step 730, then the driver 631 determines the keystrokes unambiguously simultaneous, step 720, and expands the associated defined macro and forwards the expansion to the operating system, step 10. Keystrokes that the driver 631 determines are sequential, steps 740 and 750, it dispatches to the operating system, step 10.
If the driver 631 determines the keystroke sequence ambiguous, then the driver 631 attempts to resolve the ambiguity, step 760. FIG. 8 is a flowchart summarizing the resolution of ambiguity of keystrokes, according to one embodiment of the invention. If the keystroke pair appears on a list of keystroke pairs that do not occur in normal typing, step 810, then the driver determines the keystrokes to be simultaneous, step 820. (This list is part of a user's preferences, in one embodiment.) If the pair does not appear on the list, and if a third keystroke shortly follows the pair, step 830, the driver determines the keystrokes to be sequential, step 840.
If the ambiguity cannot be resolved, then several recovery actions, step 850, are possible. In one embodiment, the ambiguous keystrokes are discarded. Since the user has paused before and after the sequence, the user may notice the lack of output and unambiguously repeat the keystroke sequence.
In another embodiment, the macro is recognized and expanded. The expansion is passed on to the operating system.
In yet another embodiment, a user may determine which of these two actions the driver should take in the face of unresolved ambiguity. A dialog box may be displayed, asking the user to choose whether to invoke the macro.
The state machine 631 maintains several timers: a PauseBeforeMacro timer, a SecondKeystrokeWithin timer, a BothKeysDowrMinimum timer, a BothDownMaximum timer, an AcceptOneKeyLifted timer and a QuietAfterMacro timer. Each of these timers is described in turn below.
Tables 2A–2C show that a user generally pauses for 200–1 000 ms before simultaneously striking the two keys in a macro-activation sequence and then pauses again before resuming normal typing. Therefore, the state machine 631 only considers two-character sequences preceded by a pause as candidates for a macro and requires a pause afterwards if the data are ambiguous. The pauses before and after (the latter as necessary) reduce false positives. A typist rarely pauses, quickly types two characters (with rollover) and then pauses again. (Certain two-character words, most notably “we,” are exceptions and specially treated.)
The PauseBeforeMacro timer fires when typing has ceased for a predetermined amount of time. In one embodiment, the PauseBeforeMacro time is 200–1000 ms, depending on the user's typing speed as shown in Table 1. Similarly, the QuietAfterMacro timer fires when typing has ceased for a predetermined amount of time. The QuietAfterMacro time is the same as the PauseBeforeTime time in one embodiment.
The SecondKeystrokeWithin timer holds the maximum amount of time that can elapse between two keypresses if a user attempts to press two keys simultaneously. SecondKeystrokeWithin has a value of 5–0100 ms. The value depends on the degree of friction experienced by a key during a keypress. Small variations in the friction experienced by different keys result in a delay between the registration of the two keyDown events when two keys are pressed simultaneously, and this requires a higher value for the parameter. Keyboards with a minimal amount of friction operate with a value toward the lower limit. The SecondKeystrokeWithin time is 75 ms in one embodiment.
The BothKeysDownMinimum timer holds the minimum amount of time that two keys need to be down to be potentially (not conclusively) simultaneous. The BothKeysDowrMinimum time is ranges from 30 to 50 ms, depending on the keydown time of the second keystroke (t2d). Since the second keystroke's keydown time can range from 0 to SecondWithin, in one embodiment, a linear interpolation yields the formula of Equation (1):

BothKeysDownMinimum=30+20*(t2d/SecondWithin)  (1)

The BothKeysDownMaximum timer holds the additional time, beyond BothKeysDownMinimum, that two keys need to be down to conclusively conclude the key sequence as simultaneous key presses. The BothKeysDownMaximum time is 45 ms in one embodiment.
The AcceptOneKeyLifted timer relates to the user pressing two keys simultaneously and then lifting one up in order to execute the macro one time. If the user subsequently depresses the lifted key before releasing the held key, the macro is repeated. This feature is particularly useful in cursor movement. This timer has a value which is greater than the time one key is lifted during a rollover, and is 50 ms in one embodiment.
FIG. 2 illustrates a state machine 631 incorporating an embodiment of the invention. The state machine has the following states: Typing 210, Paused 230, FirstKeyDOwn 240, SecondKeyDown 250, Ambiguous 260, ExecuteMacro 270, and AmbiguityResolution 280. Each of these states is described in turn below.
The Typing state 210 is the initial and default state of the state machine 631. On entering the Typing state 210, the machine 631 forwards any keystrokes held as macro candidates to the operating system and sets the PauseBeforeMacro timer. With each keystroke received, the machine 631 resets the PauseBeforeMacro timer, transition 211. (The exceptions are the modifier keys Shift, Alt, Ctl and, optionally, Oriental character set keys 212 such as Hangul, Hanja, Junja, Kana and Kanji, transition 212.) As long as the machine 631 receives keystrokes before the PauseBeforeMacro timer fires, the state remains Typing 210. The machine 631 forwards these keystrokes to the operating system. As long as the user types in a nearly continuous manner, no macro detection occurs, and the keyboard behaves in the fashion of the prior art.
When the PauseBeforeMacro timer fires, the machine 631 detects that the user has paused and enters the Paused state 230, transition 231.
In the Paused state 230, the state machine 631 evaluates keystrokes as candidates for activating macros. If the machine 631 receives a keypress for a key which is not part of a macro invocation pair, the machine 631 returns to the Typing state 210 to await another pause by the user, transitions 231 and 222. If, on the other hand, the keypress corresponds to one of the keys in any invocation pair, the machine 631 stores the associated key code and keydown time (t1d) and then transitions to the FirstKeyDOwn state 240, transition 232.
In the FirstKeyDOwn state 240, the machine 631 sets the SecondKeystrokeWithin timer. If this time elapses with no additional keystrokes, if the first keypress is lifted or if a second keydown occurs for a key which does not appear in any of the macro-activation key pairs in the macro-activation list, then the state machine 631 transitions back to the Typing state 241, transitions 241 and 242.
If, however, the machine 631 receives a keydown and that key matches the mating key of a macro-activation key pair associated with the first keypress, then the machine 631 stores the second keypress and its keydown time and transitions to the SecondKeyDown state 250, transition 243.
In the SecondKeyDown state 250, the machine 631 sets the BothKeysDownMinimum timer. If the machine receives any keystroke before this time elapses, the machine 631 returns to the Typing state 210, transition 251. If not, the machine 631 transitions to the Ambiguous state 260, transition 252. The machine 631 ignores autorepeat keydown events (events whose character codes match the first or second keypresses, transition 253).
To have gotten to the Ambiguous state 260, the machine 631 has experienced two keydown events. In this state, the machine 631 sets the timer BothKeysDownMaximum. If this interval passes with no intervening keyup or keydown events, then both keys will have been down for a total of the BothKeysDownMinimum and BothKeysDownMaximum times, 75–95 ms in one embodiment. Tables 2A–2C shows that this amount of time suffices to unambiguously classify the sequence as a macro activation. Accordingly, the machine 631 transitions to the ExecuteMacro state 270, transition 261.
If, however, a keyup event occurs before BothKeysDownMaximum ms elapses, then the machine 631 stores the keyup time (tUp) and the identity of the key and then transitions to the AmbiguityResolution state 280, transition 262.
If a keydown event occurs in the Ambiguous state 260, then the state machine 631 assumes a three-key rollover and transitions back to the Typing state 210, transitions 261 and 222. The Typing state 210 releases the three keystrokes analyzed.
In the ExecuteMacro state 270, the machine 631 expands the macro according to the macro dictionary, forwarding the macro associated with the simultaneous keystrokes on to the operating system.
In the AmbiguityResolution state 280, the machine 631 tests the input sequence to determine whether the sequence is simultaneous. If the machine 631 classifies the sequence as simultaneous, then the machine transitions to the ExecuteMacro state 270, transition 281. If the machine 631 classifies the sequence as sequential, then the machine 631 transitions back to the Typing state 210, transition 282 and 222, where keypresses are forwarded to the operating system. If the machine 631 cannot disambiguate the sequence, it attempts to recover as described herein.
FIG. 3 shows the AmbiguityResolution state #_280 in more detail. Entry to the compound state AmbiguityResolution state 280 is a transition to the Begin state #_285. At this point, two keys have been pressed, and one has been lifted. If the second key was lifted before the first, the machine 631 conclusively classifies the gesture as simulaneous, transition 286.
Otherwise, the machine 631 starts the AcceptOneKeyLifted timer. If the machine receives no keystroke before the timer fires, on the firing of the timer, the machine 631 conclusively classifies the gesture as simultaneous and transitions to the OneLifted state 279 in the ExecuteMacro compound state 270, transition 287. The user may lift one finger after pressing both keys in order to pause the macro and then restart or repeat the macro by pressing the lifted key again.
If the second key is lifted before AcceptOneKeyLifted ms elapses, then the state machine 631 transitions to the PausingAfter state 289, transition 288 and starts the QuietAfterMacro timer. If a keydown event occurs before this time elapses, then the machine 631 conclusively concludes that user's gesture is sequential typing and transitions to the SendKeystrokesToOS state 290, transition 290.
If no keyup events occur during the QuietAfterMacro interval, the state machine 631 transitions to the AnalyzingKeystrokes state 292, transition 291.
In the AnalyzingKeystrokes state 292, the user has paused, pressed two keys, released them and paused again. FIG. 4 illustrates the analysis of the keystroke data. Applying a linear discriminant analysis to the data of Table 3 yields a function which indicates the probability that a sequence is simultaneous. The function increases as the time interval during which both keys were pressed increases but decreases as the time between the two initial keyDown events increases. A low value for this function indicates sequential keystrokes. A high value indicates simultaneous keystrokes, and an intermediate value is ambiguous. The results of a linear discriminant analysis applied to the data in Table 3 yield a function of the form:

F=(time both keys are down)−0.7*(time between first and second keydown).  (2)

In Table 3, values of the function of 12 or less always indicate sequential keystrokes, values of 43 and higher always indicate simultaneous keystrokes and intermediate values are ambiguous.

Classification errors for values between 12 and 43 disappear if the wireless keyboard data are removed from the table. Timing data for wireless keyboards is inherently noisy due to delays in transmission and reception of the keystroke. Thus, in one embodiment, different ranges of the function are used to classify the sequences, depending on whether the keyboard is wireless or directly wired.
FIG. 5 further illustrates the ExecuteMacro state 270. This state contains internal states that allow the user to control, by lifting one of the two simultaneously depressed keys, the repeated execution of the macro due to the operating system's normal auto-repeat feature. On entry to the FirstExecution state 271, the machine 631 sets the PauseBeforeAutoRepeat timer which simulates the behavior of the operating system when a key is held down. Since the system has spent several milliseconds in previous states since the first key of the pair was depressed, the system waits the additional PauseBeforeAutoRepeat time after the macro is first executed before accepting auto-repeat characters, transition 272. Thus, the machine 631 ignores auto-repeat events in this state.
If PauseBeforeAutoRepeat ms elapse since the macro was executed (determined by retrieving the system's pause before auto repeat time), the system enters the Repeating state 273. The WindowsTM system registry, for example, stores the autorepeat time in the key HKKEY_CURRENT_USER\ControlPanel\Keybd:InitialDelay.
In the Repeating state 273, autorepeat events repeat the execution of the macro, transition 275. This continues until the user key lifts a key. The machine 631 then transitions to the OneKeyLifted state 279, transition 276.
In the OneLifted state 279, the machine 631 ignores the auto repeat events, transition 277. A keydown event for the lifted key returns the machine 631 to the FirstExecution state 271, transition 27A, where the delay is simulated again by the PauseBeforeAutoRepeat timer. A keyup or a keydown which does not correspond to the lifted character in this state completes the execution of the macro and transitions the machine 631 to the Completed state 278, transition 27B.
The instant invention reduces the frequency of false positive errors by only considering sequences in which the user pauses before initiating a macro and pauses again after releasing the two keys. Table 2A illustrates the keystroke timing data for a 70 wpm typist typing the sentence, “The price is ε200.” (using the invention's eu macro for the Euro symbol).
Table 1 shows the average time between keyboard events for various typing speeds. A typing speed of 70 wpm equates to an average time between events of 71.43 ms. As the data show, the operator spontaneously paused for 325 ms before striking the ‘eu’ key pair and another 500 ms after lifting both keys. Thus, for fairly proficient typists, the system can distinguish between normal connected typing and pausing.
Table 1 shows that slower typists are less likely to produce rollovers. Indeed, there are none in the example. Also, in keeping with their slower rhythm, slower typists, pause for a longer time before initiating the macro sequence.
Therefore, in various embodiments, a computer monitors the user's typing and adjusts one or more pause times to the user's typing speed. In another embodiments, a computer allows the user to manually do so. Table 1 also shows the average time between events and the pause time for various typing speeds, according to one embodiment.
Indeed, the invention now being fully described, one of ordinary skill in the art will readily appreciate the many changes and modifications that can be made thereto without departing from the spirit or scope of the appended claims. For example, while the examples focus on two-key macros, macros of three or more keys are also possible.
As another example, an embodiment of the invention may replace many of the hard-to-remember macros used in common applications. The Microsoft® WordTM word processor Ctrl-[ and Ctrl-] macros respectively increase and decrease the font size of a selection. These may be replaced by the mnemonic f+ and f−.
Likewise, the mnemonic macro eu can replace the NumLock Alt 0128 sequence that produces the euro symbol, ‘ε’. Indeed, Table 4 lists a number of mnemonic European key pairs. The keys typed as ‘6’ (for ‘^’) ‘/’ ‘\’ ‘;’ (for ‘:’) ‘.’ and ‘'’ appear to the user to be automatically paired with a vowel character to accent it.
As still another example, the analysis to produce the function determining the probability of simultaneity was a discriminant analysis. A neural network can produce the probability function, as can any other probability analysis known in the art.
Still further, a population of computer users suffers from repetitive stress and other conditions requiring them to minimize their use of the mouse. These users would be well served by activating system commands without lifting their hands from the keyboard.












TABLE 1





typing

slow
high avg ms




speed
slow
chars/sec
between events
quietBefore
quietAfter




















10
7
0.70
714.29
1000
750


20
14
1.40
357.14
600
450


30
21
2.10
238.10
500
375


40
28
2.80
178.57
400
300


50
35
3.50
142.86
300
225


60
42
4.20
119.05
250
187.5


70
49
4.90
102.04
250
187.5


80
56
5.60
89.29
250
187.5


90
63
6.30
79.37
250
187.5


100
70
7.00
71.43
250
187.5


110
77
7.70
64.94
150
112.5


120
84
8.40
59.52
125
93.75


130
91
9.10
54.95
125
93.75


140
98
9.80
51.02
125
93.75


150
105
10.50
47.62
125
93.75


160
112
11.20
44.64
125
93.75









Table 1 shows suggested calculations for quietBefore and quietAfter parameters, based on the average time between events. Empirically (and illustrated in Tables 2A–2C), the longest interval between naturally occuring keyboard events is based on a typing speed approximately 30% less than the average rate. Also, as borne out by the data in Tables 2A–2C, the pause after a macro invocation tends to be shorter than the pause afterwards.












TABLE 2A





character
action
time
state
delta t
notes




















T
ds
20873264
Typing
0



T
us
20873404
Typing
140



u
20873454
Typing
50


H
d
20873554
Typing
100


H
u
20873664
Typing
110


E
d
20873774
1Dn
110


E
u
20873875
Typing
101



d
20874005
Typing
130



u
20874145
Typing
140


P
d
20874215
Typing
70


P
u
20874345
Typing
130


R
d
20874385
1Dn
40


R
u
20874465
Typing
80


I
d
20874596
Typing
131


I
u
20874696
Typing
100


C
d
20874736
Typing
40


C
u
20874826
Typing
90


E
d
20875016
1Dn
190


E
u
20875126
Typing
110



d
20875166
Typing
40



u
20875287
Typing
121


I
d
20875317
Typing
30


I
u
20875427
Typing
110


S
d
20875537
Typing
110


S
u
20875657
Typing
120



d
20875777
Typing
120



u
20875897
Typing
120


U
d
20876618
1Dn
721
pause


E
d
20876659
2Dn
41


U
u
20876729
1Up
70


E
u
20876779
3QAfter
50



2 d
20877239
Typing
460
pause



2 u
20877370
Typing
131



0 d
20877480
Typing
110



0 u
20877570
Typing
90



0 d
20877750
Typing
180



0 u
20877860
Typing
110


—
d
20878301
1Dn
441


—
u
20878411
Typing
110



ds
20891750
Paused
13339









Table 2A shows, for a 40 wpm typist, the character typed, whether the stroke is down or up, the time of the event, the state to which a transition occurs as a result of the input, the difference in time between the event and the previous event.












TABLE 2B





character
action
time
state
delta t





















T
ds
20935683
Typing
0



T
u
20935824
Typing
141


H
d
20935864
Typing
40


H
u
20935954
Typing
90


E
d
20936054
1Dn
100


E
u
20936134
Typing
80



d
20936174
Typing
40



u
20936284
Typing
110


P
d
20936334
Typing
50


P
u
20936455
Typing
121


R
d
20936495
1Dn
40


R
u
20936565
Typing
70


I
d
20936655
Typing
90


I
u
20936755
Typing
100


C
d
20936795
Typing
40


C
u
20936865
Typing
70


E
d
20937005
1Dn
140
rollov-







er wi



d
20937065
Typing
60


E
u
20937115
Typing
50



u
20937216
Typing
101


I
d
20937256
Typing
40


I
u
20937326
Typing
70


S
d
20937406
Typing
80


S
u
20937486
Typing
80



d
20937636
Typing
150



u
20937736
Typing
100


E
d
20938397
1Dn
661
paused


U
d
20938437
2Dn
40


E
u
20938497
1Up
60


U
u
20938548
3QAfter
51



2 d
20939128
Typing
580
pause







afte



2 u
20939229
Typing
101



0 d
20939269
Typing
40



0 u
20939369
Typing
100



0 d
20939459
Typing
90



0 u
20939559
Typing
100


—
d
20940030
1Dn
471


—
u
20940150
Typing
120









Table 2B shows, for a 55 wpm typist, the character typed, whether the stroke is down or up, the time of the event, the state to which a transition occurs as a result of the input, the difference in time between the event and the previous event.












TABLE 2C





character
action
time
state
delta t
notes




















T
ds
21095183
Typing
0
ds =







down s


T
us
21095293
Typing
110


H
d
21095373
Typing
80


H
u
21095423
Typing
50


E
d
21095463
1Dn
40


E
u
21095523
Typing
60



d
21095563
Typing
40
rollover


P
d
21095633
Typing
70
rollover



u
21095683
Typing
50
rollover


R
d
21095724
1Dn
41
p&r







down


P
u
21095774
Typing
50


R
u
21095824
Typing
50


I
d
21095884
Typing
60


I
u
21095964
Typing
80


C
d
21096014
Typing
50


C
u
21096074
Typing
60


E
d
21096184
1Dn
110


E
u
21096254
Typing
70



d
21096294
Typing
40



u
21096435
Typing
141


I
d
21096475
Typing
40


I
u
21096525
Typing
50


S
d
21096575
Typing
50


S
u
21096655
Typing
80



d
21096695
Typing
40



u
21096815
Typing
120



timer
21097015
Paused
200


U
d
21097106
1Dn
91
eu  







macr


E
d
21097146
2Dn
40


U
u
21097206
1Up
60


E
u
21097246
3QAfter
40



2 d
21097646
Typing
400



2 u
21097736
Typing
90



0 d
21097787
Typing
51



0 u
21097867
Typing
80



0 d
21097937
Typing
70



0 u
21098027
Typing
90


—
d
21098167
Typing
140


—
u
21098267
Typing
100









Table 2C shows, for a 75 wpm typist, the character typed, whether the stroke is down or up, the time of the event, the state to which a transition occurs as a result of the input, the difference in time between the event and the previous event.










TABLE 3





2d down
bothDown
chars
kbd























60
 0
sequential
th

serial connect
−42




60
 0
sequential
th

serial connect
−42


50
 0
sequential
th

serial connect
−35


60
 10
sequential
df

serial connect
−32


60
 20
sequential
ei

serial connect
−22


60
 20
sequential
eu

serial connect
−22


60
 20
sequential
eu

serial connect
−22


60
 20
sequential
we

serial connect
−22


50
 20
sequential
as

serial connect
−15


50
 20
sequential
ei

serial connect
−15


50
 20
sequential
eu

serial connect
−15


60
 30
sequential
df

serial connect
−12


60
 30
sequential
ei

serial connect
−12


60
 30
sequential
we

serial connect
−12


40
 20
sequential
as

serial connect
−8


40
 20
sequential
ie

serial connect
−8


40
 20
sequential
th

serial connect
−8


50
 30
sequential
df

serial connect
−5


50
 30
sequential
we

serial connect
−5


60
 40
sequential
we

wireless
−2


30
 20
sequential
eu

serial connect
−1


30
 20
sequential
ie

serial connect
−1


60
 41
sequential
eu

wireless
−1


50
 40
sequential
eu

wireless
5


20
 20
sequential
ie

serial connect
6


20
 20
sequential
ie

serial connect
6


30
 30
sequential
as

serial connect
9


30
 30
sequential
df

serial connect
9


30
 30
sequential
ei

serial connect
9

note: we wi










amb = ambiguity for










the sequence ‘we’


30
 30
sequential
we

serial connect
9

on a wireless










keyboard


40
 40
sequential
df

serial connect
12


50
 50
simultaneous
eu
error
wireless
15
we wi amb
wireless amb


50
 50
simultaneous
eu
error
wireless
15
we wi amb
wireless amb


50
 50
simultaneous
we
error
wireless
15
we wi amb
wireless amb


50
 51
sequential
we

wireless
16
we wi amb
wireless amb


60
 60
sequential
we

wireless
18
we wi amb
wireless amb


30
 40
sequential
as

serial connect
19
we wi amb
wireless amb


40
 50
sequential
eu
error
wireless
22
we wi amb
wireless amb










wired ambiguity


40
 50
sequential
we
error
wireless
22
we wi amb
wireless amb










wired ambiguity


40
 50
simultaneous
we

wireless
22
we wi amb
wireless amb










wired ambiguity


20
 40
simultaneous
eu

serial connect
26
we wi amb


41
 60
simultaneous
eu

wireless
31.3
we wi amb


40
 60
simultaneous
we

wireless
32
we wi amb


50
 70
simultaneous
eu

wireless
35
we wi amb


50
 70
simultaneous
eu

wireless
35
we wi amb


20
 50
simultaneous
eu

serial connect
36
we wi amb


20
 50
simultaneous
eu

serial connect
36
we wi amb


20
 50
simultaneous
ie

serial connect
36
we wi amb


20
 50
simultaneous
ie

serial connect
36
we wi amb


20
 50
simultaneous
ie

serial connect
36
we wi amb


40
 70
sequential
we
error
wireless
42
we wi amb


40
 70
sequential
we
error
wireless
42
we wi amb


40
 70
simultaneous
we

wireless
42
we wi amb


40
 70
simultaneous
we

wireless
42
we wi amb


10
 50
simultaneous
eu

serial connect
43


20
 60
simultaneous
eu

serial connect
46


20
 60
simultaneous
eu

serial connect
46


20
 60
simultaneous
ie

serial connect
46


20
 60
simultaneous
ie

serial connect
46


20
 70
simultaneous
ie

serial connect
56


 0
 60
simultaneous
df

serial connect
60


 0
 60
simultaneous
th

serial connect
60


 0
 70
simultaneous
as

serial connect
70


 0
 70
simultaneous
th

serial connect
70


 0
 70
simultaneous
th

serial connect
70


 0
 70
simultaneous
we

serial connect
70


 0
 70
simultaneous
we

serial connect
70

end










0 ser


 0
 70
simultaneous
we

serial connect
70


 0
 70
simultaneous
we

serial connect
70


 0
 71
simultaneous
as

serial connect
71


 0
 71
simultaneous
as

serial connect
71


 0
 71
simultaneous
we

serial connect
71


 0
 71
simultaneous
we

serial connect
71


 0
 80
simultaneous
as

serial connect
80


 0
 80
simultaneous
df

serial connect
80


 0
 80
simultaneous
th

serial connect
80


 0
 81
simultaneous
df

serial connect
81


 0
 81
simultaneous
th

serial connect
81


 0
 90
simultaneous
df

serial connect
90


 0
 90
simultaneous
df

serial connect
90


 0
 90
simultaneous
th

serial connect
90


10
101
simultaneous
as

serial connect
94


 0
101
simultaneous
as

serial connect
101


 0
110
simultaneous
df

serial connect
110



















TABLE 4









eu
 



a6
â (the ‘{circumflex over ( )}’ is the uppercase




character for 6).



a/
á



a\
à



a;
ä (the colon is the uppercase




character for semi-colon).



a.
å



a′
ã (the tilde is the uppercase




character for ′).



c, 
ç



e/
é



e\
è



e:
ë



e6
ê



i6
î



i/
í



i\
ì



i:
ï



o6
ô



o/
ó



o\
ò



o;
ö



o′
õ



n′
ñ tilde



u6
û



u/
ú



u\
ù



u;
ü



y/
ý

## Claims

1. A method for receiving data into a computer, the method comprising:
associating multiple alphanumeric keys on a keyboard with data;
detecting a pause during typing;
detecting the simultaneous pressing of the multiple alphanumeric keys after the pause by;
determining if a first of the multiple alphanumeric keys is part of a standard pair;
determining if a second of the multiple alphanumeric keys is part of a standard pair;
determine if the second of the multiple alphanumeric keys is depressed within a pre-determined period of time of the first of the multiple alphanumeric keys;
determine if the first and second alphanumeric keys are both depressed for a period of time which is dependent upon the period of time elapsed between the first and second keypresses; and

if the first and second alphanumeric keys have been depressed simultaneously then use the associated data instead of the multiple alphanumeric keys simultaneously pressed as input data.

2. The method of claim 1 wherein the step of detecting a pause comprises:
detecting a pause perceptible to a user before the simultaneous pressing of the multiple alphanumeric keys.

3. The method of claim 1 wherein the step of detecting the simultaneous pressing of the multiple alphanumeric keys comprises:
detecting a pause after the simultaneous pressing of the multiple alphanumeric keys.

4. The method of claim 1, further comprising:
determining that the first and second alphanumeric keys have been depressed sequentially if a third alphanumeric key has been depressed during the period of time during which the first and second alphanumeric keys have been depressed.

5. The method of claim 1, further comprising:
determining that the first and second alphanumeric keys have been depressed simultaneously if the second alphanumeric key is lifted prior to the first alphanumeric key being lifted.

6. The method of claim 1, further comprising:
determining that the first and second alphanumeric keys have been depressed simultaneously if a pause during typing occurs after the first and second alphanumeric keys have been depressed and lifted.

7. A method for receiving data into a computer, the method comprising:
associating multiple alphanumeric keys on a keyboard with data;
detecting the simultaneous pressing of the multiple alphanumeric keys by:
determining if a second of multiple alphanumeric keys is depressed before the previous key press of a first of multiple alphanumeric keys has been lifted;
determining if the second alphanumeric key is depressed within a pre-determined period of time of the first alphanumeric key;
determining if the first and second alphanumeric keys are both depressed for a period of time which is dependent upon the period of time elapsed between the first and second key presses; and

if the first and second alphanumeric keys have been depressed simultaneously,
determining if the first and second alphanumeric keys are a standard pair;
if they are a standard pair, using the associated data instead of the multiple alphanumeric keys simultaneously pressed as input data.

8. The method of claim 7 wherein the step of detecting the simultaneous pressing of the multiple alphanumeric keys further comprises determining first if the first depressed of the multiple alphanumeric keys is part of a standard pair.

9. The method of claim 7, further comprising determining if multiple alphanumeric keys are part of a standard pair as each key is depressed.

10. The method of claim 7 wherein the step of detecting the simultaneous pressing of the multiple alphanumeric keys further comprises determining if a pair of multiple alphanumeric keys is part of a standard pair after the second key of the pair has been depressed.

11. The method of claim 7 wherein the step of detecting the simultaneous pressing of the multiple alphanumeric keys further comprises detecting a pause before the simultaneous pressing of the multiple alphanumeric keys.

12. The method of claim 7, further comprising determining that the first and second alphanumeric keys have been depressed sequentially if a third alphanumeric key has been depressed during the period of time during which the first and second alphanumeric keys have been depressed.

13. The method of claim 7, further comprising determining that the first and second alphanumeric keys have been depressed simultaneously if the second alphanumeric key is lifted prior to the first alphanumeric key being lifted.

14. The method of claim 7, further comprising determining that the first and second alphanumeric keys have been depressed simultaneously if a pause during typing occurs after the first and second alphanumeric keys have been depressed and lifted.

15. A method for receiving data into a computer, the method comprising:
associating multiple alphanumeric keys on a keyboard with data;
detecting a pause during typing;
detecting the simultaneous pressing of the multiple alphanumeric keys by:
determining if a second of multiple alphanumeric keys is depressed before the previous key press of a first of multiple alphanumeric keys has been lifted;
determining if the second alphanumeric key is depressed within a pre-determined period of time of the first alphanumeric key;
determining if the first and second alphanumeric keys are both depressed for a period of time which may be pre-determined or which may be dependent upon the period of time elapsed between the first and second key presses; and

if the first and second alphanumeric keys have been depressed simultaneously, determining if the first and second alphanumeric keys are a standard pair; and
if they are a standard pair, using the associated data instead of the multiple alphanumeric keys simultaneously pressed as input data.

16. The method of claim 15 wherein the step of detecting the simultaneous pressing of the multiple alphanumeric keys further comprises determining first if the first depressed of the multiple alphanumeric keys is part of a standard pair.

17. The method of claim 15, further comprising determining if multiple alphanumeric keys are part of a standard pair as each key is depressed.

18. The method of claim 15 wherein the step of detecting the simultaneous pressing of the multiple alphanumeric keys further comprises determining if a pair of multiple alphanumeric keys is part of a standard pair after the second key of the pair has been depressed.

19. The method of claim 15 wherein the pause is detected before the simultaneous pressing of the multiple alphanumeric keys.

20. The method of claim 15, further comprising determining that the first and second alphanumeric keys have been depressed sequentially if a third alphanumeric key has been depressed during the period of time during which the first and second alphanumeric keys have been depressed.

21. The method of claim 15, further comprising determining that the first and second alphanumeric keys have been depressed simultaneously if the second alphanumeric key is lifted prior to the first alphanumeric key being lifted.

22. The method of claim 15, further comprising determining that the first and second alphanumeric keys have been depressed simultaneously if the first and second alphanumeric keys are both depressed for a period of time which is dependent upon the period of time elapsed between the first and second key presses.

23. The method of claim 15, further comprising determining that the first and second alphanumeric keys have been depressed simultaneously if a pause during typing occurs after the first and second alphanumeric keys have been depressed and lifted.