Microsoft Small Basic

Program Listing:
Embed this in your website
Window()

While 1 = 1
  StartClock()
  Program.Delay(1000)
EndWhile

Sub Window
  GraphicsWindow.BackgroundColor = "Black"
  Radius = 75

  x = 1

  GraphicsWindow.CanResize = "False"
  gw = 600
  gh = 700

  GraphicsWindow.Width = gw
  GraphicsWindow.Height = gh

  GraphicsWindow.Top = 0
  GraphicsWindow.Left = (Desktop.Width - gw) / 2
  GraphicsWindow.Title = "Analog Clock v1.0 By Kevin J"

  gh = 450

  MidX = gw/2
  MidY = gh/2

  GraphicsWindow.BrushColor = "SaddleBrown"
  ClockBody = Shapes.AddRectangle(Radius * (Radius / (Radius / 4.5)), Radius * (Radius / 9.375))
  Shapes.Move(ClockBody, MidX - Radius * 2.25, MidY - Radius * 2.25)

  GraphicsWindow.BrushColor = "White"
  PendulumBackGround = Shapes.AddRectangle(Radius * (Radius / (Radius / 4)), Radius * (Radius / 23.4375))
  Shapes.Move(PendulumBackGround, MidX - Radius * 2, MidY + Radius * 2)

  GraphicsWindow.BrushColor = "Goldenrod"
  PendulumArm = Shapes.AddRectangle(Radius / 3.5, Radius * 4)
  Shapes.Move(PendulumArm, MidX - Radius / 7, MidY)
  Shapes.Rotate(PendulumArm, 35)
  GraphicsWindow.PenWidth = 2
  PendulumBall = Shapes.AddEllipse(Radius, Radius)
  Shapes.Move(PendulumBall, MidX - Radius * 2 + 15, MidY + Radius * 3.5 - 10)

  GraphicsWindow.BrushColor = "Peru"
  Shapes.AddTriangle(MidX, MidY, MidX - Radius, MidY - Radius * 2, MidX + Radius, MidY - Radius * 2)
  Shapes.AddTriangle(MidX, MidY, MidX - Radius , MidY - Radius * 2, MidX - Radius * 2, MidY - Radius * .875)
  Shapes.AddTriangle(MidX, MidY, MidX + Radius, MidY - Radius * 2, MidX + Radius * 2, MidY - Radius * .875)
  Shapes.AddTriangle(MidX, MidY, MidX - Radius, MidY + Radius * 2, MidX + Radius, MidY + Radius * 2)
  Shapes.AddTriangle(MidX, MidY, MidX - Radius, MidY + Radius * 2, MidX - Radius * 2, MidY + Radius)
  Shapes.AddTriangle(MidX, MidY, MidX + Radius, MidY + Radius * 2, MidX + Radius * 2, MidY + Radius)
  Shapes.AddTriangle(MidX, MidY, MidX - Radius * 2, MidY - Radius * .875, MidX - Radius * 2, MidY + Radius)
  Shapes.AddTriangle(MidX, MidY, MidX + Radius * 2, MidY - Radius * .875, MidX + Radius * 2, MidY + Radius)

  GraphicsWindow.PenColor = "GoldenRod"
  GraphicsWindow.BrushColor = "White"
  GraphicsWindow.PenWidth = 10
  GoldRim = Shapes.AddEllipse(Radius * 2 + 45, Radius * 2 + 45)
  Shapes.Move(GoldRim, MidX - Radius - 22.5, MidY - Radius - 22.5)
  GraphicsWindow.PenColor = "Gold"
  GoldRim2 = Shapes.AddEllipse(Radius * 2 + 35, Radius * 2 + 35)
  Shapes.Move(GoldRim2, MidX - Radius - 17.5, MidY - Radius - 17.5)

  GraphicsWindow.PenColor = "Black"
  GraphicsWindow.PenWidth = 2
  HandCircle = Shapes.AddEllipse(Radius / 10, Radius / 10)
  Shapes.Move(HandCircle, MidX - Radius / 20, MidY - Radius / 20)

  For i = 1 To 60
    GraphicsWindow.PenColor = "black"
    GraphicsWindow.BrushColor = "black"
    TickRadians = Math.GetRadians(-i * 6 + 90)
    If Math.Remainder(i, 5) <> 0 Then
      Tick[i] = Shapes.AddEllipse(Radius / 50, Radius / 50)
      Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 1, MidY - Radius * Math.Sin(TickRadians) - 1)
    Else
      If i = 15 Then
        Tick[i] = Shapes.AddEllipse(Radius / (13 * Math.Remainder(1, 3)),Radius / (13 * Math.Remainder(1, 3)))
        Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 2.5, MidY - Radius * Math.Sin(TickRadians) - 3.5)
      ElseIf  i = 45 Then
        Tick[i] = Shapes.AddEllipse(Radius / (13 * Math.Remainder(1, 3)), Radius / (13 * Math.Remainder(1, 3)))
        Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 2.5, MidY - Radius * Math.Sin(TickRadians) - 3.5)
      ElseIf i = 30 Then
        Tick[i] = Shapes.AddEllipse(Radius / 10, Radius / 10)
        Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 3.5 MidY - Radius * Math.Sin(TickRadians) - 5)
      ElseIf i = 60 Then
        Tick[i] = Shapes.AddEllipse(Radius / 10, Radius / 10)
        Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 3.5, MidY - Radius * Math.Sin(TickRadians) - 5)
      ElseIf i = 5 Or i = 10 Or i = 20 Or i = 25 Or i = 35 Or i = 40 Or i = 50 Or i = 55 Then
        Tick[i] = Shapes.AddEllipse(Radius / 25, Radius / 25)
        Shapes.Move(Tick[i], MidX + Radius * Math.Cos(TickRadians) - 1, MidY - Radius * Math.Sin(TickRadians) - 1)
      EndIf
    EndIf
  EndFor
