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

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 6 Part 090  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.             ┌───────────────────────────────────┐
  6.             │  Some Number Formatting Examples. │
  7.             └───────────────────────────────────┘
  8.  
  9. \ Print single number as four digit hex and preserve system base
  10. : H.     BASE @ >R 16 BASE !
  11.          0 <# # # # # #>
  12.          R> BASE !  TYPE SPACE ;
  13. Example:
  14. 1234 H. <enter> 04D2  ok
  15. 5555 H. <enter> 15B3  ok
  16. 1024 H. <enter> 0400  ok
  17.  
  18. \ Print 16-bit number as binary saving preserving current BASE.
  19. : B.     BASE @ >R  2 BASE !
  20.          0 <#  # # # #  # # # #  # # # #  # # # #  #>
  21.          R> BASE !  TYPE SPACE ;
  22. Example:
  23. 1234 B. <enter> 0000010011010010  ok
  24. 5555 B. <enter> 0001010110110011  ok
  25. 1024 B. <enter> 0000010000000000  ok
  26.  
  27. \ Print double number as dollars and cents with trailing sign.
  28. : $.   ( dn   -- )
  29.          TUCK DABS           \ Save sign take absolute value.
  30.          <#                  \ Initialize for conversion.
  31.          ROT   0<            \ Get sign and check it
  32.          IF   ASCII - HOLD   \ Put trailing sign in
  33.          ELSE ASCII + HOLD   \ output string.
  34.          THEN
  35.          # #                 \ Convert cents.
  36.          ASCII . HOLD        \ Put decimal point in output
  37.          #S                  \ Convert dollars
  38.          ASCII $ HOLD        \ Put dollar sign in output string.
  39.          #>                  \ end conversion, point to output string.
  40.          TYPE SPACE  ;       \ Display string followed by space.
  41. Example:
  42.   1234. $. <enter> $12.34+  ok
  43.  -1234. $. <enter> $12.34-  ok
  44.  555.55 $. <enter> $555.55+  ok
  45. -555.55 $. <enter> $555.55-  ok
  46.  
  47. This is a timely application of number formatting.  F-PC has a word that
  48. performs the same function as SHOWTIME below but it is called .TIME and
  49. is arrived at differently.  You might like to VIEW  .TIME and compare it
  50. with the definition of SHOWTIME below. They should both give exactly the
  51. same answers.
  52.  
  53. \ Get DOS time in hundredths of a second as a double number dn.
  54. : HSECONDS ( -- dn )
  55.        GETTIME        \ MSDOS format, four bytes,  HHMMSShh
  56.        T>B       ;    \ dn= hundredth of seconds
  57.  
  58. \ Switch to base six
  59. :  SEX  ( -- )
  60.         6 BASE !   ;
  61.  
  62. \ Format seconds  or minutes.
  63. : :##   ( dn -- dn' )
  64.         #  ( base 10 )      \ convert the first digit base 10
  65.         SEX   # ( base 6 )  \ convert the second digit base 6
  66.         DECIMAL   ASCII :  HOLD  ;
  67.  
  68. \ Format hundredths of seconds.
  69. : .##   ( dn -- dn' )
  70.         # # ASCII . HOLD ;
  71.  
  72. \ Display current time as  HH:MM:SS.hh
  73. : SHOWTIME  ( -- )
  74.       HSECONDS   <#  .## :##   :##  #S  #>  TYPE  SPACE  ;
  75. Example:
  76. SHOWTIME <enter> 21:11:46.23  ok   \ This is our version
  77.    .TIME <enter> 21:11:48.81 ok    \ This is F-PC's version.
  78.  
  79. ╓──────────────╖
  80. ║ Problem 6.10 ║
  81. ╙──────────────╜
  82. a) Redefine D. UD. D.R and UD.R so that 1234567. D. gives 1,234,567
  83.    Make sure the you words work for both large and small numbers!
  84. b) Repeat (a) so that, for example:  1234567. D. gives 1 234 567.
  85.    Note the trailing decimal point.
  86.  
  87. ╓──────────────╖
  88. ║ Problem 6.11 ║
  89. ╙──────────────╜
  90. Write B.R  H.R  and O.R   that take a number n  and a field width  w
  91. and then display  Binary, Hex, or Octal right justified in a field w
  92. wide while preserving the current system base.
  93.  
  94. ╓───────────────╖
  95. ║ Problem 6.12  ║
  96. ╙───────────────╜
  97. Write the word D.R$ that will display a double number dn as dollars and
  98. cents right justified in a field w wide as shown in the example below.
  99. Make sure you count the $ , and . when right justifying the output
  100. string.   D.R$ ( dn w -- )
  101.  
  102. 10234.55  12 D.R$ <enter>   $10,234.55
  103.  
  104. ╓───────────────╖
  105. ║ Problem 6.13  ║
  106. ╙───────────────╜
  107. Modify SHOWTIME so that the Hundredth's of a second are not shown and so
  108. that a 12 hour clock is used with AM or PM trailing as appropriate.
  109. Example:  21:11:48.81  should display as  9:11:49 PM
  110.  
  111. ┌────────────────────────────────────┐
  112. │  Please Move to Lesson 6 Part 100  │
  113. └────────────────────────────────────┘
  114.