!!! 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 ; }}}