home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l6p080 < prev    next >
Text File  |  1990-07-15  |  4KB  |  104 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 6 Part 080  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.           ┌─────────────────────────────────────────────┐
  6.           │  Re-definition of Number Display Operators  │
  7.           └─────────────────────────────────────────────┘
  8.  
  9. \ A re-definition of Forths Number Display Operators using
  10. \ our modified output formatting words which will allow us
  11. \ to watch their normally transparent operation by setting
  12. \ S&PAD ON .
  13.  
  14. \ Convert an unsigned 16 bit number to a string.
  15. : (U.)  ( un -- addr len )
  16.         0   <# #S #>   ;
  17.  
  18. \ Output as an unsigned single number with trailing space.
  19. : U.    ( un -- )
  20.         (U.)  ( addr len ) TYPE SPACE   ;
  21.  
  22. \ Output as an unsigned single number right justified in a field
  23. \ w wide.
  24. : U.R   ( un w -- )
  25.         >R   (U.)  ( addr len )       \ save w and convert.
  26.         R> OVER -  ( addr len count ) \ count = # of leading spaces
  27.         SPACES   TYPE   ;
  28.  
  29. \ Convert a signed 16 bit number to a string.
  30. : (.)   ( n -- addr len )
  31.         DUP ABS 0
  32.         <# #S   ROT SIGN   #>   ;
  33.  
  34. \ Output as a signed single number with a trailing space.
  35. : .     ( n -- )
  36.         (.)   TYPE SPACE   ;
  37.  
  38. \ .R    Output as a signed single number right justified.
  39. : .R    ( n w -- )
  40.         >R   (.)  ( addr len )       \ save w and convert
  41.         R> OVER - ( addr len count ) \ count = # of leading spaces
  42.         SPACES   TYPE   ;
  43.  
  44. \ Convert an unsigned double number to a string.
  45. : (UD.) ( ud -- addr len )
  46.          <# #S #>   ;
  47.  
  48. \ Output as unsigned double number with a trailing space
  49. : UD.   ( ud -- )
  50.         (UD.)   ( addr len ) TYPE SPACE   ;
  51.  
  52. \ Output as an unsigned double number right justified in
  53. \ a field w wide.
  54. : UD.R  ( ud w -- )
  55.          >R   (UD.)  ( addr len )
  56.          R> OVER -   ( addr len count )
  57.          SPACES   TYPE  ;
  58.  
  59. \ Convert a signed double number to a string.
  60. : (D.)  ( dn -- addr len )
  61.         TUCK DABS       ( sign |dn| )
  62.         <# #S   ROT SIGN  #>  ( addr len ) ;
  63.  
  64. \ Output as a signed double number with a trailing space.
  65. : D.    ( dn -- )
  66.         (D.)  ( addr len ) TYPE SPACE   ;
  67.  
  68. \ Output as a signed double number right justified
  69. \ in a field w wide.
  70. : D.R   ( dn w -- )
  71.         >R   (D.)  ( addr len )
  72.         R> OVER -  ( addr len count )
  73.         SPACES   TYPE   ;
  74.  
  75. Now you can try the number display operators and watch see what is
  76. happening as they run.  For example:
  77.  
  78. HEX  -123 . <enter>
  79.  [3]   FEDD     123       0
  80. 7575  00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00
  81.  [3]   FEDD      12       0
  82. 7575  00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 33       3
  83.  [3]   FEDD       1       0
  84. 7575  00 00 00 00 00 00 00 00   00 00 00 00 00 00 32 33      23
  85.  [3]   FEDD       0       0
  86. 7575  00 00 00 00 00 00 00 00   00 00 00 00 00 31 32 33     123
  87.  [2]      0       0
  88. 7575  00 00 00 00 00 00 00 00   00 00 00 00 2D 31 32 33    -123
  89.  [2]   7581       4
  90. 7575  00 00 00 00 00 00 00 00   00 00 00 00 2D 31 32 33    -123 -123
  91.  
  92.  
  93. What is happening above is that every time <# , # , #S , HOLD or #>
  94. is executed we get a stack dump and dump of the area below our new PAD
  95. You can follow along in the definition of  . and (.) to check on how
  96. they work.  Remember that if you want to turn off this display of the
  97. internals temporarily you just store a false flag in the variable S&PAD
  98.  
  99. S&PAD OFF   \ No display
  100.  
  101. ┌─────────────────────────────────────┐
  102. │   Please Move to Lesson 6 Part 090  │
  103. └─────────────────────────────────────┘
  104.