Suppress CR in quiet mode, patch by Derek Fawcus.
authorburkphil <burkphil@b0a0988d-7f52-0410-8c73-4f6cdee1a2cf>
Fri, 8 Jun 2012 17:50:20 +0000 (17:50 +0000)
committerburkphil <burkphil@b0a0988d-7f52-0410-8c73-4f6cdee1a2cf>
Fri, 8 Jun 2012 17:50:20 +0000 (17:50 +0000)
Delete extra trace.fth file.
Fix some comments in t_floats.fth.

csrc/pf_core.c
fth/t_floats.fth
fth/utils/trace.fth [deleted file]

index 235c0a2..19e75a8 100644 (file)
@@ -496,13 +496,19 @@ cell_t pfDoForth( const char *DicFileName, const char *SourceName, cell_t IfInit
                        if( DicFileName )\r
                        {\r
                                pfDebugMessage("DicFileName = "); pfDebugMessage(DicFileName); pfDebugMessage("\n");\r
-                               EMIT_CR;\r
+                               if( !gVarQuiet )\r
+                               {\r
+                                       EMIT_CR;\r
+                               }\r
                                dic = pfLoadDictionary( DicFileName, &EntryPoint );\r
                        }\r
                        else\r
                        {\r
-                               MSG(" (static)");\r
-                               EMIT_CR;\r
+                               if( !gVarQuiet )\r
+                               {\r
+                                       MSG(" (static)");\r
+                                       EMIT_CR;\r
+                               }\r
                                dic = pfLoadStaticDictionary();                 \r
                        }\r
                }\r
index c726386..03d9ba1 100644 (file)
@@ -41,21 +41,21 @@ T{ 500.0 510.0 -0.002 f~ }T{  false }T
        fover (f.) >float fswap f~\r
        AND\r
 ;\r
-: T_FS. ( -- ok? ) ( r -f- )\r
+: T_FS. ( -- ok? ) ( r ftol -f- )\r
        fover (fs.) >float fswap f~\r
        AND\r
 ;\r
-: T_FE. ( -- ok? ) ( r -f- )\r
+: T_FE. ( -- ok? ) ( r ftol -f- )\r
        fover (fe.) >float fswap f~\r
        AND\r
 ;\r
 \r
-: T_FG. ( -- ok? ) ( r -f- )\r
+: T_FG. ( -- ok? ) ( r ftol -f- )\r
        fover (f.) >float fswap f~\r
        AND\r
 ;\r
 \r
-: T_F>D ( -- ok? ) ( r -f- )\r
+: T_F>D ( -- ok? ) ( r ftol -f- )\r
        fover f>d d>f fswap f~\r
 ;\r
 \r
@@ -75,7 +75,7 @@ T{ 2345 S>F  79 S>F  F/  -0.0001 T_F.  }T{  true  }T
 T{ 511 S>F  -294 S>F  F/  -0.0001 T_F.  }T{  true  }T\r
 \r
 : T.SERIES { N matchCFA | flag -- ok? } (  fstart fmult -f- )\r
-       fswap  ( -- fmust fstart )\r
+       fswap  ( -- fmult fstart )\r
        true -> flag\r
        N 0\r
        ?DO\r
