211b
<< <> >>
 
Leo: En blijft Forth zelf wel in de decimale toestand? Hoe komt zo'n HX er dan uit te zien?
 
Theo:
: HX
  HEX                      \ Tijdelijk grondtal
  BL WORD COUNT EVALUATE   \ Actie!
  DECIMAL                  \ Herstel grondtal
; IMMEDIATE
Probeer maar.
 
Leo:
HX 10 . [rtn] 16  ok
10 HX . [rtn] A  ok
Nou, mijn compliment, dat is toveren.
 
Theo: Jubel niet te vroeg. Er zitten een paar zwakheden in. Ten eerste ga ik er vanuit dat het systeem wel op decimaal zal staan, want aan het eind zet ik het gewoon terug(?) op decimaal. Dat is niet zo netjes. We halen er de >Reddingsbrigade bij:
: HX
  BASE @ >R                \ Save grondtal
  HEX                      \ Tijdelijk grondtal
  BL WORD COUNT EVALUATE   \ Actie!
  R> BASE !                \ Herstel grondtal
; IMMEDIATE
Leo: Dit snap ik. Dat redden kan niet op de gewone stack omdat het volgende woord van alles kan zijn. Je weet dus niet wat het met de stack zal doen. En ten tweede?
 
Theo: Ten tweede staat er keihard HEX in, maar ik wil graag een routine die hetzelfde ook met andere grondtallen kan. Dat zou je op kunnen lossen met een Variable of een Value, maar dit lijkt me een uitstekend moment om je nog eens met CREATE en DOES> te confronteren. Bekijk dit eens:
: FFBASE ( tijdelijk-grondtal ccc -- )
  CREATE C, ALIGN IMMEDIATE
  DOES> C@                 ( tempbase )
  BASE @ >R                \ Save grondtal
  BASE !                   \ Tijdelijk grondtal
  BL WORD COUNT EVALUATE   \ Actie!
  R> BASE ! ;              \ Herstel grondtal
DECIMAL
16 FFBASE HX   2 FFBASE BN   10 FFBASE DM
>>