Annotation of gforth/smartdots.fs, revision 1.8

1.2       pazsan      1: \ smart .s                                             09mar2012py
                      2: 
1.4       pazsan      3: \ Copyright (C) 2012 Free Software Foundation, Inc.
1.2       pazsan      4: 
                      5: \ This file is part of Gforth.
                      6: 
                      7: \ Gforth is free software; you can redistribute it and/or
                      8: \ modify it under the terms of the GNU General Public License
                      9: \ as published by the Free Software Foundation, either version 3
                     10: \ of the License, or (at your option) any later version.
                     11: 
                     12: \ This program is distributed in the hope that it will be useful,
                     13: \ but WITHOUT ANY WARRANTY; without even the implied warranty of
                     14: \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     15: \ GNU General Public License for more details.
                     16: 
                     17: \ You should have received a copy of the GNU General Public License
                     18: \ along with this program. If not, see http://www.gnu.org/licenses/.
                     19: 
                     20: \ idea: Gerald Wodni
1.1       pazsan     21: 
                     22: : addr? ( addr -- flag )
1.6       pazsan     23:     TRY  c@  IFERROR  2drop  false nothrow  ELSE  drop  true  THEN   ENDTRY ;
1.8     ! pazsan     24: : .var? ( addr -- flag )
        !            25:     TRY  body> @ dovar: <> throw  IFERROR  2drop false nothrow
        !            26:        ELSE  true  THEN   ENDTRY ;
1.1       pazsan     27: 
                     28: : string? ( addr u -- flag )
1.6       pazsan     29:     TRY  dup #80 u> throw  bounds ?DO  I c@ bl < IF  -1 throw  THEN  LOOP
1.2       pazsan     30:        IFERROR  2drop drop false nothrow ELSE  true  THEN  ENDTRY ;
1.1       pazsan     31: 
                     32: : .string. ( addr u -- )
1.3       pazsan     33:     .\" s\" " type '"' emit space ;
1.7       pazsan     34: : .addr. ( addr -- )
                     35:     dup >name dup IF  ." ' " .name drop  ELSE  drop hex.  THEN ;
1.8     ! pazsan     36: : .var. ( addr -- )
        !            37:     dup body> >name dup IF  .name drop  ELSE  drop hex.  THEN ;
1.1       pazsan     38: 
1.2       pazsan     39: Variable smart.s-skip
                     40: 
                     41: : smart.s. ( n -- )
                     42:     smart.s-skip @  smart.s-skip off IF  drop  EXIT  THEN
1.8     ! pazsan     43:     over r> i swap >r - \ we access the .s loop counter
1.5       pazsan     44:     dup 1 = IF  false  ELSE  pick  2dup string?  THEN  IF
1.2       pazsan     45:        .string. smart.s-skip on
1.8     ! pazsan     46:     ELSE  drop dup addr? IF  dup .var? IF  .var.  ELSE  .addr.  THEN
1.2       pazsan     47:        ELSE  .  THEN
                     48:     THEN ;
                     49: 
1.6       pazsan     50: ' smart.s. IS .s.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>