EndSub

Sub StartClock
  If Clock.Minute = 0 And Clock.Second = 0 Then
    Sound.PlayChime()
  Else
    Sound.PlayClick()
  EndIf
  If Clock.Hour + Clock.Minute/60 + Clock.Second/3600 <> Hour Then
    Shapes.Remove(HourHand)
    Hour = Clock.Hour + Clock.Minute/60 + Clock.Second/3600
    GraphicsWindow.PenColor = "Black"
    GraphicsWindow.PenWidth = 3
    HourHand = Shapes.AddLine(MidX, MidY, MidX + Radius/ 2 * Math.Cos(Math.GetRadians(Hour * 30 - 90)), MidY + Radius / 2 * Math.Sin(Math.GetRadians(Hour * 30 - 90)))
  EndIf
  If Clock.Minute + Clock.Second/60 <> Minute Then
    Shapes.Remove(MinuteHand)
    Minute = Clock.Minute + Clock.Second/60
    GraphicsWindow.PenColor = "Black"
    GraphicsWindow.PenWidth = 2
    MinuteHand = Shapes.AddLine(MidX, MidY, MidX + Radius/1.2 * Math.Cos(Math.GetRadians(Minute * 6 - 90)), MidY + Radius / 1.2 * Math.Sin(Math.GetRadians(Minute * 6 - 90)))
  EndIf
  If Clock.Second <> Second Then
    Shapes.Remove(SecondHand)
    Second = Clock.Second
    GraphicsWindow.PenColor = "Black"
    GraphicsWindow.PenWidth = 1
    SecondHand = Shapes.AddLine(MidX, MidY, MidX + Radius * Math.Cos(Math.GetRadians(Second * 6 - 90)), MidY + Radius * Math.Sin(Math.GetRadians(Second * 6 - 90)))

    If x = 2 Then
      x = x - 1
    Else
      x = x + 1
    EndIf

    If x = 2 Then
      Shapes.Rotate(PendulumArm, 35)
      Shapes.Move(PendulumBall, MidX - Radius * 2 + 15, MidY + Radius * 3.5 - 10)
    Else
      Shapes.Rotate(PendulumArm, -35)
      Shapes.Move(PendulumBall, MidX + Radius - 15, MidY + Radius * 3.5 - 10)
    EndIf
  EndIf
EndSub
Copyright (c) Microsoft Corporation. All rights reserved.