halto
Descripción del contenido de la página
Herramienta escrita en Forth para poner puntos de depuración en un programa.
Esta pequeña herramienta permite poner puntos de depuración en un programa escrito en Forth, para examinar el contenido de la pila. La escribí como un complemento de la que llevaba incorporada el sistema Forth 5mx.
Aparte de una variable, todo el código consta de una sola palabra, lo que no es buena práctica en Forth. Varios años después escribí una versión mejorada, mejor escrita (con palabras cortas de funciones claras) y más versátil.
Los comentarios y los nombres de las palabras del código están en esperanto. En esta lengua «halto» (que se pronuncia con hache aspirada) significa «acción de detenerse».
Código fuente
\ halto
\ Herramimenta para la depuración de errores.
\ Senerarigilo.
\ Debug tool.
\ (C) 2004,2005 Marcos Cruz (programandala.net)
\ Licencia/Permesilo/License:
\ http://programandala.net/license
\ Programa escrito en ANS Forth.
\ Programo verkita en ANS-Fortho.
\ Program written in ANS Forth.
CR .( halto)
VARIABLE haltostakero \ celumas la stakeron esploratan dum la halto
: halto ( n -- )
\ Montras numeron kaj la stakon kaj haltas ghis klavo premitas.
\ 2005.11.09 Klavoj <> anstataw +-.
\ 2005.02.27 Korektita la ordono T.
\ 2005.01.18 Modifita por elektebligo de stakero ekzamenota kaj pliaj ebloj.
\ 2005.01.17 Modifita por ripeto per begin until .
0 haltostakero !
CR CR ." HALTO " .
\ DEBUG \ Forth 5mx
BEGIN
CR ." ( " .S ." -- ) "
." <" haltostakero @ PICK . ." > "
CR ." [?] [b]inary b[y]e [d]ecimal [e]mit [h]ex [l]eave [t]ype [q]uit [<>]"
KEY
CASE
[CHAR] ? OF haltostakero @ PICK CR ? FALSE ENDOF
[CHAR] t OF
haltostakero @ PICK haltostakero @ PICK
CR TYPE FALSE
ENDOF
[CHAR] e OF
haltostakero @ PICK CR EMIT FALSE
ENDOF
[CHAR] y OF BYE ENDOF
[CHAR] l OF TRUE ENDOF
[CHAR] b OF 2 BASE ! FALSE ENDOF
[CHAR] d OF DECIMAL FALSE ENDOF
[CHAR] h OF HEX FALSE ENDOF
[CHAR] q OF QUIT ENDOF
[CHAR] > OF
DEPTH 1- haltostakero @ SWAP <
IF 1 haltostakero +! THEN FALSE
ENDOF
[CHAR] < OF
haltostakero @
IF -1 haltostakero +! THEN FALSE
ENDOF
FALSE SWAP \ ENDCASE demetos la staksupron, la neuzitan klavon; FALSE utilos por UNTIL
ENDCASE
UNTIL
;