DECIMAL
16 FFBASE HX 2 FFBASE BN 10 FFBASE DM
HX beeinflusst nur das nächste Wort.
Wenn Forth sich an diesem Wort verschluckt,
gibt es eine Fehlermeldung aus und steigt aus.
HX kommt dadurch nicht mehr dazu, die Basiszahl wiederherzustellen.
Dem kann dadurch abgeholfen werden,
dass man das fehlerempfindliche
EVALUATE in ein
CATCH setzt.
Die letzten beiden Zeilen von
FFBASE werden dann:
COUNT ['] EVALUATE CATCH
R> BASE ! THROW ;
Solch eine Sicherheitsmaßnahme heißt natürlich
mit Kanonen auf Spatzen schießen,
sie funktioniert aber ausgezeichnet.
Die sechs Möglichkeiten von Theo
-
HX 10 . [rtn] 16 ok
10 wird als Hexzahl aufgefasst.
-
: DUTZEND HX C . ;
HX sieht C als eine Hexzahl an und compiliert es.
Der Definition kann man es nicht mehr ansehen,
dass HX eine Rolle gespielt hat.
? Was wird BN DUTZEND bewirken?
-
HX SEE FFBASE [rtn] ...
SEE decompiliert FFBASE in hex.
Natürlich nur dann,
wenn die Basiszahl nicht innerhalb SEE explizit manipuliert wird.
-
: .BITS BN U. ; -1 .BITS [rtn] 11...11 ok
.BITS gibt immer binär aus.
Allein in diesem Zusammenhang wird die Veränderung
von BASE auch wirklich compiliert.
Frage: Was wird HX .BITS bewirken?
-
: [.S] .S ; IMMEDIATE BN [.S] [rtn] ...
-
: TEST HX [.S] 0<> ;
HX [.S] gibt während des Compilierens von TEST
den Stackzustand in hex wieder und lässt keinerlei
Spuren davon in TEST zurück.
Das letzte Wort
BN #16 . [rtn] 16 ok
Wie schon gesagt,
kann man in manchen Forthsystemen mit einem
einer Zahl vorangestellten speziellen Zeichen
die Basiszahl außer Kraft setzen
(
# für dezimal,
$ für hexadezimal
und
% für binär).
Nachdem
BN seinen Einfluss geltend gemacht hat,
kommt der Gartenzaun an die Reihe.
Der Gartenzaun hat das letzte Wort ... und gewinnt.