' version 05-04-2017 ' compile with: fbc -s gui Const As Double deg2rad = Atn(1) / 45 Const As UInteger w = 199, h = 199 Const As UInteger x0 = w \ 2, y0 = h \ 2 ' center Dim As UInteger x, x1, x2, x3, y, y1, y2, y3 Dim As String sys_time, press Dim As Integer hours, minutes, seconds Dim As Double angle, a_sin, a_cos ScreenRes w, h, 8 ' 8bit color depth (palette) WindowTitle "Simple Clock" ' create image 8bit (palette) and set pixels to 15 (white) Dim clockdial As Any Ptr = ImageCreate(w, h, 15, 8) If clockdial = 0 Then Print "Failed to create image." Sleep End -1 End If ' draw clockdial in memory Circle clockdial, (x0, y0), 94 ,0 Circle clockdial, (x0, y0), 90 ,0 For x = 0 To 174 Step 6 a_sin = Sin(x * deg2rad) a_cos = Cos(x * deg2rad) x1 = 94 * a_sin : y1 = 94 * a_cos If x Mod 30 = 0 Then x2 = 85 * a_sin : y2 = 85 * a_cos Else x2 = 90 * a_sin : y2 = 90 * a_cos End If Line clockdial, (x0 + x1, y0 + y1) - (x0 + x2, y0 + y2), 0 Line clockdial, (x0 - x1, y0 - y1) - (x0 - x2, y0 - y2), 0 Next 'draw clock Do sys_time = Time hours = (sys_time[0] - Asc("0")) * 10 + sys_time[1] - Asc("0") minutes = (sys_time[3] - Asc("0")) * 10 + sys_time[4] - Asc("0") seconds = (sys_time[6] - Asc("0")) * 10 + sys_time[7] - Asc("0") If hours > 12 Then hours -= 12 angle = (180 - (hours * 30 + minutes / 2)) * deg2rad x1 = 65 * Sin(angle) y1 = 65 * Cos(angle) angle = (180 - (minutes * 6 + seconds / 10)) * deg2rad x2 = 80 * Sin(angle) y2 = 80 * Cos(angle) angle = (180 - seconds * 6) * deg2rad x3 = 90 * Sin(angle) y3 = 90 * Cos(angle) ScreenLock ' load image, setting pixels Put (0, 0), clockdial, PSet Line (x0, y0) - (x0 + x1, y0 + y1), 1 ' hour hand blue Line (x0, y0) - (x0 + x2, y0 + y2), 2 ' minute hand green Line (x0, y0) - (x0 + x3, y0 + y3), 12 ' second hand red ScreenUnLock Sleep 300, 1 ' wait 300 ms, don't respond to keys pressed ' press esc or mouse click on close window to stop program press = InKey If press = Chr(27) Or press = Chr(255) + "k" Then Exit Do Loop ImageDestroy(clockdial) End