Microsoft Small Basic

Program Listing: FHH347
' Binary to (hexa)decimal converter and back 2014-04-13 WhTurner
Hx="0123456789ABCDEF"
GH=300
GW=600
GraphicsWindow.Height=GH
GraphicsWindow.Width=GW
Ybut=125
GraphicsWindow.DrawLine(0,100,GW,100)
GraphicsWindow.DrawLine(0,180,GW,180)
GraphicsWindow.FontSize=20
GraphicsWindow.DrawText(20,20,"Number conversion")
GraphicsWindow.FontSize=12
GraphicsWindow.DrawText(350,20,"Choose kind of input ")

For i=0 To 15
b[i]=Controls.AddButton(0,45,Ybut) '1:15
Controls.HideControl(b[i])
Bin[i]=0
EndFor

ButBin=Controls.AddButton("Binair",305,50) '16
ButDec=Controls.AddButton("Decimal",400,50) '17
ButHex=Controls.AddButton("Hexadecimal",500,50) '18
ButBack=Controls.AddButton("<--",430,130) '20
Controls.HideControl(ButBack)
dec=0
for i=0 to 3
Hex[i]=0
endfor

GraphicsWindow.DrawText(310,220,"Decimal representation")
GraphicsWindow.DrawText(310,250,"Hexadecimal representation")
GraphicsWindow.DrawText(10,220,"Binary representation")
Reset()

Controls.ButtonClicked=klik
'========= SUBROUTINES : klik; BinInp; DecInp; HexInp; Reset
Sub klik
but= Controls.LastClickedButton
If but="Button17" Then '' Binair
choice=1
BinInp()
ElseIf but="Button18" then '' Decimal
choice=2
DecInp()
ElseIf but="Button19" then '' Hexadecimal
choice=3
HexInp()
Else
If choice=1 then
bnum= Text.GetSubTextToEnd(but,7)-1
dig=Controls.GetButtonCaption(b[bnum])
hh=Math.Floor(bnum/4)
hexp=Math.Remainder(bnum,4)
If dig=0 Then
Controls.SetButtonCaption(b[bnum],1)
dec=dec+math.Power(2,bnum)
Hex[hh]=Hex[hh]+Math.Power(2,hexp)
Bin[bnum]=1
Else
Controls.SetButtonCaption(b[bnum],0)
dec=dec-math.Power(2,bnum)
Hex[hh]=Hex[hh]-Math.Power(2,hexp)
Bin[bnum]=0
EndIf
ElseIf choice=2 then
bnum=16-Text.GetSubTextToEnd(but,7)
If bnum=-4 then
dec=Math.Floor(dec/10)
Else
dec=dec*10+bnum
GraphicsWindow.FontSize=20
GraphicsWindow.BrushColor="Red"
If dec>65535 Then
dec="Error"
Else
decf="x "+dec
endif
endif
dig1=dec
For i=0 to 15 step 1
dig2=Math.Floor(dig1/2)
If 2*dig2=dig1 then
Bin[i]=0
Else
Bin[i]=1
endif
dig1=dig2
endfor
for i=0 to 3
Hex[i]=0
For j=3 to 0 step -1
Hex[i]=2*Hex[i]+Bin[4*i+j]
endfor
endfor
elseif choice=3 then
bnum=16-Text.GetSubTextToEnd(but,7)
If bnum=-4 then
dec=Math.Floor(dec/16)
Else
dec=dec*16+bnum
GraphicsWindow.FontSize=20
GraphicsWindow.BrushColor="Red"
If dec>65535 Then
dec="Error"
Else
decf="x "+dec
endif
endif
dig1=dec
For i=0 to 15 step 1
dig2=Math.Floor(dig1/2)
If 2*dig2=dig1 then
Bin[i]=0
Else
Bin[i]=1
endif
dig1=dig2
endfor
for i=0 to 3
Hex[i]=0
For j=3 to 0 step -1
Hex[i]=2*Hex[i]+Bin[4*i+j]
endfor
endfor
EndIf
EndIf
'==== output section ============
GraphicsWindow.BrushColor=col2
GraphicsWindow.FillRectangle(510,220,90,20)
GraphicsWindow.BrushColor=col3
GraphicsWindow.FillRectangle(510,250,90,20)
GraphicsWindow.BrushColor=col1
GraphicsWindow.FillRectangle(50,250,180,20)
GraphicsWindow.FontSize=20
GraphicsWindow.BrushColor="Red"
decf="x "+dec
GraphicsWindow.DrawText(520,220,Text.GetSubTextToEnd(decf,Text.GetLength(decf)-5))
For i=0 To 3
HexDig=Text.GetSubText(Hx,Hex[i]+1,1)
GraphicsWindow.DrawText(580-20*i,250,HexDig)
EndFor
GraphicsWindow.FontSize=12
For i=0 To 15
GraphicsWindow.DrawText(50+10*(i+Math.Floor(i/8)),250,Bin[15-i])
EndFor
EndSub

Sub BinInp
Reset()
GraphicsWindow.FillTriangle(330,70,340,98,320,98)
col1="Yellow"
For i=0 To 15
Controls.Move(b[i],425-25*i-25*Math.Floor(i/8),Ybut)
Controls.SetButtonCaption(b[i],0)
Controls.ShowControl(b[i])
EndFor
Controls.HideControl(ButBack)
EndSub

Sub DecInp
Reset()
col2="Yellow"
GraphicsWindow.FillTriangle(430,70,440,98,420,98)
For i=0 To 5
Controls.HideControl(b[i])
EndFor
For i=6 To 15
Controls.ShowControl(b[i])
Controls.SetButtonCaption(b[i],15-i)
Controls.Move(b[i],425-25*i,Ybut)
EndFor
GraphicsWindow.DrawText(280,80,"Enter decimal value")
GraphicsWindow.DrawText(450,80,"(max 65535)")
Controls.ShowControl(ButBack)
EndSub

Sub HexInp
Reset()
col3="Yellow"
GraphicsWindow.FillTriangle(540,70,550,98,530,98)
For i=0 To 15
Controls.Move(b[i],425-25*i-25*Math.Floor(i/8),Ybut)
Controls.ShowControl(b[i])
Controls.SetButtonCaption(b[i],Text.GetSubText(Hx,16-i,1))
EndFor
GraphicsWindow.DrawText(330,80,"Enter hex value")
GraphicsWindow.DrawText(450,80,"(max FFFF)")
Controls.ShowControl(ButBack)
Controls.Move(ButBack,530,130)
EndSub

Sub Reset
GraphicsWindow.BrushColor="White"
GraphicsWindow.FillRectangle(280,69,590,30)
GraphicsWindow.FillRectangle(510,220,150,20)
GraphicsWindow.FillRectangle(510,250,550,20)
GraphicsWindow.FillRectangle(50,250,200,20)
GraphicsWindow.BrushColor="Red"
GraphicsWindow.FontSize=20
GraphicsWindow.DrawText(550,220,0)
GraphicsWindow.DrawText(520,250,"0 0 0 0")
GraphicsWindow.FontSize=13
For i=0 to 15
GraphicsWindow.DrawText(50+10*(i+Math.Floor(i/8)),250,0)
Bin[i]=0
endfor
Hex=""
dec=0
col1="White"
col2="White"
col3="White"
EndSub