Fix white spaces.
[pforth] / fth / see.fth
index d0765d1..760b034 100644 (file)
-\ @(#) see.fth 98/01/26 1.4\r
-\ SEE ( <name> -- , disassemble pForth word )\r
-\\r
-\ Copyright 1996 Phil Burk\r
-\r
-' file? >code rfence a!\r
-\r
-anew task-see.fth\r
-\r
-: .XT ( xt -- , print execution tokens name )\r
-       >name\r
-       dup c@ flag_immediate and\r
-       IF\r
-               ." POSTPONE "\r
-       THEN\r
-       id. space\r
-;\r
-\r
-\ dictionary may be defined as byte code or cell code\r
-0 constant BYTE_CODE\r
-\r
-BYTE_CODE [IF]\r
-       : CODE@ ( addr -- xt , fetch from code space )   C@ ;\r
-       1 constant CODE_CELL\r
-       .( BYTE_CODE not implemented) abort\r
-[ELSE]\r
-       : CODE@ ( addr -- xt , fetch from code space )   @ ;\r
-       CELL constant CODE_CELL\r
-[THEN]\r
-\r
-private{\r
-\r
-0 value see_level  \ level of conditional imdentation\r
-0 value see_addr   \ address of next token\r
-0 value see_out\r
-\r
-: SEE.INDENT.BY ( -- n )\r
-       see_level 1+ 1 max 4 *\r
-;\r
-\r
-: SEE.CR\r
-       >newline\r
-       see_addr ." ( ".hex ." )"\r
-       see.indent.by spaces\r
-       0 -> see_out\r
-;\r
-: SEE.NEWLINE\r
-       see_out 0>\r
-       IF see.cr\r
-       THEN\r
-;\r
-: SEE.CR?\r
-       see_out 6 >\r
-       IF\r
-               see.newline\r
-       THEN\r
-;\r
-: SEE.OUT+\r
-       1 +-> see_out\r
-;\r
-\r
-: SEE.ADVANCE\r
-       code_cell +-> see_addr\r
-;\r
-: SEE.GET.INLINE ( -- n )\r
-       see_addr @\r
-;\r
-\r
-: SEE.GET.TARGET  ( -- branch-target-addr )\r
-       see_addr @ see_addr +\r
-;\r
-\r
-: SEE.SHOW.LIT ( -- )\r
-       see.get.inline .\r
-       see.advance\r
-       see.out+\r
-;\r
-\r
-exists? F* [IF]\r
-: SEE.SHOW.FLIT ( -- )\r
-       see_addr f@ f.\r
-       1 floats +-> see_addr\r
-       see.out+\r
-;\r
-[THEN]\r
-\r
-: SEE.SHOW.ALIT ( -- )\r
-       see.get.inline >name id. space\r
-       see.advance\r
-       see.out+\r
-;\r
-\r
-: SEE.SHOW.STRING ( -- )\r
-       see_addr count 2dup + aligned -> see_addr type\r
-       see.out+\r
-;\r
-: SEE.SHOW.TARGET ( -- )\r
-       see.get.target .hex see.advance\r
-;\r
-\r
-: SEE.BRANCH ( -- addr | , handle branch )\r
-       -1 +-> see_level\r
-       see.newline \r
-       see.get.inline  0>\r
-       IF  \ forward branch\r
-               ." ELSE "\r
-               see.get.target \ calculate address of target\r
-               1 +-> see_level\r
-               nip \ remove old address for THEN\r
-       ELSE\r
-               ." REPEAT " see.get.target .hex\r
-               drop \ remove old address for THEN\r
-       THEN\r
-       see.advance\r
-       see.cr\r
-;\r
-\r
-: SEE.0BRANCH ( -- addr | , handle 0branch )\r
-       see.newline \r
-       see.get.inline 0>\r
-       IF  \ forward branch\r
-               ." IF or WHILE "\r
-               see.get.target \ calculate adress of target\r
-               1 +-> see_level\r
-       ELSE\r
-               ." UNTIL=>" see.get.target .hex\r
-       THEN\r
-       see.advance\r
-       see.cr\r
-;\r
-\r
-: SEE.XT  { xt -- }\r
-       xt\r
-       CASE\r
-               0 OF see_level 0> IF ." EXIT " see.out+ ELSE ." ;" 0  -> see_addr THEN ENDOF\r
-               ['] (LITERAL) OF see.show.lit ENDOF\r
-               ['] (ALITERAL) OF see.show.alit ENDOF\r
-[ exists? (FLITERAL) [IF] ]\r
-               ['] (FLITERAL) OF see.show.flit ENDOF\r
-[ [THEN] ]\r
-               ['] BRANCH    OF see.branch ENDOF\r
-               ['] 0BRANCH   OF see.0branch ENDOF\r
-               ['] (LOOP)    OF -1 +-> see_level see.newline ." LOOP " see.advance see.cr  ENDOF\r
-               ['] (+LOOP)   OF -1 +-> see_level see.newline ." +LOOP" see.advance see.cr  ENDOF\r
-               ['] (DO)      OF see.newline ." DO" 1 +-> see_level see.cr ENDOF\r
-               ['] (?DO)     OF see.newline ." ?DO " see.advance 1 +-> see_level see.cr ENDOF\r
-               ['] (.") OF .' ." ' see.show.string .' " ' ENDOF\r
-               ['] (C") OF .' C" ' see.show.string .' " ' ENDOF\r
-               ['] (S") OF .' S" ' see.show.string .' " ' ENDOF\r
-\r
-               see.cr? xt .xt see.out+\r
-       ENDCASE\r
-;\r
-\r
-: (SEE) { cfa | xt  -- }\r
-       0 -> see_level\r
-       cfa -> see_addr\r
-       see.cr\r
-       0 \ fake address for THEN handler\r
-       BEGIN\r
-               see_addr code@ -> xt\r
-               BEGIN\r
-                       dup see_addr ( >newline .s ) =\r
-               WHILE\r
-                       -1 +-> see_level see.newline \r
-                       ." THEN " see.cr\r
-                       drop\r
-               REPEAT\r
-               CODE_CELL +-> see_addr\r
-               xt see.xt\r
-               see_addr 0=\r
-       UNTIL\r
-       cr\r
-       0= not abort" SEE conditional analyser nesting failed!"\r
-;\r
-\r
-}PRIVATE\r
-\r
-: SEE  ( <name> -- , disassemble )\r
-       '\r
-       dup ['] FIRST_COLON >\r
-       IF\r
-               >code (see)\r
-       ELSE\r
-               >name id.\r
-               ."  is primitive defined in 'C' kernel." cr\r
-       THEN\r
-;\r
-\r
-PRIVATIZE\r
-\r
-0 [IF]\r
-\r
-: SEE.JOKE\r
-       dup swap drop\r
-;\r
-\r
-: SEE.IF\r
-       IF\r
-               ." hello" cr\r
-       ELSE\r
-               ." bye" cr\r
-       THEN\r
-       see.joke\r
-;\r
-: SEE.DO\r
-       4 0\r
-       DO\r
-               i . cr\r
-       LOOP\r
-;\r
-: SEE."\r
-       ." Here are some strings." cr\r
-       c" Forth string." count type cr\r
-       s" Addr/Cnt string" type cr\r
-;\r
-\r
-[THEN]\r
+\ @(#) see.fth 98/01/26 1.4
+\ SEE ( <name> -- , disassemble pForth word )
+\
+\ Copyright 1996 Phil Burk
+
+' file? >code rfence a!
+
+anew task-see.fth
+
+: .XT ( xt -- , print execution tokens name )
+    >name
+    dup c@ flag_immediate and
+    IF
+        ." POSTPONE "
+    THEN
+    id. space
+;
+
+\ dictionary may be defined as byte code or cell code
+0 constant BYTE_CODE
+
+BYTE_CODE [IF]
+    : CODE@ ( addr -- xt , fetch from code space )   C@ ;
+    1 constant CODE_CELL
+    .( BYTE_CODE not implemented) abort
+[ELSE]
+    : CODE@ ( addr -- xt , fetch from code space )   @ ;
+    CELL constant CODE_CELL
+[THEN]
+
+private{
+
+0 value see_level  \ level of conditional imdentation
+0 value see_addr   \ address of next token
+0 value see_out
+
+: SEE.INDENT.BY ( -- n )
+    see_level 1+ 1 max 4 *
+;
+
+: SEE.CR
+    >newline
+    see_addr ." ( ".hex ." )"
+    see.indent.by spaces
+    0 -> see_out
+;
+: SEE.NEWLINE
+    see_out 0>
+    IF see.cr
+    THEN
+;
+: SEE.CR?
+    see_out 6 >
+    IF
+        see.newline
+    THEN
+;
+: SEE.OUT+
+    1 +-> see_out
+;
+
+: SEE.ADVANCE
+    code_cell +-> see_addr
+;
+: SEE.GET.INLINE ( -- n )
+    see_addr @
+;
+
+: SEE.GET.TARGET  ( -- branch-target-addr )
+    see_addr @ see_addr +
+;
+
+: SEE.SHOW.LIT ( -- )
+    see.get.inline .
+    see.advance
+    see.out+
+;
+
+exists? F* [IF]
+: SEE.SHOW.FLIT ( -- )
+    see_addr f@ f.
+    1 floats +-> see_addr
+    see.out+
+;
+[THEN]
+
+: SEE.SHOW.ALIT ( -- )
+    see.get.inline >name id. space
+    see.advance
+    see.out+
+;
+
+: SEE.SHOW.STRING ( -- )
+    see_addr count 2dup + aligned -> see_addr type
+    see.out+
+;
+: SEE.SHOW.TARGET ( -- )
+    see.get.target .hex see.advance
+;
+
+: SEE.BRANCH ( -- addr | , handle branch )
+    -1 +-> see_level
+    see.newline
+    see.get.inline  0>
+    IF  \ forward branch
+        ." ELSE "
+        see.get.target \ calculate address of target
+        1 +-> see_level
+        nip \ remove old address for THEN
+    ELSE
+        ." REPEAT " see.get.target .hex
+        drop \ remove old address for THEN
+    THEN
+    see.advance
+    see.cr
+;
+
+: SEE.0BRANCH ( -- addr | , handle 0branch )
+    see.newline
+    see.get.inline 0>
+    IF  \ forward branch
+        ." IF or WHILE "
+        see.get.target \ calculate adress of target
+        1 +-> see_level
+    ELSE
+        ." UNTIL=>" see.get.target .hex
+    THEN
+    see.advance
+    see.cr
+;
+
+: SEE.XT  { xt -- }
+    xt
+    CASE
+        0 OF see_level 0> IF ." EXIT " see.out+ ELSE ." ;" 0  -> see_addr THEN ENDOF
+        ['] (LITERAL) OF see.show.lit ENDOF
+        ['] (ALITERAL) OF see.show.alit ENDOF
+[ exists? (FLITERAL) [IF] ]
+        ['] (FLITERAL) OF see.show.flit ENDOF
+[ [THEN] ]
+        ['] BRANCH    OF see.branch ENDOF
+        ['] 0BRANCH   OF see.0branch ENDOF
+        ['] (LOOP)    OF -1 +-> see_level see.newline ." LOOP " see.advance see.cr  ENDOF
+        ['] (+LOOP)   OF -1 +-> see_level see.newline ." +LOOP" see.advance see.cr  ENDOF
+        ['] (DO)      OF see.newline ." DO" 1 +-> see_level see.cr ENDOF
+        ['] (?DO)     OF see.newline ." ?DO " see.advance 1 +-> see_level see.cr ENDOF
+        ['] (.") OF .' ." ' see.show.string .' " ' ENDOF
+        ['] (C") OF .' C" ' see.show.string .' " ' ENDOF
+        ['] (S") OF .' S" ' see.show.string .' " ' ENDOF
+
+        see.cr? xt .xt see.out+
+    ENDCASE
+;
+
+: (SEE) { cfa | xt  -- }
+    0 -> see_level
+    cfa -> see_addr
+    see.cr
+    0 \ fake address for THEN handler
+    BEGIN
+        see_addr code@ -> xt
+        BEGIN
+            dup see_addr ( >newline .s ) =
+        WHILE
+            -1 +-> see_level see.newline
+            ." THEN " see.cr
+            drop
+        REPEAT
+        CODE_CELL +-> see_addr
+        xt see.xt
+        see_addr 0=
+    UNTIL
+    cr
+    0= not abort" SEE conditional analyser nesting failed!"
+;
+
+}PRIVATE
+
+: SEE  ( <name> -- , disassemble )
+    '
+    dup ['] FIRST_COLON >
+    IF
+        >code (see)
+    ELSE
+        >name id.
+        ."  is primitive defined in 'C' kernel." cr
+    THEN
+;
+
+PRIVATIZE
+
+0 [IF]
+
+: SEE.JOKE
+    dup swap drop
+;
+
+: SEE.IF
+    IF
+        ." hello" cr
+    ELSE
+        ." bye" cr
+    THEN
+    see.joke
+;
+: SEE.DO
+    4 0
+    DO
+        i . cr
+    LOOP
+;
+: SEE."
+    ." Here are some strings." cr
+    c" Forth string." count type cr
+    s" Addr/Cnt string" type cr
+;
+
+[THEN]