n2str
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.
Listado
\ ****************************
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!)