       ͻ
        Lesson 6 Part 080  F-PC 3.5 Tutorial by Jack Brown 
       ͼ

          Ŀ
            Re-definition of Number Display Operators  
          

\ A re-definition of Forths Number Display Operators using
\ our modified output formatting words which will allow us
\ to watch their normally transparent operation by setting
\ S&PAD ON .

\ Convert an unsigned 16 bit number to a string.
: (U.)  ( un -- addr len )
        0   <# #S #>   ;

\ Output as an unsigned single number with trailing space.
: U.    ( un -- )
        (U.)  ( addr len ) TYPE SPACE   ;

\ Output as an unsigned single number right justified in a field
\ w wide.
: U.R   ( un w -- )
        >R   (U.)  ( addr len )       \ save w and convert.
        R> OVER -  ( addr len count ) \ count = # of leading spaces
        SPACES   TYPE   ;

\ Convert a signed 16 bit number to a string.
: (.)   ( n -- addr len )
        DUP ABS 0
        <# #S   ROT SIGN   #>   ;

\ Output as a signed single number with a trailing space.
: .     ( n -- )
        (.)   TYPE SPACE   ;

\ .R    Output as a signed single number right justified.
: .R    ( n w -- )
        >R   (.)  ( addr len )       \ save w and convert
        R> OVER - ( addr len count ) \ count = # of leading spaces
        SPACES   TYPE   ;

\ Convert an unsigned double number to a string.
: (UD.) ( ud -- addr len )
         <# #S #>   ;

\ Output as unsigned double number with a trailing space
: UD.   ( ud -- )
        (UD.)   ( addr len ) TYPE SPACE   ;

\ Output as an unsigned double number right justified in
\ a field w wide.
: UD.R  ( ud w -- )
         >R   (UD.)  ( addr len )
         R> OVER -   ( addr len count )
         SPACES   TYPE  ;

\ Convert a signed double number to a string.
: (D.)  ( dn -- addr len )
        TUCK DABS       ( sign |dn| )
        <# #S   ROT SIGN  #>  ( addr len ) ;

\ Output as a signed double number with a trailing space.
: D.    ( dn -- )
        (D.)  ( addr len ) TYPE SPACE   ;

\ Output as a signed double number right justified
\ in a field w wide.
: D.R   ( dn w -- )
        >R   (D.)  ( addr len )
        R> OVER -  ( addr len count )
        SPACES   TYPE   ;

Now you can try the number display operators and watch see what is
happening as they run.  For example:

HEX  -123 . <enter>
 [3]   FEDD     123       0
7575  00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00
 [3]   FEDD      12       0
7575  00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 33       3
 [3]   FEDD       1       0
7575  00 00 00 00 00 00 00 00   00 00 00 00 00 00 32 33      23
 [3]   FEDD       0       0
7575  00 00 00 00 00 00 00 00   00 00 00 00 00 31 32 33     123
 [2]      0       0
7575  00 00 00 00 00 00 00 00   00 00 00 00 2D 31 32 33    -123
 [2]   7581       4
7575  00 00 00 00 00 00 00 00   00 00 00 00 2D 31 32 33    -123 -123


What is happening above is that every time <# , # , #S , HOLD or #>
is executed we get a stack dump and dump of the area below our new PAD
You can follow along in the definition of  . and (.) to check on how
they work.  Remember that if you want to turn off this display of the
internals temporarily you just store a false flag in the variable S&PAD

S&PAD OFF   \ No display

Ŀ
   Please Move to Lesson 6 Part 090  

