n2str
Descripción del contenido de la página
Palabra en Forth para convertir números en cadenas de texto.
Esta pequeña herramienta convierte un número en una cadena de texto. La escribí (modificando una del sistema kForth) para mi sistema Forth 5mx, que carece de las palabras <#
, #
, #>
y demás que hacen la misma función.
Necesita sbuffer para funcionar.
Código fuente
\ ****************************
CR .( n2str )
\ ****************************
\ Copyright (C) 2001,2005 Marcos Cruz (http://programandala.net)
\ Licencia/License/Permesilo: http://programandala.net/license
\ Programa escrito en ANS Forth.
\ Programo verkita en ANS-Fortho.
\ Program written in ANS Forth.
\ Herramienta para convertir un número en un texto.
\ Ilo por tekstigi nombron.
\ Tool to convert a number into a text.
\ Palabras adaptadas de:
\ Vortoj adaptitaj el:
\ Words adapted from:
\ strings.4th (String utility words for kForth, 1999)
\ ***************************************************************
\ Historial de versiones / Versihistorio / Version history :
\ ***************************************************************
\ 2005.10.18
\ Todas las palabras renombradas en inglés.
\ Chiuj vortoj angle renomitaj.
\ All words renamed into English.
\ 2001
\ Primera versión.
\ Unua versio.
\ First version.
\ ***************************************************************
[undefined] >sbuffer [IF]
\ Se precisa el búfer circular de texto.
\ Necesas la cirkla teksta bufro.
\ Circular string buffer needed.
INCLUDE sbuffer.fs
[THEN]
32 CONSTANT nlen
: n>str ( n -- c-addr1 u1 )
\ Kreas chenon el numero.
\ n = numero
\ c-addr1 u1 = teksta cheno
\ +n = numero ekzaminata, pozitiva kaj restanta el dividoj
\ a = adreso de la cifero kalkulata
\ b = cifero kalkulita
nlen +sbuffer
0 SWAP nlen 1- + C!
sbuffer nlen 2 - + SWAP
DUP >R ABS ( a +n ) ( R: n )
BEGIN
10 /MOD SWAP [CHAR] 0 + \ kalkuli ciferon ( a +n b )
>R OVER R> SWAP C! \ konservi ciferon ( a +n )
SWAP 1- SWAP \ celumi al adreso por venonta cifero
DUP 0=
UNTIL
DROP
R> 0<
IF
[CHAR] - OVER C! 1- \ meti minusan signon
THEN
sbuffer nlen 2 - + OVER - \ kalkuli longon de la cheno
sbuffer+ \ protekti la rezulton
SWAP 1+ SWAP
;
.( n2str ok!)