| IF r> char+ capscomp 0<= EXIT THEN |
IF r> char+ capscomp 0<= EXIT THEN |
| nip r> c@ $1F and < ; |
nip r> c@ $1F and < ; |
| |
|
| : search-prefix ( addr len1 -- suffix len2 ) |
: search-prefix ( addr len1 -- suffix len2 ) 0 >r context |
| context @ @ 0 >r |
BEGIN BEGIN dup @ over cell - @ = WHILE cell - REPEAT |
| BEGIN dup WHILE |
dup >r -rot r> @ @ |
| >r dup r@ cell+ c@ $1F and <= |
BEGIN dup WHILE >r dup r@ cell+ c@ $1F and <= |
| IF 2dup r@ cell+ char+ capscomp 0= |
IF 2dup r@ cell+ char+ capscomp 0= |
| IF r> dup r@ word-lex |
IF r> dup r@ word-lex |
| IF dup prefix-found @ word-lex |
IF dup prefix-found @ word-lex |
| THEN >r |
THEN >r |
| THEN |
THEN |
| THEN r> @ |
THEN r> @ |
| REPEAT drop r> dup prefix-found ! ?dup |
REPEAT drop rot cell - dup vp u> 0= |
| |
UNTIL drop r> dup prefix-found ! ?dup |
| IF cell+ count $1F and rot /string rot drop |
IF cell+ count $1F and rot /string rot drop |
| ELSE 2drop s" " THEN ; |
ELSE 2drop s" " THEN ; |
| |
|