n2str

Descripción del contenido de la página

Palabra en Forth para convertir números en cadenas de texto.

Etiquetas:

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!)

Descargas

n2str.fs (1.91 KiB)