Er, let me dig up my source.
Okay, here's some example code. I'd post the original code, but it's very complex because I'm dealing with a lot of commands (and I also have a few 1500 byte strings laying around). Str1 is the key lookup table and defines all of the alphabet as well as the space button and the "." button. L2 holds the character set, although only not all of the keys defined in the lookup table have characters defined.
:.Lookup table
:[2F271F2E261E160E2D251D150D2C241C140C2B231B130B2A221A211911]→Str1
:.SET UP character TABLE
:For(A,65,90
:.SET LETTERS
:A→{L2+A-65}
:End
:.SET SPACE
:41→{L2+26}
:1→N→P+40→X→Y
:15→J+2→I
:.RECORD KEYPRESS
:getKey→K
:.REPLACE GRAPHICS ERASED BY MOUSE
:sub(RCL
:If K>0
:.SEARCH LOOKUP TABLE
:!If K-56
:If P-1
:sub(BCK
:End
:Goto 01
:Else
:inString(K,Str1)→A
:End
:.IF KEYPRESS ISVALID
:If A
:If I+48<N
:1→N
:O+6→O
:End
:Text(I+N,J+O,L2+A-1►Tok
:{L2+A-1}→{L5+P}
:.MOVE CURSOR
:N+5→N
:P+1→P
:End
:End
The parser itself is kind of a mess though and over a thousand bytes of code. I'll let you figure it out
Hint: You just step through the string starting from L5.
There are also a lot of optimizations I haven't made yet, so...