Hi all, In order to make it impossible to type spaces during the user's input (with 'accept') in a game, I investigated how 'accept' works (files <kernel/accept.fs> and <kernel/history.fs> of the Gforth's sources) and then tried this:
----8<---------------------------------------------------------- : (everychar) ( key -- key ) dup bl <> and ; ' (everychar) is everychar ----8<---------------------------------------------------------- It works as expected: any space is converted to zero, a key code that has no effect because of its 'false' in the 'ctrlkeys' table. But there's a problem. In the first input the tab key works as usual, but in the next inputs it fails (also when pressed twice as the first key of the input): ----8<---------------------------------------------------------- :2: malformed UTF-8 character Backtrace: $B6939148 throw $B6939928 xc@+ $1D0BFC $1D07F2 $B693A9E0 x-width $B693AAD8 cur-correct $FFFFFFFE $B693B194 .all $2 $B693B25C xkill-expand $B692AF4C perform $B692AFAC decode $B692B004 edit-line $B692B408 accept $B692B07C perform ----8<---------------------------------------------------------- I tried other key conversions (e.g. bl to 31, 'a' to 'b'...) and the same problem happens. Beside, there's something I don't understand: The backtrace shows 'decode' executes 'xkill-expand', but the xt associated with the tab key in the 'ctrlkeys' table is that of 'xtab-expand' (set in 'xchar-history'), as shown this way right after the error: ----8<---------------------------------------------------------- #tab cells ctrlkeys + @ >name id. xtab-expand ----8<---------------------------------------------------------- I have not found yet where that binding is changed to 'xkill-expand'. Anyway I don't see yet the relation between the exchange of input chars at the start of 'decode' and word completion. I have to investigate the source code more deeply (by the way, many times I miss a simple one-line comment describing what certain word is supposed to do; comments are sparse in Gforth's sources, especially in low-level words not described in the docs). I'd appreciate any help. Thank you. Marcos -- http://programandala.net