diff --git a/fth/utils/trace.fth b/fth/utils/trace.fth
deleted file mode 100644 (file)
index 89dbfbb..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-\ @(#) trace.fth 98/01/08 1.1\r
-\ TRACE ( <name> -- , trace pForth word )\r
-\\r
-\ Single step debugger.\r
-\   TRACE  ( i*x <name> -- , setup trace for Forth word )\r
-\   S      ( -- , step over )\r
-\   SM     ( many -- , step over many times )\r
-\   SD     ( -- , step down )\r
-\   G      ( -- , go to end of word )\r
-\   GD     ( n -- , go down N levels from current level, stop at end of this level )\r
-\\r
-\ This debugger works by emulating the inner interpreter of pForth.\r
-\ It executes code and maintains a separate return stack for the\r
-\ program under test.  Thus all primitives that operate on the return\r
-\ stack, such as DO and R> must be trapped.  Local variables must\r
-\ also be handled specially.  Several state variables are also\r
-\ saved and restored to establish the context for the program being\r
-\ tested.\r
-\    \r
-\ Copyright 1997 Phil Burk\r
-\r
-anew task-trace.fth\r
-\r
-: SPACE.TO.COLUMN  ( col -- )\r
-       out @ - spaces\r
-;\r
-\r
-: IS.PRIMITIVE? ( xt -- flag , true if kernel primitive )\r
-       ['] first_colon <\r
-;\r
-\r
-0 value TRACE_IP         \ instruction pointer\r
-0 value TRACE_LEVEL      \ level of descent for inner interpreter\r
-0 value TRACE_LEVEL_MAX  \ maximum level of descent\r
-\r
-private{\r
-\r
-\ use fake return stack\r
-128 cells constant TRACE_RETURN_SIZE \ size of return stack in bytes\r
-create TRACE-RETURN-STACK TRACE_RETURN_SIZE 16 + allot\r
-variable TRACE-RSP\r
-: TRACE.>R     ( n -- ) trace-rsp @ cell- dup trace-rsp ! ! ;  \ *(--rsp) = n\r
-: TRACE.R>     ( -- n ) trace-rsp @ dup @ swap cell+ trace-rsp ! ;  \ n = *rsp++\r
-: TRACE.R@     ( -- n ) trace-rsp @ @ ; ; \ n = *rsp\r
-: TRACE.RPICK  ( index -- n ) cells trace-rsp @ + @ ; ; \ n = rsp[index]\r
-: TRACE.0RP    ( -- n ) trace-return-stack trace_return_size + 8 + trace-rsp ! ;\r
-: TRACE.RDROP  ( --  ) cell trace-rsp +! ;\r
-: TRACE.RCHECK ( -- , abort if return stack out of range )\r
-       trace-rsp @ trace-return-stack u<\r
-               abort" TRACE return stack OVERFLOW!"\r
-       trace-rsp @ trace-return-stack trace_return_size + 12 + u>\r
-               abort" TRACE return stack UNDERFLOW!"\r
-;\r
-\r
-\ save and restore several state variables\r
-10 cells constant TRACE_STATE_SIZE\r
-create TRACE-STATE-1 TRACE_STATE_SIZE allot\r
-create TRACE-STATE-2 TRACE_STATE_SIZE allot\r
-\r
-variable TRACE-STATE-PTR\r
-: TRACE.SAVE++ ( addr -- , save next thing )\r
-       @ trace-state-ptr @ !\r
-       cell trace-state-ptr +!\r
-;\r
-\r
-: TRACE.SAVE.STATE  ( -- )\r
-       state trace.save++\r
-       hld   trace.save++\r
-       base  trace.save++\r
-;\r
-\r
-: TRACE.SAVE.STATE1  ( -- , save normal state )\r
-       trace-state-1 trace-state-ptr !\r
-       trace.save.state\r
-;\r
-: TRACE.SAVE.STATE2  ( -- , save state of word being debugged )\r
-       trace-state-2 trace-state-ptr !\r
-       trace.save.state\r
-;\r
-\r
-\r
-: TRACE.RESTORE++ ( addr -- , restore next thing )\r
-       trace-state-ptr @ @ swap !\r
-       cell trace-state-ptr +!\r
-;\r
-\r
-: TRACE.RESTORE.STATE  ( -- )\r
-       state trace.restore++\r
-       hld   trace.restore++\r
-       base  trace.restore++\r
-;\r
-\r
-: TRACE.RESTORE.STATE1  ( -- )\r
-       trace-state-1 trace-state-ptr !\r
-       trace.restore.state\r
-;\r
-: TRACE.RESTORE.STATE2  ( -- )\r
-       trace-state-2 trace-state-ptr !\r
-       trace.restore.state\r
-;\r
-\r
-\ The implementation of these pForth primitives is specific to pForth.\r
-\r
-variable TRACE-LOCALS-PTR  \ point to top of local frame\r
-\r
-\ create a return stack frame for NUM local variables\r
-: TRACE.(LOCAL.ENTRY)  ( x0 x1 ... xn n -- )  { num | lp -- }\r
-       trace-locals-ptr @ trace.>r\r
-       trace-rsp @ trace-locals-ptr !\r
-       trace-rsp @  num cells - trace-rsp !  \ make room for locals\r
-       trace-rsp @ -> lp\r
-       num 0\r
-       DO\r
-               lp !\r
-               cell +-> lp  \ move data into locals frame on return stack\r
-       LOOP\r
-;\r
-       \r
-: TRACE.(LOCAL.EXIT) ( -- )\r
-       trace-locals-ptr @  trace-rsp !\r
-       trace.r> trace-locals-ptr !\r
-;\r
-: TRACE.(LOCAL@) ( l# -- n , fetch from local frame )\r
-       trace-locals-ptr @  swap cells - @\r
-;\r
-: TRACE.(1_LOCAL@) ( -- n ) 1 trace.(local@) ;\r
-: TRACE.(2_LOCAL@) ( -- n ) 2 trace.(local@) ;\r
-: TRACE.(3_LOCAL@) ( -- n ) 3 trace.(local@) ;\r
-: TRACE.(4_LOCAL@) ( -- n ) 4 trace.(local@) ;\r
-: TRACE.(5_LOCAL@) ( -- n ) 5 trace.(local@) ;\r
-: TRACE.(6_LOCAL@) ( -- n ) 6 trace.(local@) ;\r
-: TRACE.(7_LOCAL@) ( -- n ) 7 trace.(local@) ;\r
-: TRACE.(8_LOCAL@) ( -- n ) 8 trace.(local@) ;\r
-\r
-: TRACE.(LOCAL!) ( n l# -- , store into local frame )\r
-       trace-locals-ptr @  swap cells - !\r
-;\r
-: TRACE.(1_LOCAL!) ( -- n ) 1 trace.(local!) ;\r
-: TRACE.(2_LOCAL!) ( -- n ) 2 trace.(local!) ;\r
-: TRACE.(3_LOCAL!) ( -- n ) 3 trace.(local!) ;\r
-: TRACE.(4_LOCAL!) ( -- n ) 4 trace.(local!) ;\r
-: TRACE.(5_LOCAL!) ( -- n ) 5 trace.(local!) ;\r
-: TRACE.(6_LOCAL!) ( -- n ) 6 trace.(local!) ;\r
-: TRACE.(7_LOCAL!) ( -- n ) 7 trace.(local!) ;\r
-: TRACE.(8_LOCAL!) ( -- n ) 8 trace.(local!) ;\r
-\r
-: TRACE.(LOCAL+!) ( n l# -- , store into local frame )\r
-       trace-locals-ptr @  swap cells - +!\r
-;\r
-: TRACE.(?DO)  { limit start ip -- ip' }\r
-       limit start =\r
-       IF\r
-               ip @ +-> ip \ BRANCH\r
-       ELSE\r
-               start trace.>r\r
-               limit trace.>r\r
-               cell +-> ip\r
-       THEN\r
-       ip\r
-;\r
-\r
-: TRACE.(LOOP)  { ip | limit indx -- ip' }\r
-       trace.r> -> limit\r
-       trace.r> 1+ -> indx\r
-       limit indx =\r
-       IF\r
-               cell +-> ip\r
-       ELSE\r
-               indx trace.>r\r
-               limit trace.>r\r
-               ip @ +-> ip\r
-       THEN\r
-       ip\r
-;\r
-\r
-: TRACE.(+LOOP)  { delta ip | limit indx oldindx -- ip' }\r
-       trace.r> -> limit\r
-       trace.r> -> oldindx\r
-       oldindx delta + -> indx\r
-\ /* Do indices cross boundary between LIMIT-1 and LIMIT ? */\r
-\  if( ( (OldIndex - Limit) & ((Limit-1) - NewIndex) & 0x80000000 ) ||\r
-\    ( (NewIndex - Limit) & ((Limit-1) - OldIndex) & 0x80000000 ) )\r
-       oldindx limit -    limit 1-    indx -  AND $ 80000000 AND\r
-          indx limit -    limit 1- oldindx -  AND $ 80000000 AND OR\r
-       IF\r
-               cell +-> ip\r
-       ELSE\r
-               indx trace.>r\r
-               limit trace.>r\r
-               ip @ +-> ip\r
-       THEN\r
-       ip\r
-;\r
-\r
-: TRACE.CHECK.IP  {  ip -- }\r
-       ip ['] first_colon u<\r
-       ip here u> OR\r
-       IF\r
-               ." TRACE - IP out of range = " ip .hex cr\r
-               abort\r
-       THEN\r
-;\r
-\r
-: TRACE.SHOW.IP { ip -- , print name and offset }\r
-       ip code> >name dup id.\r
-       name> >code ip swap - ."  +" .\r
-;\r
-\r
-: TRACE.SHOW.STACK { | mdepth -- }\r
-       base @ >r\r
-       ." <" base @ decimal 1 .r ." :"\r
-       depth 1 .r ." > "\r
-       r> base !\r
-       depth 5 min -> mdepth\r
-       depth mdepth  -\r
-       IF\r
-               ." ... "  \ if we don't show entire stack\r
-       THEN\r
-       mdepth 0\r
-       ?DO\r
-               mdepth i 1+ - pick .  \ show numbers in current base\r
-       LOOP\r
-;\r
-\r
-: TRACE.SHOW.NEXT { ip -- }\r
-       >newline\r
-       ip trace.check.ip\r
-\ show word name and offset\r
-       ." <<  "\r
-       ip trace.show.ip\r
-       30 space.to.column\r
-\ show data stack\r
-       trace.show.stack\r
-       65 space.to.column ."  ||"\r
-       trace_level 2* spaces\r
-       ip code@\r
-       cell +-> ip\r
-\ show primitive about to be executed\r
-       dup .xt space\r
-\ trap any primitives that are followed by inline data\r
-       CASE\r
-               ['] (LITERAL)  OF ip @  . ENDOF\r
-               ['] (ALITERAL) OF ip a@ . ENDOF\r
-[ exists? (FLITERAL) [IF] ]\r
-               ['] (FLITERAL) OF ip f@ f. ENDOF\r
-[ [THEN] ]\r
-               ['] BRANCH     OF ip @  . ENDOF\r
-               ['] 0BRANCH    OF ip @  . ENDOF\r
-               ['] (.")       OF ip count type .' "' ENDOF\r
-               ['] (C")       OF ip count type .' "' ENDOF\r
-               ['] (S")       OF ip count type .' "' ENDOF\r
-       ENDCASE\r
-       100 space.to.column ."  >> "\r
-;\r
-\r
-: TRACE.DO.PRIMITIVE  { ip xt | oldhere --  ip' , perform code at ip }\r
-       xt\r
-       CASE\r
-               0 OF -1 +-> trace_level  trace.r> -> ip ENDOF \ EXIT\r
-               ['] (CREATE)   OF ip cell- body_offset + ENDOF\r
-               ['] (LITERAL)  OF ip @ cell +-> ip ENDOF\r
-               ['] (ALITERAL) OF ip a@ cell +-> ip ENDOF\r
-[ exists? (FLITERAL) [IF] ]\r
-               ['] (FLITERAL) OF ip f@ 1 floats +-> ip ENDOF\r
-[ [THEN] ]\r
-               ['] BRANCH     OF ip @ +-> ip ENDOF\r
-               ['] 0BRANCH    OF 0= IF ip @ +-> ip ELSE cell +-> ip THEN ENDOF\r
-               ['] >R         OF trace.>r ENDOF\r
-               ['] R>         OF trace.r> ENDOF\r
-               ['] R@         OF trace.r@ ENDOF\r
-               ['] RDROP      OF trace.rdrop ENDOF\r
-               ['] 2>R        OF trace.>r trace.>r ENDOF\r
-               ['] 2R>        OF trace.r> trace.r> ENDOF\r
-               ['] 2R@        OF trace.r@ 1 trace.rpick ENDOF\r
-               ['] i          OF 1 trace.rpick ENDOF\r
-               ['] j          OF 3 trace.rpick ENDOF\r
-               ['] (LEAVE)    OF trace.rdrop trace.rdrop  ip @ +-> ip ENDOF\r
-               ['] (LOOP)     OF ip trace.(loop) -> ip  ENDOF\r
-               ['] (+LOOP)    OF ip trace.(+loop) -> ip  ENDOF\r
-               ['] (DO)       OF trace.>r trace.>r ENDOF\r
-               ['] (?DO)      OF ip trace.(?do) -> ip ENDOF\r
-               ['] (.")       OF ip count type  ip count + aligned -> ip ENDOF\r
-               ['] (C")       OF ip  ip count + aligned -> ip ENDOF\r
-               ['] (S")       OF ip count  ip count + aligned -> ip ENDOF\r
-               ['] (LOCAL.ENTRY) OF trace.(local.entry) ENDOF\r
-               ['] (LOCAL.EXIT) OF trace.(local.exit) ENDOF\r
-               ['] (LOCAL@)   OF trace.(local@)   ENDOF\r
-               ['] (1_LOCAL@) OF trace.(1_local@) ENDOF\r
-               ['] (2_LOCAL@) OF trace.(2_local@) ENDOF\r
-               ['] (3_LOCAL@) OF trace.(3_local@) ENDOF\r
-               ['] (4_LOCAL@) OF trace.(4_local@) ENDOF\r
-               ['] (5_LOCAL@) OF trace.(5_local@) ENDOF\r
-               ['] (6_LOCAL@) OF trace.(6_local@) ENDOF\r
-               ['] (7_LOCAL@) OF trace.(7_local@) ENDOF\r
-               ['] (8_LOCAL@) OF trace.(8_local@) ENDOF\r
-               ['] (LOCAL!)   OF trace.(local!)   ENDOF\r
-               ['] (1_LOCAL!) OF trace.(1_local!) ENDOF\r
-               ['] (2_LOCAL!) OF trace.(2_local!) ENDOF\r
-               ['] (3_LOCAL!) OF trace.(3_local!) ENDOF\r
-               ['] (4_LOCAL!) OF trace.(4_local!) ENDOF\r
-               ['] (5_LOCAL!) OF trace.(5_local!) ENDOF\r
-               ['] (6_LOCAL!) OF trace.(6_local!) ENDOF\r
-               ['] (7_LOCAL!) OF trace.(7_local!) ENDOF\r
-               ['] (8_LOCAL!) OF trace.(8_local!) ENDOF\r
-               ['] (LOCAL+!)  OF trace.(local+!)  ENDOF\r
-               >r xt EXECUTE r>\r
-       ENDCASE\r
-       ip\r
-;\r
-\r
-: TRACE.DO.NEXT  { ip | xt oldhere --  ip' , perform code at ip }\r
-       ip trace.check.ip\r
-\ set context for word under test\r
-       trace.save.state1\r
-       here -> oldhere\r
-       trace.restore.state2\r
-       oldhere 256 + dp !\r
-\ get execution token\r
-       ip code@ -> xt\r
-       cell +-> ip\r
-\ execute token\r
-       xt is.primitive?\r
-       IF  \ primitive\r
-               ip xt trace.do.primitive -> ip\r
-       ELSE \ secondary\r
-               trace_level trace_level_max <\r
-               IF\r
-                       ip trace.>r         \ threaded execution\r
-                       1 +-> trace_level\r
-                       xt codebase + -> ip\r
-               ELSE\r
-                       \ treat it as a primitive\r
-                       ip xt trace.do.primitive -> ip\r
-               THEN            \r
-       THEN\r
-\ restore original context\r
-       trace.rcheck\r
-       trace.save.state2\r
-       trace.restore.state1\r
-       oldhere dp !\r
-       ip\r
-;\r
-\r
-: TRACE.NEXT { ip | xt -- ip' }\r
-       trace_level 0>\r
-       IF\r
-               ip trace.do.next -> ip\r
-       THEN\r
-       trace_level 0>\r
-       IF\r
-               ip trace.show.next\r
-       ELSE\r
-               ." Finished." cr\r
-       THEN\r
-       ip\r
-;\r
-\r
-}private\r
-\r
-: TRACE ( i*x <name> -- i*x , setup trace environment )\r
-       ' dup is.primitive?\r
-       IF\r
-               drop ." Sorry. You can't trace a primitive." cr\r
-       ELSE\r
-               1 -> trace_level\r
-               trace_level -> trace_level_max\r
-               trace.0rp\r
-               >code -> trace_ip\r
-               trace_ip trace.show.next\r
-               trace-stack off\r
-               trace.save.state2\r
-       THEN\r
-;\r
-\r
-: s ( -- , step over )\r
-       trace_level -> trace_level_max\r
-       trace_ip trace.next -> trace_ip\r
-;\r
-\r
-: sd ( -- , step down )\r
-       trace_level 1+ -> trace_level_max\r
-       trace_ip trace.next -> trace_ip\r
-;\r
-\r
-: sm ( many -- , step down )\r
-       trace_level -> trace_level_max\r
-       0\r
-       ?DO\r
-               trace_ip trace.next -> trace_ip\r
-       LOOP\r
-;\r
-\r
-: gd { more_levels | stop_level -- }\r
-       depth 1 <\r
-       IF\r
-               ." GD requires a MORE_LEVELS parameter." cr\r
-       ELSE\r
-               trace_level more_levels + -> trace_level_max\r
-               trace_level 1- -> stop_level\r
-               BEGIN\r
-                       trace_ip trace.next -> trace_ip\r
-                       trace_level stop_level > not\r
-               UNTIL\r
-       THEN\r
-;\r
-\r
-: g ( -- , execute until end of word )\r
-       0 gd\r
-;\r
-\r
-: TRACE.HELP ( -- )\r
-       ."   TRACE  ( i*x <name> -- , setup trace for Forth word )" cr\r
-       ."   S      ( -- , step over )" cr\r
-       ."   SM     ( many -- , step over many times )" cr\r
-       ."   SD     ( -- , step down )" cr\r
-       ."   G      ( -- , go to end of word )" cr\r
-       ."   GD     ( n -- , go down N levels from current level," cr\r
-       ."                   stop at end of this level )" cr\r
-;\r
-\r
-privatize\r
-\r
-0 [IF]\r
-variable var1\r
-100 var1 !\r
-: FOO  dup IF 1 + . THEN 77 var1 @ + . ;\r
-: ZOO 29 foo 99 22 + . ;\r
-: ROO 92 >r 1 r@ + . r> . ;\r
-: MOO  c" hello" count type\r
-       ." This is a message." cr\r
-       s" another message" type cr\r
-;\r
-: KOO 7 FOO ." DONE" ;\r
-: TR.DO  4 0 DO i . LOOP ;\r
-: TR.?DO  0 ?DO i . LOOP ;\r
-: TR.LOC1 { aa bb } aa bb + . ;\r
-: TR.LOC2 789 >r 4 5 tr.loc1 r> . ;\r
-[THEN]\r