\ system.v4 -- words about the dictionary as a whole: WORDS, FORGET, FENCE. \ \ DECOMPOSITION.md 5.13 and 5.15. Part of the compiler capsule; rests on \ dict.v4, quit.v4 and forth.v4. \ \ Constants the loader supplies: \ FENCE word address of the variable: FORGET will not remove an entry \ that starts below the address it holds header FENCE inline : FENCE' FENCE ; \ ( -- ) the names in the dictionary, the newest first, a blank after \ each, a new line whenever one has passed column 64. Hidden entries -- a \ definition under way -- are not shown. (Q)+0 is the column. header WORDS : WORDS 0 (Q) a! ! LATEST L: if DONE dup -3 + a! @ 2 and if SHOW drop jump NXT SHOW: drop dup -2 + a! @ 4* COUNT 31 and \ xt baddr u dup (Q) a! @ + 1 + ! TYPE SPACE (Q) a! @ -64 + -if WRAP drop jump NXT WRAP: drop CR 0 (Q) a! ! NXT: -1 + a! @ jump L DONE: drop jump CR header VLIST : VLIST jump WORDS \ FORGET xxx FORTH-79: remove xxx and every word defined after it. The \ space they took is free again. A word that is not there is an error, and \ so is one below FENCE, which is where the capsule's own words are (code \ 10, "Protected word"). header FORGET : FORGET 32 WORD (LOOKUP) if MISSING dup -2 + a! @ \ xt name dup FENCE a! @ inv + 1 + -if OK \ name - fence drop drop drop NODE-ERROR b! 10 !b ; OK: drop 4* DP a! ! \ the space from its name on -1 + a! @ (LATEST) a! ! ; \ and the entry before it is the newest MISSING: drop (UNKNOWN) drop ;