Code: Alles auswählen
Procedure.s RomDec(dec.l)
Protected i.b, j.l, max.b, ind.w, num.w, chr.w, rom.s
Restore RomNum : Read.b max
For i = 1 To max
Read.w ind : Read.w num : Read.w chr
For j = 1 To Round((dec / num), #PB_Round_Down)
rom + Chr(chr)
Next : dec % num
Next
ProcedureReturn rom
EndProcedure
Procedure.l DecRom(rom.s)
Protected i.b, j.w, max.b, ind.w, num.w, chr.w, dec.l
Restore RomNum : Read.b max
For i = 1 To max
Read.w ind : Read.w num : Read.w chr
For j = 0 To Len(rom)-1
If PeekC(@rom+j) = chr : PokeC(@rom+j, ind)
If j And PeekC(@rom+(j-1)) < ind : dec - num
Else : dec + num : EndIf
EndIf
Next
Next
ProcedureReturn dec
EndProcedure
DataSection
RomNum:
Data.b 7 ; Total
Data.w 7, 1000, 'M'
Data.w 6, 500, 'D'
Data.w 5, 100, 'C'
Data.w 4, 50, 'L'
Data.w 3, 10, 'X'
Data.w 2, 5, 'V'
Data.w 1, 1, 'I'
EndDataSection
r.s = RomDec(1949)
d.l = DecRom(r)
Debug d
Debug r