( SHOWLEX NEEDS MYFORTH COMPILED INTO THE DICTIONARY PRIOR TO LOADING. ) FORGET TASK : TASK ; VARIABLE LEXADDR : CHECKLEX ( str -- ) FINDF DUP 0= ABORT" File not found." DUP [ DECIMAL ] 16 + @ [ HEX ] E208 <> ABORT" Not a valid LEX file." DUP [ DECIMAL ] 8 CR ." LEX " TYPE ." : " PAUSE 37 + LEXADDR ! ; ( CHECKLEX ) : ID LEXADDR @ ; : MINTOK ID 2+ ; : MAXTOK ID 2+ 2+ ; : NEXTLEX ID 5+ 1+ ; : SPEEDTBL ID 11 + ; : TEXTTBL SPEEDTBL DUP N@ IF 1+ ELSE 80 + THEN ; ( TEXTTBL ) : MSGTBL TEXTTBL 2+ 2+ ; : POLHND MSGTBL 2+ 2+ ; : MAINTBL POLHND 5+ ; : .ID ID C@ CR ." ID = " DUP HEX. DEC. ; : .MINTOK MINTOK C@ CR ." MIN token = " DUP HEX. DEC. ; : .MAXTOK MAXTOK C@ CR ." MAX token = " DUP HEX. DEC. ; : .NEXTLEX NEXTLEX @ ?DUP CR IF NEXTLEX + ." Next LEX = " ADDR$ TYPE ELSE ." No LEX table link." THEN ; ( .NEXTLEX ) : .SPEEDTBL SPEEDTBL N@ CR IF ." No speed table." ELSE ." Speed table exists." THEN ; ( .SPEEDTBL ) : .MSGTBL MSGTBL 4N@ ?DUP CR IF MSGTBL + ." MSG table = " ADDR$ TYPE ELSE ." No MSG table." THEN ; : .POLHND POLHND @ ?DUP CR IF POLHND + ." POLL handler = " ADDR$ TYPE ELSE ." No poll handler." THEN ; : SATTRIB DUP 1 AND IF ." KBD " THEN DUP 4 AND IF ." IF " THEN 8 AND IF ." PRGM" THEN PAUSE ; ( SATTRIB ) : FATTRIB 2- DUP N@ SWAP DUP 1+ N@ ?DUP IF 0 DO OVER I > NOT IF ." [" THEN 1- DUP N@ DUP [ DECIMAL ] 11 > IF ." #!$" ELSE DUP 7 > IF ." #" ELSE ." $" THEN THEN 2 AND IF ." ()" THEN OVER I > NOT IF ." ]" THEN SPACE LOOP ELSE ." No parameters." THEN PAUSE 2DROP ; ( FATTRIB ) : DOMAIN ?DUP CR IF MINTOK C@ - 9 * MAINTBL + 8 + DUP N@ DUP 0= NOT IF SWAP 5- DUP @ + ." ENTRY " DUP ADDR$ TYPE PAUSE CR ." CHAR " OVER HEX. PAUSE SWAP DUP [ HEX ] 0F = CR IF DROP ." Function: " FATTRIB ELSE ." Statement: " SATTRIB DROP THEN ELSE ." CHAR " HEX. PAUSE DROP CR ." Word." PAUSE THEN ELSE ." Spec. word/FFN." PAUSE THEN ; ( DOMAIN ) : DOTXTBL BEGIN DUP C@ [ HEX ] 0FF <> WHILE CR CR DUP 1- N@ 1+ 2DUP 2/ ." KEY " TYPE PAUSE + DUP C@ CR ." TOKEN " DUP HEX. DUP DEC. PAUSE DOMAIN 2+ 1+ REPEAT ; ( DOTXTBL ) : .KEYWORDS TEXTTBL DUP 4N@ + DUP C@ [ HEX ] 0FF = CR IF ." No keywords." ELSE DOTXTBL THEN DROP ; ( .KEYWORDS ) : SL .ID PAUSE .MINTOK PAUSE .MAXTOK PAUSE .NEXTLEX PAUSE .SPEEDTBL PAUSE .MSGTBL PAUSE .POLHND PAUSE .KEYWORDS PAUSE CR ; : SL+ ID BEGIN CR CR SL NEXTLEX DUP @ 0= NOT IF DUP DUP @ + LEXADDR ! THEN @ 0= UNTIL LEXADDR ! ; : SHOWLEX CHECKLEX SL+ ;