' Alarm | Ring
Sub Alarm_Ring
iAHour = Controls.GetTextBoxText(oHour)
iAMin = Controls.GetTextBoxText(oMin)
If (iHour = iAHour) And (iMin = iAMin) Then
Sound.PlayChimesAndWait()
EndIf
EndSub
' Edo | Convert JST hour to Edo radians
' in: rHour - [0..24) [JST hour]
' in: rAke6 - Edo ake (morning) 6 [JST hour]
' in: rKure6 - Edo kure (evening) 6 [JST hour]
' work: rAkatsuki9 - Edo akatsuki (before dawn) 9 (midnight) [JST hour]
' work: rHiru9 - Edo hiru (noon) 9 [JST hour]
' out: rEdoRadian - Edo clock radian for given JST hour
Sub Edo_HourToRadian
rHiru9 = (rAke6 + rKure6) / 2
rAkatsuki9 = rHiru9 + 12
If rAkatsuki9 >=24 Then
rAkatsuki9 = rAkatsuki9 - 24
EndIf
rYoruHanToki = (rAke6 + 24 - rKure6) / 12 ' Yoru (night) han (half) toki = about 1 hour
rHiruHanToki = (rKure6 - rAke6) / 12 ' Hiru (day) han (half) toki = about 1 hour
If rHour < rAke6 Then
rEdoHour = (rHour - rAkatsuki9 + 24) / rYoruHanToki
ElseIf rHour = rAke6 Then
rEdoHour = 6
ElseIf rHour > rAke6 And rHour < rKure6 Then
rEdoHour = 6 + (rHour - rAke6) / rHiruHanToki
ElseIf rHour = rKure6 Then
rEdoHour = 18
ElseIf rHour > rKure6 Then
rEdoHour = 18 + (rHour - rKure6) / rYoruHanToki
EndIf
rEdoRadian = (rEdoHour - 1) * 2 * 3.14159 / 24
EndSub
' Analog | Draw hour numerals
' in: rAke6, rKure6 - ake 6 and kure 6 [JST hour]
' in: iHX, iHY - font size for hour numerals
Sub Analog_DrawHourNumerals
GraphicsWindow.BrushColor = sFGColor
GraphicsWindow.FontSize = iHY
For iHour = 0 To 22 Step 2
If iHour > 9 Then
idX = - iHX
Else
idX = - iHX / 2
EndIf
rHour = iHour
Edo_HourToRadian()
iX = iXC - Math.Round(iR * 1.1 * Math.Sin(rEdoRadian) - idX)
iY = iYC + Math.Round(iR * 1.1 * Math.Cos(rEdoRadian) - iHY / 2)
GraphicsWindow.DrawText(iX, iY, iHour)
EndFor
EndSub
' Analog | Initialization
Sub Analog_Init
' time table initialization
sCity[9] = "Tokyo"
rDelta[9] = 9
iCities = 24
' selected city
iCity = 9
GraphicsWindow.BrushColor = sFGColor
If rDelta[iCity] > 0 Then
sSign = "+"
Else
sSign = ""
EndIf
GraphicsWindow.DrawText(iAX * 3 + iTX0, iAY * 7, sCity[iCity] + " (" + sSign + rDelta[iCity] + ")")
' show clock face
iR = 100 ' radius for analog clock face
iXC = 50 + iR ' center of analog clock
iYC = 40 + iR
uDialPlate = uFolder + "EdoDialPlate.png"
GraphicsWindow.DrawImage(uDialPlate, iXC - iR, iYC - iR)
' add hour hand as shape
uHour = uFolder + "EdoHourHand.png"
oHour = Shapes.AddImage(uHour)
Shapes.Move(oHour, iXC - iR, iYC - iR)
EndSub
' Analog | Rotate hour hand
' in: iHour, iMin, iSec - current hour, minute, second [JST]
Sub Analog_RotateHourHand
rHour = iHour + iMin / 60 + iSec / 3600
Edo_HourToRadian()
rEdoDegree = Math.GetDegrees(rEdoRadian)
rDegree = rEdoDegree + 12 * 360 / 24
Shapes.Rotate(oHour, rDegree)
EndSub
' Clock | Initialization
Sub Clock_Init
sBGColor = "Sienna" ' background color
sFGColor = "White" ' foreground color
sHourHandColor = "DarkGoldenrod" ' hour hand color
sHourHandFrame = "Goldenrod" ' hour hand frame color
Timer.Interval = 1000
Timer.Tick = Clock_OnTick
bTick = "False"
iDaySec = 24 * 60 * 60
iHourSec = 60 * 60
uFolder = "http://homepage2.nifty.com/nobukit/smallbasic.files/"
uWood = uFolder + "Wood.png"
GraphicsWindow.DrawImage(uWood, 0, 0)
EndSub