version 1.4, 1998/12/08 22:03:12
|
version 1.5, 1999/02/03 00:10:25
|
Line 24
|
Line 24
|
\ hold <# #> sign # #s 25jan92py |
\ hold <# #> sign # #s 25jan92py |
|
|
: hold ( char -- ) \ core |
: hold ( char -- ) \ core |
|
\G Used within @code{<#} and @code{#>}. Append the character char |
|
\G to the pictured numeric output string. |
pad cell - -1 chars over +! @ c! ; |
pad cell - -1 chars over +! @ c! ; |
|
|
: <# ( -- ) \ core less-number-sign |
: <# ( -- ) \ core less-number-sign |
|
\G Initialise/clear the pictured numeric output string. |
pad cell - dup ! ; |
pad cell - dup ! ; |
|
|
: #> ( xd -- addr u ) \ core number-sign-greater |
: #> ( xd -- addr u ) \ core number-sign-greater |
|
\G Complete the pictured numeric output string by |
|
\G discarding xd and returning addr u; the address and length |
|
\G of the formatted string. A Standard program may modify characters |
|
\G within the string. |
2drop pad cell - dup @ tuck - ; |
2drop pad cell - dup @ tuck - ; |
|
|
: sign ( n -- ) \ core |
: sign ( n -- ) \ core |
|
\G Used within @code{<#} and @code{#>}. If n (a @var{single} number) |
|
\G is negative, append the display code for a minus sign to the pictured |
|
\G numeric output string. Since the string is built up "backwards" |
|
\G this is usually used immediately prior to @code{#>}, as shown in |
|
\G the examples below. |
0< IF [char] - hold THEN ; |
0< IF [char] - hold THEN ; |
|
|
: # ( ud1 -- ud2 ) \ core number-sign |
: # ( ud1 -- ud2 ) \ core number-sign |
|
\G Used within @code{<#} and @code{#>}. Add the next least-significant |
|
\G digit to the pictured numeric output string. This is achieved by dividing ud1 |
|
\G by the number in @code{base} to leave quotient ud2 and remainder n; n |
|
\G is converted to the appropriate display code (eg ASCII code) and appended |
|
\G to the string. If the number has been fully converted, ud1 will be 0 and |
|
\G @code{#} will append a "0" to the string. |
base @ 2 max ud/mod rot 9 over < |
base @ 2 max ud/mod rot 9 over < |
IF |
IF |
[ char A char 9 - 1- ] Literal + |
[ char A char 9 - 1- ] Literal + |
THEN |
THEN |
[char] 0 + hold ; |
[char] 0 + hold ; |
|
|
: #s ( +d -- 0 0 ) \ core number-sign-s |
: #s ( ud -- 0 0 ) \ core number-sign-s |
|
\G Used within @code{<#} and @code{#>}. Convert all remaining digits |
|
\G using the same algorithm as for @code{#}. @code{#s} will convert |
|
\G at least one digit. Therefore, if ud is 0, @code{#s} will append |
|
\G a "0" to the pictured numeric output string. |
BEGIN |
BEGIN |
# 2dup or 0= |
# 2dup or 0= |
UNTIL ; |
UNTIL ; |
Line 50
|
Line 72
|
\ print numbers 07jun92py |
\ print numbers 07jun92py |
|
|
: d.r ( d n -- ) \ double d-dot-r |
: d.r ( d n -- ) \ double d-dot-r |
|
\G Display d right-aligned in a field n characters wide. If more than |
|
\G n characters are needed to display the number, all digits are displayed. |
|
\G If appropriate, n must include a character for a leading "-". |
>r tuck dabs <# #s rot sign #> |
>r tuck dabs <# #s rot sign #> |
r> over - spaces type ; |
r> over - spaces type ; |
|
|
: ud.r ( ud n -- ) \ gforth u-d-dot-r |
: ud.r ( ud n -- ) \ gforth u-d-dot-r |
|
\G Display ud right-aligned in a field n characters wide. If more than |
|
\G n characters are needed to display the number, all digits are displayed. |
>r <# #s #> r> over - spaces type ; |
>r <# #s #> r> over - spaces type ; |
|
|
: .r ( n1 n2 -- ) \ core-ext dot-r |
: .r ( n1 n2 -- ) \ core-ext dot-r |
|
\G Display n1 right-aligned in a field n2 characters wide. If more than |
|
\G n2 characters are needed to display the number, all digits are displayed. |
|
\G If appropriate, n2 must include a character for a leading "-". |
>r s>d r> d.r ; |
>r s>d r> d.r ; |
|
|
: u.r ( u n -- ) \ core-ext u-dot-r |
: u.r ( u n -- ) \ core-ext u-dot-r |
|
\G Display u right-aligned in a field n characters wide. If more than |
|
\G n characters are needed to display the number, all digits are displayed. |
0 swap ud.r ; |
0 swap ud.r ; |
|
|
: d. ( d -- ) \ double d-dot |
: d. ( d -- ) \ double d-dot |
|
\G Display (the signed double number) d in free-format. followed by a space. |
0 d.r space ; |
0 d.r space ; |
|
|
: ud. ( ud -- ) \ gforth u-d-dot |
: ud. ( ud -- ) \ gforth u-d-dot |
|
\G Display (the signed double number) ud in free-format, followed by a space. |
0 ud.r space ; |
0 ud.r space ; |
|
|
: . ( n -- ) \ core dot |
: . ( n -- ) \ core dot |
|
\G Display (the signed single number) n in free-format, followed by a space. |
s>d d. ; |
s>d d. ; |
|
|
: u. ( u -- ) \ core u-dot |
: u. ( u -- ) \ core u-dot |
|
\G Display (the unsigned single number) u in free-format, followed by a space. |
0 ud. ; |
0 ud. ; |
|
|