35 lines
962 B
Forth
35 lines
962 B
Forth
wordlist constant dict
|
|
|
|
: load-dict ( c-addr u -- )
|
|
r/o open-file throw >r
|
|
begin
|
|
pad 1024 r@ read-line throw while
|
|
pad swap ['] create execute-parsing
|
|
repeat
|
|
drop r> close-file throw ;
|
|
|
|
: xreverse {: c-addr u -- c-addr2 u :}
|
|
u allocate throw u + c-addr swap over u + >r begin ( from to r:end)
|
|
over r@ u< while
|
|
over r@ over - x-size dup >r - 2dup r@ cmove
|
|
swap r> + swap repeat
|
|
r> drop nip u ;
|
|
|
|
: .example ( c-addr u u1 -- )
|
|
5 < if
|
|
cr 2dup type space 2dup xreverse 2dup type drop free throw then
|
|
2drop ;
|
|
|
|
: nt-semicheck ( u1 nt -- u2 f )
|
|
dup >r name>string xreverse 2dup dict find-name-in dup if ( u1 c-addr u nt2)
|
|
r@ < if ( u1 c-addr u ) \ count pairs only once and not palindromes
|
|
2dup 4 pick .example
|
|
rot 1+ -rot then
|
|
else
|
|
drop then
|
|
drop free throw r> drop true ;
|
|
|
|
get-current dict set-current s" unixdict.txt" load-dict set-current
|
|
|
|
0 ' nt-semicheck dict traverse-wordlist cr .
|
|
cr bye
|