>I'm not really sure how to do that accurately. KEYBOARD adds to the existing keyboard buffer which may already have additional characters ahead of it. Problematic.
I have yet to encounter a "real" situation where there is more than one character in the keyboard buffer (short of a user "leaning" on the keyboard).
I'd go with:
DO CASE
CASE THISFORM.lTranslating
THISFORM.lTranslating = .F
CASE nKeyCode = 97
THISFORM.lTranslating = .T.
NODEFAULT
KEYBOARD CHR( 98 ) CLEAR
etc.