\ WORDS.SEQ The WORDS definition Enhancements by Tom Zimmer VARIABLE VYET \ DID WE PRINT VOCABULARY YET VARIABLE VADDR \ VOCABULARY NAME ADDRESS : .VYET ( --- ) VYET @ IF EXIT THEN VADDR @ CR ." --[ " .ID ." ]--" VYET ON CR LMARGIN @ SPACES ; VARIABLE TOTALWORDS : ?INNAME ( NFA --- F1 ) YSEG @ SWAP ?CS: HERE 100 + 31 CMOVEL HERE COUNT HERE 100 + COUNT 31 AND 2DUP + 1- DUP C@ 127 AND SWAP C! SEARCH SWAP DROP ; : ?CODENAME ( NFA --- F1 ) NAME> C@ DUP 232 <> SWAP 233 <> AND ; 0 CONSTANT WORDTYPE : ?WORDTYPE ( NFA --- F1 ) NAME> @REL>ABS WORDTYPE = ; : ?TOTALWORDS ( NFA --- FALSE ) DROP FALSE TOTALWORDS INCR ; DEFER ?W.NAME : W.NAME ( NFA --- ) \ Print name filtered by HERE DUP ?W.NAME IF .VYET 17 ?LINE .ID #OUT @ 64 < IF TAB THEN TOTALWORDS INCR ELSE DROP THEN ; : .VOCWORDS ( A1 --- ) DUP HERE 500 + #THREADS 2* CMOVE BODY> >NAME VADDR ! VYET OFF BEGIN HERE 500 + #THREADS LARGEST DUP ?KEYPAUSE WHILE DUP L>NAME W.NAME Y@ SWAP ! REPEAT 2DROP ; DEFER ?W.TEST ' NOOP IS ?W.TEST : ?*.* ( --- ) HERE 1+ " *.*" COMP 0= IF ['] NOOP IS ?W.NAME THEN ; : ?CODE.* ( --- ) HERE 1+ " CODE.*" CAPS-COMP 0= IF ['] ?CODENAME IS ?W.NAME THEN ; : ?:.* ( --- ) HERE 1+ " :.*" CAPS-COMP 0= IF ['] ?*.* @REL>ABS =: WORDTYPE ['] ?WORDTYPE IS ?W.NAME THEN ; : ?VARIABLE.* ( --- ) HERE 1+ " VARIABLE.*" CAPS-COMP 0= IF ['] TOTALWORDS @REL>ABS =: WORDTYPE ['] ?WORDTYPE IS ?W.NAME THEN ; : ?UVARIABLE.* ( --- ) HERE 1+ " UVARIABLE.*" CAPS-COMP 0= IF ['] BASE @REL>ABS =: WORDTYPE ['] ?WORDTYPE IS ?W.NAME THEN ; : ?CONSTANT.* ( --- ) HERE 1+ " CONSTANT.*" CAPS-COMP 0= IF ['] WORDTYPE @REL>ABS =: WORDTYPE ['] ?WORDTYPE IS ?W.NAME THEN ; : ?DEFER.* ( --- ) HERE 1+ " DEFER.*" CAPS-COMP 0= IF ['] ?W.TEST @REL>ABS =: WORDTYPE ['] ?WORDTYPE IS ?W.NAME THEN ; : ?UDEFER.* ( --- ) HERE 1+ " UDEFER.*" CAPS-COMP 0= IF ['] EMIT @REL>ABS =: WORDTYPE ['] ?WORDTYPE IS ?W.NAME THEN ; : ?TOTAL.* ( --- ) HERE 1+ " TOTAL.*" CAPS-COMP 0= IF CR ." Not displaying, just counting the TOTAL " ['] ?TOTALWORDS IS ?W.NAME THEN ; \ WORDS print words in current vocabulary. \ WORDS print words containing string in all vocabularies. \ WORDS *.* print all words of all vocabularies. \ WORDS enhancements by Tom Zimmer : WORDS ( -- ) TOTALWORDS OFF SAVESTATE 78 RMARGIN ! 15 TABSIZE ! LMARGIN OFF CR ." ** Press SPACE to pause, or ESC to exit ** " >IN @ SPAN @ <> IF ['] ?INNAME IS ?W.NAME BL WORD DROP ?*.* ?CODE.* ?:.* ?VARIABLE.* ?CONSTANT.* ?DEFER.* ?UVARIABLE.* ?UDEFER.* ?TOTAL.* VOC-LINK @ BEGIN DUP #THREADS 2* - .VOCWORDS @ DUP 0= UNTIL DROP ELSE ['] NOOP IS ?W.NAME CONTEXT @ .VOCWORDS THEN CR TOTALWORDS @ U. ." Words displayed" CR RESTORESTATE ; ROOT DEFINITIONS ' WORDS ALIAS WORDS \ : WORDS WORDS ; FORTH DEFINITIONS