Microsoft Small Basic

Program Listing: KNQ722-0
'Basic Challenge 1 July 2013. http://smallbasic.com/program/?KNQ722-0
'Browser v1 13/7/2013 - by Rick Murphy (Jibba Jabba)

'Write a program where the user enters 5 numbers and you calculate the sum
'(all added), product (all multiplied) and average.

rows = 4
columns = 3
size = 40
space = 3
leftOffset = 5
topOffset = 50
fontSize = 18

Controls.ButtonClicked = ButtonClicked

gw = size * columns + (2*leftOffset) + (space*2) + 10'?? adjusted for browser
gh = size * rows + topOffset + (space * 3) +15 ' +15 for browser
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.CanResize = 1
GraphicsWindow.Title = "Small Avg - by Jibba Jabba"
GraphicsWindow.Left = 100
GraphicsWindow.Top = 100

btnCap = "1=1;2=2;3=3;4=4;5=5;6=6;7=7;8=8;9=9;10=0;11=+;12=Av"
GraphicsWindow.FontSize = fontSize

For r = 1 To rows
Y = topOffset + (r * (size + space)) - size
For c = 1 To columns
i = i + 1
X = leftOffset + (c * (size + space)) - size
btn[r][c] = Controls.AddButton(btnCap[i], X, Y)
Controls.SetSize(btn[r][c], size, size)
EndFor
EndFor
i = 0 'init i

screen = Controls.AddTextBox(leftOffset, leftOffset)
Controls.SetSize(screen, (size * columns) + leftOffset + (2*space), fontSize*2) '??

Sub ButtonClicked
Sound.PlayClickAndWait()
cap = Controls.GetButtonCaption(Controls.LastClickedButton)

If cap <> "+" And cap <> "Av" And cap <> "C" Then
If Controls.GetButtonCaption(btn[4][3]) = "C" Then 'if C is not clicked before proceeding
Controls.SetButtonCaption(btn[4][3], "Av")
EndIf

StoreDigits()
accumTxt = Text.Append(accumTxt, digit[i])
writeScreen = accumTxt

ElseIf cap = "+" And Array.GetItemCount(digit) = 1 Then
NumerateSingleDigit()
InitDigit()
accumTxt = ""
writeScreen = "+"

ElseIf cap = "+" And Array.GetItemCount(digit) > 1 Then
NumerateMultiDigit()
InitDigit()
accumTxt = ""
writeScreen = "+"

ElseIf cap = "Av" Then
Controls.SetButtonCaption(btn[4][3], "C")

If Array.GetItemCount(digit) = 1 Then
NumerateSingleDigit()
ElseIf Array.GetItemCount(digit) > 1 Then
NumerateMultiDigit()
EndIf

For i = 1 To Array.GetItemCount(num)
numer = numer + num[i]
EndFor
average = numer / Array.GetItemCount(num)

accumTxt = ""
writeScreen = average

'Debug() ' used in Desktop version
num = ""
numer = ""
j = ""
InitDigit()
ElseIf cap = "C" Then
Controls.SetButtonCaption(btn[4][3], "Av")
writeScreen = ""
EndIf
Controls.SetTextBoxText(screen, writeScreen)
EndSub

Sub Debug
TextWindow.Left = GraphicsWindow.Left + gw + 50
TextWindow.Top = GraphicsWindow.Top
TextWindow.Title = "Small Average - Calc History"
TextWindow.WriteLine("num " + num)
TextWindow.WriteLine("av " + average)
TextWindow.WriteLine("")
EndSub

Sub StoreDigits
i = i + 1
digit[i] = cap
EndSub

Sub InitDigit
i = 0
digit = ""
EndSub

Sub NumerateSingleDigit
j = j + 1
num[j] = digit[i]
EndSub

Sub NumerateMultiDigit
newDigit[1] = digit[1] ' this could be replaced newD = TxtApp(newD, digit[i]) ?
For i = 1 To Array.GetItemCount(digit)-1
newDigit[i+1] = Text.Append(newDigit[i], digit[i+1])
EndFor
j = j + 1
num[j] = newDigit[i]
EndSub