Some Debugging Sourcecode found on a BBC Micro Fig-Forth Disk#

( Toolkit                 EEDIT                      1 of 2     )
VARIABLE EBLK                    ( will hold error value of BLK )
VARIABLE E>IN                    ( will hold error value of >IN )

: (EEDIT )   ( -- )                     ( new error routine to  )
        BLK @   EBLK !                 ( transfer values of BLK )
        >IN @  WBFR C@ - 1-   E>IN !    ( and >IN to their error)
        $MSG ;                                   ( counterparts )                
                                                                                                               
ASSIGN  MESSAGE TO-DO  (EEDIT)       (  insert new error routine)                            
                              ( into error processing procedures)                        
                                                              -->




( Toolkit                EEDIT                      2 of 2      )                            
                                                                                                   
: EEDIT     ( -- )               ( display details of block and )                               
                                 ( line where error occured and )                           
                                 ( text of line                 )
            EBLK @  ?DUP                                                   
            IF    CR ." Error in block " DUP .  DUP SCR !                        
                  E>IN @ 64 /  ." line " DUP .                                   
                  SWAP CR .LINE               
            ELSE ." Last Error was from the Keyboard "   
            THEN                                
            CR       ;                                                                                              

HERE FENCE !                                                                                                            




( Toolkit                 SHOW                       1 of 2     )                                                            

: NEWCREATE ( -- )                 ( new CREATE which saves     )
            BLK @ ,                ( block and offset in header )
            >IN @ ,                                                        
            (CREATE) ;                                              
                                                           
ASSIGN CREATE TO-DO NEWCREATE                                           

:  FORGET       FORGET -4 ALLOT ;        ( FORGET 4 extra bytes )                

HERE CONSTANT MARKER  ( cannot SHOW dictionary entry before here)                

HERE FENCE !      ( set FENCE to prevent inadvertent FORGETting )                    
                                                                                                        
                                                              -->



( Toolkit      SHOW                                  2 of 2     )                                           
                   
: SHOW   FIND ?DUP            ( usage :- SHOW <word>  displays  )   
         IF  DUP  MARKER <           ( where <word> was defined ) 
             IF ." Can't SHOW  "  2+ NFA ID.                  
             ELSE                                                              
                2+ NFA  DUP          
                2- 2- @ ?DUP                                                   
                IF    CR ." Defined in block " DUP . DUP SCR !                      
                      SWAP 2- @ 64 / ." line " DUP .                                 
                      SWAP CR .LINE          
                ELSE  ID. ." was defined from the keyboard"           
                THEN                             
             THEN                                                        
         ELSE ." Word not found "                   
         THEN   CR     ;