Microsoft Small Basic

Program Listing: CJV067
' Program ID
a2r = "1=I;5=V;10=X;50=L;100=C;500=D;1000=M;5000=ↁ;10000=ↂ;"
While "True"
TextWindow.Write("? ")
roman = Text.ConvertToUpperCase(TextWindow.Read())
ToArabic()
EndWhile
Sub ToArabic
' param roman - Roman numerals
arabic = 0
len = Text.GetLength(roman)
o = 1000 ' order
p = 1 ' pointer to roman
While p <= len
ConvertRomanOrder()
If 1 < o Then
arabic = arabic * 10
EndIf
o = o / 10
If o < 0.1 Then
TextWindow.WriteLine("Unexpected symbol in " + roman + ".")
TextWindow.Write(" ")
For i = 1 To p - 1
TextWindow.Write(" ")
EndFor
TextWindow.WriteLine("^")
Goto exit
EndIf
EndWhile
If 1 < o Then
arabic = arabic * o
EndIf
TextWindow.WriteLine(arabic)
exit:
EndSub
Sub ConvertRomanOrder
' param roman - Roman numerals
' param p - pointer to roman
' param o - order
' return arabic
_r = Text.GetSubTextToEnd(roman, p)
If Text.StartsWith(_r, a2r[o] + a2r[10 * o]) Then
arabic = arabic + 9
p = p + 2
ElseIf Text.StartsWith(_r, a2r[o] + a2r[5 * o]) Then
arabic = arabic + 4
p = p + 2
Else
If Text.StartsWith(_r, a2r[5 * o]) Then
arabic = arabic + 5
p = p + 1
_r = Text.GetSubTextToEnd(roman, p)
EndIf
For i = 1 To 3
If Text.StartsWith(_r, a2r[o]) Then
arabic = arabic + 1
p = p + 1
_r = Text.GetSubTextToEnd(roman, p)
Else
i = 4
EndIf
EndFor
EndIf
EndSub