\ Vocabulary management : FORGET BL WORD FIND >LINK ( find the word, gets the dictionary entry address ) DUP @ LATEST ! ( set LATEST to point to the previous word ) H ! ( and store H with the dictionary address ) ; : HIDE BL WORD FIND DROP >NAME DUP @ F_HIDDEN OR SWAP ! ; : VOCAB>LATEST ( vcfa -- vlatest ) 1+ @ @ ; \ Create new vocabulary : VOCABULARY create 0 , does> body> context #context @ 1- + ! ; : DEFINITIONS context #context @ 1- + @ current ! ; \ Define root vocabulary (always available) vocabulary ROOT : ONLY 1 #context ! root 2 #context ! root ; : PREVIOUS 1 #context -! ; : ALSO context #context @ + dup 1- @ swap ! 1 #context +! ; also root definitions : FORTH forth ; \ Display search order and compilation dictionary : ORDER \ Search order context #context @ 1- + context swap do i @ >name .name space -1 +loop \ Current (definitions) 5 spaces current @ >name .name ; \ Display transient vocabulary contents : WORDS cr context #context @ 1- + @ 1+ @ BEGIN ?DUP ( while link pointer is not 0 ) WHILE DUP ?HIDDEN NOT IF ( ignore hidden words ) DUP 1+ .NAME ( but if not hidden, print the word ) SPACE THEN @ ( dereference the link pointer - go to previous word ) REPEAT CR ; only forth also definitions