1: \ smart .s 09mar2012py
2:
3: \ Copyright (C) 2012 Free Software Foundation, Inc.
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
21:
22: : addr? ( addr -- flag )
23: TRY c@ IFERROR 2drop false nothrow ELSE drop true THEN ENDTRY ;
24: : .var? ( addr -- flag )
25: TRY body> @ dovar: <> throw IFERROR 2drop false nothrow
26: ELSE true THEN ENDTRY ;
27:
28: : string? ( addr u -- flag )
29: TRY dup #80 u> throw bounds ?DO I c@ bl < IF -1 throw THEN LOOP
30: IFERROR 2drop drop false nothrow ELSE true THEN ENDTRY ;
31:
32: : .string. ( addr u -- )
33: .\" s\" " type '"' emit space ;
34: : .addr. ( addr -- )
35: dup >name dup IF ." ' " .name drop ELSE drop hex. THEN ;
36: : .var. ( addr -- )
37: dup body> >name dup IF .name drop ELSE drop hex. THEN ;
38:
39: Variable smart.s-skip
40:
41: : smart.s. ( n -- )
42: smart.s-skip @ smart.s-skip off IF drop EXIT THEN
43: over r> i swap >r - \ we access the .s loop counter
44: dup 1 = IF false ELSE pick 2dup string? THEN IF
45: .string. smart.s-skip on
46: ELSE drop dup addr? IF dup .var? IF .var. ELSE .addr. THEN
47: ELSE . THEN
48: THEN ;
49:
50: ' smart.s. IS .s.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>