\ CHECKANS.STR ANS Forth wordset checker                01may93jaw

\ 1-3MAY93 Jens A. Wilke
\ This program is public domain
\ Not for commercial usage!

DECIMAL

VARIABLE CharCount
30 CONSTANT MaxChars
VARIABLE Flag

CREATE Names 1000 ALLOT
VARIABLE PNT Names PNT !

: INIT TRUE Flag ! 0 CharCount ! ;

: ^     PNT @ DUP @ 1+ SWAP !
        BL WORD FIND
        0= IF PNT @ CELL+ DUP @ 1+ SWAP !
              Flag @ IF CR ." Missing: " FALSE Flag ! THEN
              COUNT DUP CharCount +! TYPE SPACE
              CharCount @ MaxChars U< 0= IF CR 9 SPACES 0 CharCount ! THEN
           ELSE DROP THEN ;

[UNDEFINED] PLACE [IF] : PLACE ( adr cnt adr -- ) 2DUP C! 1+ SWAP MOVE ; [THEN]

: WS    INIT
        PNT @ 2 CELLS + PNT !
        BL WORD
        CR CR ." Checking " DUP COUNT TYPE ."  wordset..."
        DUP COUNT PNT @ PLACE COUNT SWAP DROP 1+
        PNT @ + ALIGNED DUP PNT !
        DUP 0 SWAP ! CELL+ 0 SWAP ! ;

[DEFINED] WORDSETS_FS
[IF] WORDSETS_FS [ELSE] S" wordsets.fs" [THEN] INCLUDED

: END
        CR CR ." Wordset:            Status:  Words:" CR

        Names 2 CELLS +
        BEGIN
                DUP COUNT TYPE
                DUP COUNT SWAP DROP 20 SWAP - SPACES
                COUNT + ALIGNED
                DUP @ OVER CELL+ @
                2DUP 0=
                IF ." complete " . DROP DROP
                ELSE OVER =
                 IF ." missing  " . DROP
                 ELSE ." partial  " OVER SWAP - . ." / " .
                 THEN
                THEN CR
                2 CELLS +
                DUP PNT @ U< 0=
        UNTIL DROP ;

END
