: _tbl^ ( swap input tbl )
    _atbl = IF _dtbl ELSE _atbl THEN ;
: (key)
    0 _2nd! 0 ( lastchr ) BEGIN
        _alock@ IF _atbl ELSE _dtbl THEN
        OVER 0x80 ( alpha ) =
            IF _tbl^ _2nd@ IF _alock^ THEN THEN
        SWAP 0x81 = _2nd!
        _gti + C@
    DUP 0 0x80 >< UNTIL ( loop if not in range )
    ( lowercase? )
    _2nd@ IF DUP 'A' 'Z' =><= IF 0x20 OR THEN THEN
;
: KBD$ 0 [ KBD_MEM LITN ] C! ;
