Diff for /gforth/debug.fs between versions 1.8 and 1.10

version 1.8, 1997/07/06 14:25:14 version 1.10, 1999/02/24 11:05:16
Line 1 Line 1
 \ DEBUG.FS     Debugger                                12jun93jaw  \ DEBUG.FS     Debugger                                12jun93jaw
   
 \ Copyright (C) 1995 Free Software Foundation, Inc.  \ Copyright (C) 1995,1996,1997 Free Software Foundation, Inc.
   
 \ This file is part of Gforth.  \ This file is part of Gforth.
   
Line 22  decimal Line 22  decimal
   
 VARIABLE dbg-ip     \ istruction pointer for debugger  VARIABLE dbg-ip     \ istruction pointer for debugger
   
 \ Formated debugger words                               12jun93jaw  
   
 false [IF]  
   
 Color: Men#  
 <A red >b yellow >f bold A> Men# CT!  
   
 CREATE D-LineIP 80 cells allot  
 CREATE D-XPos   300 chars allot align  
 CREATE D-LineA  80 cells allot  
 VARIABLE ^LineA  
   
 VARIABLE D-Lines  
 VARIABLE D-Line  
 VARIABLE D-MaxLines 10 D-MaxLines !  
 VARIABLE D-Bugline  
   
 : WatcherInit  
         D-MaxLines @ 3 + YPos ! 0 D-Line ! ;  
   
 : (lines)  
         1 cells ^LineA +!  
         O-PNT@ ^LineA @ ! ;  
   
 VARIABLE Body  
   
 : ScanWord ( body -- )  
         dup body !  
         c-init  
         ScanMode c-pass !  
         C-Formated on   0 Level !  
         C-ClearLine on  
         Colors on  
         0 XPos ! 0 YPos !  
         O-INIT  
         dup MakePass  
         DisplayMode c-pass !  
         c-stop off  
         D-LineIP 80 cells erase  
         0 D-Lines ! dup D-LineIP !  
         O-PNT@ D-LineA ! D-LineA ^LineA !  
         ['] (lines) IS nlcount  
         XPos @ D-XPos c!  
         BEGIN   analyse  
                 D-Lines @ YPos @ <>  
                 IF      YPos @ D-Lines !  
                         dup YPos @ cells D-LineIP + !  
                 THEN  
                 XPos @ over Body @ - 0 1 cells um/mod nip chars  
                 D-XPos + c!  
                 C-Stop @  
         UNTIL drop  
         O-PNT@ YPos @ 1+ cells D-LineA + !  
         -1 YPos @ 1+ cells D-LineIP + !  
         O-DEINIT  
         C-Formated off  
         0 D-Line !  
         ['] noop IS nlcount ;  
   
 : SearchLine ( addr -- n )  
         D-LineIP D-Lines @ 0  
         ?DO     dup @ 2 pick U> IF 2drop I 1- UNLOOP EXIT THEN  
                 cell+  
         LOOP    2drop 0 ;  
   
 : Display ( n -- )  
         dup cells D-LineA + @ O-Buffer +  
         swap D-MaxLines @ + D-Lines @ min 1+  
              cells D-LineA + @ O-Buffer +  
         over - type ;  
   
 \ [IFDEF] Green Colors on [THEN]  
 \        dup D-TableL + C@ dup Level ! dup XPos ! spaces 0 YPos !  
 \        D-LineIP + @ C-Stop off  
 \        BEGIN  
 \        [IFDEF] Green dbg-ip @ over =  
 \                IF hig# C-Highlight ! ELSE C-Highlight off THEN  
 \        [THEN]  
 \                Analyse  
 \                C-Stop @ YPos @ D-MaxLines @ u>= or  
 \        UNTIL   drop ;  
   
 : TopLine  
         0 0 at-xy  
         Men# CT@ attr!  
         ." OSB-DEBUG (C) 1993 by Jens A. Wilke" cr cr  
         \ one step beyond  
         0 CT@ attr! ;  
   
 : BottomLine  
         0 D-MaxLines @ 3 + at-xy  
         Men# CT@ attr!  
         ." U-nnest D-one N-est A-bort" cr  
         0 CT@ attr! ;  
   
 VARIABLE LastIP  
   
 : (supress)  
         YPos @ D-MaxLines @ U>=  
         IF c-output off THEN ;  
   
 : DispIP  
         ['] (supress) IS nlcount  
         dup SearchLine D-Line @ - dup YPos ! 2 +  
         over Body @ - 0 1 cells um/mod nip chars D-XPos + c@  
         swap AT-XY  
         Analyse drop  
         ['] noop IS nlcount  
         c-output on ;  
   
 : Watcher ( -- )  
         TopLine  
         dbg-ip @ SearchLine dup D-Line @ dup D-MaxLines @ +  
         within  
         IF      drop D-Line @ Display  
         ELSE    D-MaxLines @ 2/ - 0 max dup D-Line !  
                 Display  
         THEN  
         C-Formated off Colors on  
 \        LastIP @ ?DUP IF DispIP THEN  
         Hig# C-Highlight !  
         dbg-ip @ DispIP dbg-ip @ LastIP !  
         C-Formated on C-Highlight off  
         BottomLine ;  
   
   
 ' noop ALIAS \w immediate  
   
 \ end formated debugger words  
   
 [ELSE]  
 \ ' \ alias \w immediate  
   
 : scanword ( body -- )  : scanword ( body -- )
         c-init C-Output off          c-init C-Output off
         ScanMode c-pass !          ScanMode c-pass !
Line 164  VARIABLE LastIP Line 31  VARIABLE LastIP
         DisplayMode c-pass !          DisplayMode c-pass !
         MakePass          MakePass
         C-Output on ;          C-Output on ;
 [THEN]  
   
 : .n    0 <# # # # # #S #> ctype bl cemit ;  : .n    0 <# # # # # #S #> ctype bl cemit ;
   
Line 174  VARIABLE LastIP Line 40  VARIABLE LastIP
 : NoFine        XPos off YPos off  : NoFine        XPos off YPos off
                 NLFlag off Level off                  NLFlag off Level off
                 C-Formated off                  C-Formated off
 [ [IFDEF] Colors ] Colors off [ [THEN] ]  
                 ;                  ;
   
 : disp-step  : disp-step
         DisplayMode c-pass !            \ change to displaymode          DisplayMode c-pass !            \ change to displaymode
 \       Branches Off                    \ don't display  
 \                                       \ BEGIN and THEN  
         cr          cr
 \      YPos @ 1+ D-BugLine !  
 \ w      Watcher  
         c-stop off          c-stop off
 \ w     0 D-BugLine @ at-xy  
         Base @ hex dbg-ip @ 8 u.r space dbg-ip @ @ 8 u.r space          Base @ hex dbg-ip @ 8 u.r space dbg-ip @ @ 8 u.r space
         Base !          Base !
         NoFine 10 XPos !          NoFine 10 XPos !
 \ w      D-Bugline @ YPos !  
         dbg-ip @ DisplayMode c-pass ! Analyse drop          dbg-ip @ DisplayMode c-pass ! Analyse drop
         25 XPos @ - 0 max spaces ." -> " ;          25 XPos @ - 0 max spaces ." -> " ;
   
Line 223  CREATE DT 0 , 0 , Line 82  CREATE DT 0 , 0 ,
 VARIABLE Body  VARIABLE Body
   
 : NestXT        ( xt -- true | body false )  : NestXT        ( xt -- true | body false )
                   \ special deal for create does> words
                   \ leaves body address on the stack
                   dup >does-code IF dup >body swap THEN
   
                 DebugMode c-pass ! C-Output off                  DebugMode c-pass ! C-Output off
                 xt-see C-Output on                  xt-see C-Output on
                 c-pass @ DebugMode = dup                  c-pass @ DebugMode = dup
Line 232  VARIABLE Body Line 95  VARIABLE Body
 VARIABLE Nesting  VARIABLE Nesting
   
 : Leave-D  : Leave-D
 [ [IFDEF] Colors ] Colors on [ [THEN] ]  
                 C-Formated on                  C-Formated on
                 C-Output on ;                  C-Output on ;
   
Line 264  VARIABLE Unnest Line 126  VARIABLE Unnest
                 cr ." Scanning code..." cr C-Formated on                  cr ." Scanning code..." cr C-Formated on
                 dup scanword dbg-ip !                  dup scanword dbg-ip !
                 cr ." Nesting debugger ready!" cr                  cr ." Nesting debugger ready!" cr
                 \ WatcherInit 0 CT@ attr! page                  BEGIN   d.s disp-step D-Key
                 BEGIN   disp-step D-Key  
                 WHILE   C-Stop @ 0=                  WHILE   C-Stop @ 0=
                 WHILE   0 get-next set-bp                  WHILE   0 get-next set-bp
                         dbg-ip @ jump                          dbg-ip @ jump
                         [ here DebugLoop ! ]                          [ here DebugLoop ! ]
                         restore-bp                          restore-bp
                         d.s  
                 REPEAT                  REPEAT
                 Nesting @ 0= IF EXIT THEN                  Nesting @ 0= IF EXIT THEN
                 -1 Nesting +! r>                  -1 Nesting +! r>

Removed from v.1.8  
changed lines
  Added in v.1.10


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