--- gforth/smartdots.fs 2012/03/27 23:06:42 1.7 +++ gforth/smartdots.fs 2012/03/27 23:17:52 1.8 @@ -21,6 +21,9 @@ : addr? ( addr -- flag ) TRY c@ IFERROR 2drop false nothrow ELSE drop true THEN ENDTRY ; +: .var? ( addr -- flag ) + TRY body> @ dovar: <> throw IFERROR 2drop false nothrow + ELSE true THEN ENDTRY ; : string? ( addr u -- flag ) TRY dup #80 u> throw bounds ?DO I c@ bl < IF -1 throw THEN LOOP @@ -30,15 +33,17 @@ .\" s\" " type '"' emit space ; : .addr. ( addr -- ) dup >name dup IF ." ' " .name drop ELSE drop hex. THEN ; +: .var. ( addr -- ) + dup body> >name dup IF .name drop ELSE drop hex. THEN ; Variable smart.s-skip : smart.s. ( n -- ) smart.s-skip @ smart.s-skip off IF drop EXIT THEN - over r> i swap >r - + over r> i swap >r - \ we access the .s loop counter dup 1 = IF false ELSE pick 2dup string? THEN IF .string. smart.s-skip on - ELSE drop dup addr? IF .addr. + ELSE drop dup addr? IF dup .var? IF .var. ELSE .addr. THEN ELSE . THEN THEN ;