Transitioning to julia 0.6 (may be hard)
[forth.jl.git] / src / lib_8_vocab.4th
index e0ba306..8ad875f 100644 (file)
 
         >link
 
-        DUP @ LATEST !      ( set LATEST to point to the previous word )
+        dup @ current @ 1+ !      ( set LATEST to point to the previous word )
 ;
 
-: HIDE
+\ Mark word as hidden
+: HIDE ( -- )
         BL WORD FIND DROP >NAME
         DUP @ F_HIDDEN OR SWAP !
 ;
 
+: ?HIDDEN
+        1+              ( skip over the link pointer )
+        @               ( get the flags/length byte )
+        F_HIDDEN AND    ( mask the F_HIDDEN flag and return it (as a truth value) )
+;
+
+\ Display name of word
+: .NAME ( cfa -- )
+        DUP @           ( get the flags/length byte )
+        F_LENMASK AND   ( mask out the flags - just want the length )
+
+        BEGIN
+                DUP 0>          ( length > 0? )
+        WHILE
+                SWAP 1+         ( addr len -- len addr+1 )
+                DUP @           ( len addr -- len addr char | get the next character)
+                DUP 32 >= IF
+                        EMIT    ( len addr char -- len addr | and print it)
+                ELSE
+                        BASE @ SWAP HEX
+                        ." \x" 0 .R
+                        BASE !
+                THEN
+                SWAP 1-         ( len addr -- addr len-1    | subtract one from length )
+        REPEAT
+        2DROP           ( len addr -- )
+;
+
 \ Create new vocabulary
 : VOCABULARY
         create 0 ,
@@ -40,6 +69,9 @@ vocabulary ROOT
 ;
 
 : PREVIOUS
+        #context @
+        1 <= abort" Cannot empty search order stack!"
+
         1 #context -!
 ;