Microsoft Small Basic

Program Listing: BNJ520
a2r = "1=I;5=V;10=X;50=L;100=C;500=D;1000=M;"
While "True"
TextWindow.Write("? ")
arabic = TextWindow.Read()
ToRoman()
EndWhile
Sub ToRoman
If (arabic < 1) Or (3999 < arabic) Or (Math.Floor(arabic) < arabic) Then
TextWindow.WriteLine(arabic + " is too small, too large, fraction or not number.")
Else
roman = ""
a = arabic
len = Text.GetLength(a)
o = 1
While a <> ""
d = Text.GetSubTextToEnd(a, len)
a = Text.GetSubText(a, 1, len - 1)
len = len - 1
ConvertDigit()
o = o * 10
EndWhile
TextWindow.WriteLine(roman)
EndIf
EndSub
Sub ConvertDigit
' param d - arabic digit to convert
' param o - order
' return roman
_d = d
If _d = 9 Then
roman = a2r[10 * o] + roman
_d = 1
ElseIf _d = 4 Then
roman = a2r[5 * o] + roman
_d = 1
EndIf
For i = 1 To Math.Remainder(_d, 5)
roman = a2r[o] + roman
EndFor
If 5 <= _d Then
roman = a2r[5 * o] + roman
EndIf
EndSub