Scrollling Word Clock

Post your FreeBASIC source, examples, tips and tricks here. Please don’t post code without including an explanation.
Post Reply
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Scrollling Word Clock

Post by neil »

Here's a Scrolling Word Clock. The clock updates every minute.

Code: Select all

' scrolling word clock by neil

WindowTitle "SCROLLING WORD CLOCK"
Dim As String hr,mn,t,t1,t2,key
Dim As Ubyte hrs,min,ln,min1
Dim AS String text,Fletter,Oletters
Dim As Integer zoom = 3 '' from 1 to 9 for example
Dim As Integer w = 23 * 8, h = 21 * 8
ScreenRes 380,70
SetMouse 0,0,0

' font color green - white background
Color 2,15
Cls

Do
t = "":t1 = "":t2 = "":mn = "":hr = ""
t = time
mn=Mid(t,4,2):hr=Mid(t,1,2)
hrs = val(hr):min = val(mn)
If hrs > 12 Then hrs -= 12
If hrs = 0 Then hrs += 12 

If min > 30 Then 
hrs += 1
if hrs > 12 Then hrs = 1
End if

if hrs = 1 Then t2  = "ONE"
if hrs = 2 Then t2 = "TWO"
if hrs = 3 Then t2 = "THREE"
if hrs = 4 Then t2 = "FOUR"
if hrs = 5 Then t2 = "FIVE"
if hrs = 6 Then t2 = "SIX"
if hrs = 7 Then t2 = "SEVEN"
if hrs = 8 Then t2 = "EIGHT"
if hrs = 9 Then t2 = "NINE"
if hrs = 10 Then t2 = "TEN"
if hrs = 11 Then t2 = "ELEVEN"
if hrs = 12 Then t2 = "TWELVE"

if min = 0 Then t1 = "        IT IS " + t2 + " O`CLOCK "
if min = 1 Then t1 = "        IT IS ONE MINUTE PAST " + t2
if min = 2 Then t1 = "        IT IS TWO MINUTES PAST " + t2
if min = 3 Then t1 = "        IT IS THREE MINUTES PAST " + t2
if min = 4 Then t1 = "        IT IS FOUR MINUTES PAST " + t2
if min = 5 Then t1 = "        IT IS FIVE MINUTES PAST " + t2

if min = 6 Then t1 = "        IT IS SIX MINUTES PAST " + t2
if min = 7 Then t1 = "        IT IS SEVEN MINUTES PAST " + t2
if min = 8 Then t1 = "        IT IS EIGHT MINUTES PAST " + t2
if min = 9 Then t1 = "        IT IS NINE MINUTES PAST " + t2
if min = 10 Then t1 = "        IT IS TEN MINUTES PAST " + t2

if min = 11 Then t1 = "        IT IS ELEVEN MINUTES PAST " + t2
if min = 12 Then t1 = "        IT IS TWELVE MINUTES PAST " + t2
if min = 13 Then t1 = "        IT IS THIRTEEN MINUTES PAST " + t2
if min = 14 Then t1 = "        IT IS FOURTEEN MINUTES PAST " + t2
if min = 15 Then t1 = "        IT IS A QUARTER PAST " + t2

if min = 16 Then t1 = "        IT IS SIXTEEN MINUTES PAST " + t2
if min = 17 Then t1 = "        IT IS SEVENTEEN MINUTES PAST " + t2
if min = 18 Then t1 = "        IT IS EIGHTEEN MINUTES PAST " + t2
if min = 19 Then t1 = "        IT IS NINETEEN MINUTES PAST " + t2
if min = 20 Then t1 = "        IT IS TWENTY MINUTES PAST " + t2

if min = 21 Then t1 = "        IT IS TWENTY-ONE MINUTES PAST " + t2
if min = 22 Then t1 = "        IT IS TWENTY-TWO MINUTES PAST " + t2
if min = 23 Then t1 = "        IT IS TWENTY-THREE MINUTES PAST " + t2
if min = 24 Then t1 = "        IT IS TWENTY-FOUR MINUTES PAST " + t2
if min = 25 Then t1 = "        IT IS TWENTY-FIVE MINUTES PAST " + t2

if min = 26 Then t1 = "        IT IS TWENTY-SIX MINUTES PAST " + t2
if min = 27 Then t1 = "        IT IS TWENTY-SEVEN MINUTES PAST " + t2
if min = 28 Then t1 = "        IT IS TWENTY-EIGHT MINUTES PAST " + t2
if min = 29 Then t1 = "        IT IS TWENTY-NINE MINUTES PAST " + t2
if min = 30 Then t1 = "        IT IS HALF PAST " + t2

if min = 31 Then t1 = "        IT IS TWENTY-NINE MINUTES TO " + t2
if min = 32 Then t1 = "        IT IS TWENTY-EIGHT MINUTES TO " + t2
if min = 33 Then t1 = "        IT IS TWENTY-SEVEN MINUTES TO " + t2
if min = 34 Then t1 = "        IT IS TWENTY-SIX MINUTES TO " + t2
if min = 35 Then t1 = "        IT IS TWENTY-FIVE MINUTES TO " + t2

if min = 36 Then t1 = "        IT IS TWENTY-FOUR MINUTES TO " + t2
if min = 37 Then t1 = "        IT IS TWENTY-THREE MINUTES TO " + t2
if min = 38 Then t1 = "        IT IS TWENTY-TWO MINUTES TO " + t2
if min = 39 Then t1 = "        IT IS TWENTY-ONE MINUTES TO " + t2
if min = 40 Then t1 = "        IT IS TWENTY MINUTES TO " + t2

if min = 41 Then t1 = "        IT IS NINETEEN MINUTES TO " + t2
if min = 42 Then t1 = "        IT IS EIGHTEEN MINUTES TO " + t2
if min = 43 Then t1 = "        IT IS SEVENTEEN MINUTES TO " + t2
if min = 44 Then t1 = "        IT IS SIXTEEN MINUTES TO " + t2
if min = 45 Then t1 = "        IT IS A QUARTER TO " + t2

if min = 46 Then t1 = "        IT IS FOURTEEN MINUTES TO " + t2
if min = 47 Then t1 = "        IT IS THIRTEEN MINUTES TO " + t2
if min = 48 Then t1 = "        IT IS TWELVE MINUTES TO " + t2
if min = 49 Then t1 = "        IT IS ELEVEN MINUTES TO " + t2
if min = 50 Then t1 = "        IT IS TEN MINUTES TO "+ t2

if min = 51 Then t1 = "        IT IS NINE MINUTES TO " + t2
if min = 52 Then t1 = "        IT IS EIGHT MINUTES TO " + t2
if min = 53 Then t1 = "        IT IS SEVEN MINUTES TO " + t2
if min = 54 Then t1 = "        IT IS SIX MINUTES TO "+ t2
if min = 55 Then t1 = "        IT IS FIVE MINUTES TO " + t2


if min = 56 Then t1 = "        IT IS FOUR MINUTES TO " + t2
if min = 57 Then t1 = "        IT IS THREE MINUTES TO " + t2
if min = 58 Then t1 = "        IT IS TWO MINUTES TO "+ t2
if min = 59 Then t1 = "        IT IS ONE MINUTE TO " + t2

ln = len(t1)
Do

Fletter = Mid(t1,1,1)
Oletters = Mid(t1,2,ln)
t1 = Oletters + FLetter

ScreenLock
Cls

Locate 2,1:print t1
t = time
mn=Mid(t,4,2)
min1 = val(mn)

For x As Integer = w - 1 To 0 Step -1
  For y As Integer = h - 1 To 0 Step -1
    Line(x * zoom, y * zoom)-Step(zoom - 1, zoom - 1), Point(x, y), BF
  Next
Next

Screenunlock
key = inkey

' speed adjust as needed
Sleep 210,1

if min1 <> min THEN Exit do
If (Key = chr(27))  Or (key = Chr(255) & "k") Then End

Loop
Loop Until (key = Chr(27)) Or (key = Chr(255) & "k")
End
Here's a Hexadecimal base-16 clock.

Code: Select all

'' Hexadecimal Clock this is base-16.

Dim As Integer zoom = 4  '' from 1 to 9 for example

Dim As Integer w = 17 * 8, h = 5 * 8
Dim As String t, hrs, min, sec, key

Screenres w * zoom, h * zoom

Do
    Screenlock
    
    Cls
    Color 14
    Locate 2, 2 : Print "HEX CLOCK 24 HR"
    Color 10
  
    t = Time
    
    hrs = Left(t, 2):min = Mid(t, 4, 2):sec = Right(t, 2)
   
    Locate 4, 6
    Print Hex(Val(hrs), 2);":"; Hex(Val(min), 2);":";Hex(Val(sec), 2)
       
    For x As Integer = w - 1 To 0 Step -1
        For y As Integer = h - 1 To 0 Step -1
            Line(x * zoom, y * zoom)-Step(zoom - 1, zoom - 1), Point(x, y), BF
        Next
    Next
    
    Screenunlock
    
    key = inkey
    
    If (Key >= "1") And (key <= "9") Then
        zoom = Valint(key)
        Screenres w * zoom, h * zoom
    End If

    Sleep 100, 1
    
Loop Until (key = Chr(27)) Or (key = Chr(255) & "k")
Last edited by neil on Oct 17, 2023 1:53, edited 11 times in total.
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Re: Scrollling Word Clock

Post by neil »

Here's an Octal base-8 Clock.

Code: Select all

'' Octal Clock this is base-8.

Dim As Integer zoom = 4  '' from 1 to 9 for example

Dim As Integer w = 17 * 8, h = 5 * 8
Dim As String t, hrs, min, sec, key

Screenres w * zoom, h * zoom

Do
    Screenlock
    
    Cls
    Color 14
    Locate 2, 2 : Print "OCT CLOCK 24 HR"
    Color 10
  
    t = Time
    
    hrs = Left(t, 2):min = Mid(t, 4, 2):sec = Right(t, 2)
   
    Locate 4, 6
    Print Oct(Val(hrs), 2);":"; Oct(Val(min), 2);":";Oct(Val(sec), 2)
       
    For x As Integer = w - 1 To 0 Step -1
        For y As Integer = h - 1 To 0 Step -1
            Line(x * zoom, y * zoom)-Step(zoom - 1, zoom - 1), Point(x, y), BF
        Next
    Next
    
    Screenunlock
    
    key = inkey
    
    If (Key >= "1") And (key <= "9") Then
        zoom = Valint(key)
        Screenres w * zoom, h * zoom
    End If

    Sleep 100, 1
    
Loop Until (key = Chr(27)) Or (key = Chr(255) & "k")
Last edited by neil on Oct 17, 2023 2:20, edited 2 times in total.
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Re: Scrollling Word Clock

Post by neil »

I updated the clock again. It was an hour slow when the minute was > 30.
I added this code.
if min > 30 Then hrs += 1
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Re: Scrollling Word Clock

Post by neil »

I updated the code again. I found another bug when it's 12 O Clock. If hrs > 12 Then it needs reset to 1.
Here's the last two code changes.

if min > 30 Then hrs += 1
if hrs > 12 Then hrs = 1
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Re: Scrollling Word Clock

Post by neil »

I updated the code again. I found another typo.

I also added this.

If min > 30 Then
hrs += 1
if hrs > 12 Then hrs = 1
End if
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Re: Scrollling Word Clock

Post by neil »

I am posting my final updates here.
I made the font larger.
I also changed the font color to green and the background to white.
I changed O CLOCK to O`CLOCK
Another update I increased the white space as the previous text scrolled out of the way. The outcome looks better.
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Re: Scrollling Word Clock

Post by neil »

I just posted above in this thread a Hexadecimal Clock and a Octal Clock.
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Re: Scrollling Word Clock

Post by neil »

Here's a colorful 24 Hr base-4 clock Red squares are hours. Green squares are minutes. A blue square is shared with hours and minutes. The squares have numbers in them just add them up to get the time. Here's a link for more info: https://www.youtube.com/watch?v=MAkh1o_7H0A

Code: Select all

' 24 Hour base-4 clock by neil

WindowTitle "Base 4 Clock"
Screenres 386,390,32

Dim As string key,mn,hr,t
Dim Shared As UByte r,g,b,hrs,min
 
Sub Zero
line (20,20)-(130,130),rgb(255,255,255),bf
line (140,130)-(248,20),rgb(255,255,255),bf
line (258,20)-(366,130),rgb(255,255,255),bf
line (20,250)-(130,140),rgb(255,255,255),bf
line (248,140)-(140,250),rgb(255,255,255),bf
line (366,140)-(258,250),rgb(255,255,255),bf
line (20,260)-(130,370),rgb(255,255,255),bf
line (248,260)-(140,370),rgb(255,255,255),bf
line (365,260)-(258,370),rgb(255,255,255),bf
End Sub

Sub fortyeight()
line (20,20)-(130,130),rgb(r,g,b),bf
End Sub

sub twelve()
line (140,130)-(248,20),rgb(r,g,b),bf
End Sub

Sub three()
line (258,20)-(366,130),rgb(r,g,b),bf
End Sub

Sub thirtytwo()
line (20,250)-(130,140),rgb(r,g,b),bf
End Sub

Sub eight()
line (248,140)-(140,250),rgb(r,g,b),bf
End Sub

Sub two()
line (366,140)-(258,250),rgb(r,g,b),bf
End Sub

Sub sixteen()
line (20,260)-(130,370),rgb(r,g,b),bf
End Sub

Sub four()
line (248,260)-(140,370),rgb(r,g,b),bf
End Sub

Sub one()
line (365,260)-(258,370),rgb(r,g,b),bf
End Sub

Sub Red()
r = 255:g = 0:b = 0
End Sub

Sub Grn()
r = 0:g = 255:b = 0
End Sub

Sub Blu()
r = 0:g = 0:b = 255
End Sub

Do

Screenlock
Cls
t = time
hr=Mid(t,1,2):mn=Mid(t,4,2)
hrs = val(hr):min = val(mn)

zero
if min = 1 Then grn:one
if min = 2 Then grn:two
if min = 3 Then grn:three
if min = 4 Then grn:four
if min = 5 Then grn:three:grn:two
if min = 6 Then grn:four:grn:two
if min = 7 Then grn:four:grn:three
if min = 8 Then grn:eight
if min = 9 Then grn:eight:grn:one
if min = 10 Then grn:eight:grn:two

if min = 11 Then grn:eight:grn:three
if min = 12 Then grn:twelve
if min = 13 Then grn:grn:twelve:grn:one
if min = 14 Then grn:twelve:grn:two
if min = 15 Then grn:twelve:grn:three
if min = 16 Then grn:sixteen
if min = 17 Then grn:sixteen:grn:one
if min = 18 Then grn:sixteen:grn:two
if min = 19 Then grn:sixteen:grn:three
if min = 20 Then grn:sixteen:grn:four

if min = 21 Then grn:sixteen:grn:four:grn:one
if min = 22 Then grn:sixteen:grn:four:grn:two
if min = 23 Then grn:sixteen:grn:four:grn:three
if min = 24 Then grn:sixteen:grn:eight
if min = 25 Then grn:sixteen:grn:eight:grn:one
if min = 26 Then grn:sixteen:grn:eight:grn:two
if min = 27 Then grn:sixteen:grn:eight:grn:three
if min = 28 Then grn:sixteen:grn:twelve
if min = 29 Then grn:sixteen:grn:twelve:grn:one
if min = 30 Then grn:sixteen:grn:twelve:grn:two

if min = 31 Then grn:sixteen:grn:twelve:grn:three
if min = 32 Then grn:thirtytwo
if min = 33 Then grn:thirtytwo:grn:one
if min = 34 Then grn:thirtytwo:grn:two
if min = 35 Then grn:thirtytwo:grn:three
if min = 36 Then grn:thirtytwo:grn:four
if min = 37 Then grn:thirtytwo:grn:three:grn:two
if min = 38 Then grn:thirtytwo:grn:four:grn:two
if min = 39 Then grn:thirtytwo:grn:four:grn:three

if min = 40 Then grn:thirtytwo:grn:eight
if min = 41 Then grn:thirtytwo:grn:eight:grn:one
if min = 42 Then grn:thirtytwo:grn:eight:grn:two
if min = 43 Then grn:thirtytwo:grn:eight:grn:three
if min = 44 Then grn:thirtytwo:grn:twelve
if min = 45 Then grn:thirtytwo:grn:twelve:grn:one
if min = 46 Then grn:thirtytwo:grn:twelve:grn:two
if min = 47 Then grn:thirtytwo:grn:twelve:grn:three
if min = 48 Then grn:fortyeight
if min = 49 Then grn:fortyeight:grn:one

if min = 50 Then grn:fortyeight:grn:two
if min = 51 Then grn:fortyeight:grn:three
if min = 52 Then grn:fortyeight:grn:four
if min = 53 Then grn:fortyeight:grn:four:grn:one
if min = 54 Then grn:fortyeight:grn:four:grn:two
if min = 55 Then grn:fortyeight:grn:four:grn:three
if min = 56 Then grn:fortyeight:grn:eight
if min = 57 Then grn:fortyeight:grn:eight:grn:one
if min = 58 Then grn:fortyeight:grn:eight:grn:two
if min = 59 Then grn:fortyeight:grn:eight:grn:three


if hrs = 1 and point (310, 315) = &HFF00FF00 THEN blu:one
if hrs = 1 and point (310, 315) = &HFFFFFFFF Then red:one

if hrs = 2 and point (310, 195) = &HFF00FF00 Then blu:two
if hrs = 2 and point (310, 195) = &HFFFFFFFF Then red:two

if hrs = 3 and point (310, 80) = &HFF00FF00 Then blu:three
if hrs = 3 and point (310, 80) = &HFFFFFFFF Then red:three

if hrs = 4 and point (195, 315) = &HFF00FF00 Then blu:four
if hrs = 4 and point (195, 315) = &HFFFFFFFF Then red:four

if hrs = 5 and point (310, 80)  = &HFF00FF00 Then blu:three
if hrs = 5 and point (310, 80)  = &HFFFFFFFF Then red:three
if hrs = 5 and point (310, 195)  = &HFF00FF00 Then blu:two
if hrs = 5 and point (310, 195)  = &HFFFFFFFF Then red:two

if hrs = 6 and point (195, 315)  = &HFF00FF00 Then blu:four
if hrs = 6 and point (195, 315)  = &HFFFFFFFF Then red:four
if hrs = 6 and point (310, 195)  = &HFF00FF00 Then blu:two
if hrs = 6 and point (310, 195)  = &HFFFFFFFF Then red:two

if hrs = 7 and point (195, 315)  = &HFF00FF00 Then blu:four
if hrs = 7 and point (195, 315)  = &HFFFFFFFF Then red:four
if hrs = 7 and point (310, 80)  = &HFF00FF00 Then blu:three
if hrs = 7 and point (310, 80)  = &HFFFFFFFF Then red:three

if hrs = 8 and point (195, 195)  = &HFF00FF00 Then blu:eight
if hrs = 8 and point (195, 195)  = &HFFFFFFFF Then red:eight

if hrs = 9 and point (195, 195)  = &HFF00FF00 Then blu:eight
if hrs = 9 and point (195, 195)  = &HFFFFFFFF Then red:eight
if hrs = 9 and point (310, 315)  = &HFF00FF00 Then blu:one
if hrs = 9 and point (310, 315)  = &HFFFFFFFF Then red:one

if hrs = 10 and point (195, 195)  = &HFF00FF00 Then blu:eight
if hrs = 10 and point (195, 195)  = &HFFFFFFFF Then red:eight
if hrs = 10 and point (310, 195)  = &HFF00FF00 Then blu:two
if hrs = 10 and point (310, 195)  = &HFFFFFFFF Then red:two

if hrs = 11 and point (195, 195)  = &HFF00FF00 Then blu:eight
if hrs = 11 and point (195, 195)  = &HFFFFFFFF Then red:eight
if hrs = 11 and point (310, 80)  = &HFF00FF00 Then blu:three
if hrs = 11 and point (310, 80)  = &HFFFFFFFF Then red:three

if hrs = 12 and point(195,80) = &HFF00FF00 THEN blu:twelve
if hrs = 12 and point(195,80) = &HFFFFFFFF Then red:twelve

if hrs = 13 and point(195,80) = &HFF00FF00 THEN blu:twelve
if hrs = 13 and point(195,80) = &HFFFFFFFF Then red:twelve
if hrs = 13 and point(310,315) = &HFF00FF00 THEN blu:one
if hrs = 13 and point(310,315) = &HFFFFFFFF Then red:one

if hrs = 14 and point(195,80) = &HFF00FF00 THEN blu:twelve
if hrs = 14 and point(195,80) = &HFFFFFFFF Then red:twelve
if hrs = 14 and point(310,195) = &HFF00FF00 THEN blu:two
if hrs = 14 and point(310,195) = &HFFFFFFFF Then red:two

if hrs = 15 and point(195,80) = &HFF00FF00 THEN blu:twelve
if hrs = 15 and point(195,80) = &HFFFFFFFF Then red:twelve
if hrs = 15 and point(310,80) = &HFF00FF00 THEN blu:three
if hrs = 15 and point(310,80) = &HFFFFFFFF Then red:three

if hrs = 16 and point(80,315) = &HFF00FF00 THEN blu:sixteen
if hrs = 16 and point(80,315) = &HFFFFFFFF Then red:sixteen

if hrs = 17 and point(80,315) = &HFF00FF00 THEN blu:sixteen
if hrs = 17 and point(80,315) = &HFFFFFFFF Then red:sixteen
if hrs = 17 and point(310,315) = &HFF00FF00 THEN blu:one
if hrs = 17 and point(310,315) = &HFFFFFFFF Then red:one

if hrs = 18 and point(80,315) = &HFF00FF00 THEN blu:sixteen
if hrs = 18 and point(80,315) = &HFFFFFFFF Then red:sixteen
if hrs = 18 and point(310,195) = &HFF00FF00 THEN blu:two
if hrs = 18 and point(310,195) = &HFFFFFFFF Then red:two

if hrs = 19 and point(80,315) = &HFF00FF00 THEN blu:sixteen
if hrs = 19 and point(80,315) = &HFFFFFFFF Then red:sixteen
if hrs = 19 and point(310,80) = &HFF00FF00 THEN blu:three
if hrs = 19 and point(310,80) = &HFFFFFFFF Then red:three

if hrs = 20 and point(80,315) = &HFF00FF00 THEN blu:sixteen
if hrs = 20 and point(80,315) = &HFFFFFFFF Then red:sixteen
if hrs = 20 and point(195,315) = &HFF00FF00 THEN blu:four
if hrs = 20 and point(195,315) = &HFFFFFFFF Then red:four

if hrs = 21 and point(80,315) = &HFF00FF00 THEN blu:sixteen
if hrs = 21 and point(80,315) = &HFFFFFFFF Then red:sixteen
if hrs = 21 and point(195,315) = &HFF00FF00 THEN blu:four
if hrs = 21 and point(195,315) = &HFFFFFFFF Then red:four
if hrs = 21 and point(310,315) = &HFF00FF00 THEN blu:one
if hrs = 21 and point(310,315) = &HFFFFFFFF Then red:one

if hrs = 22 and point(80,315) = &HFF00FF00 THEN blu:sixteen
if hrs = 22 and point(80,315) = &HFFFFFFFF Then red:sixteen
if hrs = 22 and point(195,315) = &HFF00FF00 THEN blu:four
if hrs = 22 and point(195,315) = &HFFFFFFFF Then red:four
if hrs = 22 and point(310,195) = &HFF00FF00 THEN blu:two
if hrs = 22 and point(310,195) = &HFFFFFFFF Then red:two

if hrs = 23 and point(80,315) = &HFF00FF00 THEN blu:sixteen
if hrs = 23 and point(80,315) = &HFFFFFFFF Then red:sixteen
if hrs = 23 and point(195,315) = &HFF00FF00 THEN blu:four
if hrs = 23 and point(195,315) = &HFFFFFFFF Then red:four
if hrs = 23 and point(310,80) = &HFF00FF00 THEN blu:three
if hrs = 23 and point(310,80) = &HFFFFFFFF Then red:three

Locate 5,9:print "48":locate 5,24:print "12":locate 5,39:print "3"
Locate 20,9:print "32":locate 20,24:print "8":locate 20,39:print "2"
Locate 35,9:print "16":locate 35,24:print "4":locate 35,39:print "1"
Screenunlock

key = inkey
sleep 100,1
Loop Until (key = Chr(27)) Or (key = Chr(255) & "k")
Here's a colorful 12 Hr Fibonacciclock Red squares are hours. Green squares are minutes. A blue square is shared with hours and minutes. The squares have numbers in them just add them up to get the time. The green or shared blue square minutes are multiplied by 5. The clock updates ever 5 minutes. Here's a link for more info: https://mathsbot.com/puzzles/fibonacciClock

Code: Select all

' 12 Hour Fibonacci Clock by neil

WindowTitle "Fibonacci Clock"
Screenres 502,322,32
Dim As string key,t
Dim Shared As UByte r,g,b
Dim As UByte a1,b1,c1,d1,a2,b2,c2,d2,hrs,min

sub Two()
line (10,10)-(130,130),rgb(r,g,b),bf
End sub

sub OneA()
line (139,10)-(195,66),rgb(r,g,b),bf
End Sub

Sub OneB()
line (139,75)-(195,130),rgb(r,g,b),bf
End Sub

Sub Three()
line (10,139)-(195,310),rgb(r,g,b),bf
End Sub

Sub Five()
line (204,10)-(491,310),rgb(r,g,b),bf
End Sub

Sub Zero()
line (10,10)-(130,130),rgb(255,255,255),bf
line (10,139)-(195,310),rgb(255,255,255),bf
line (139,10)-(195,66),rgb(255,255,255),bf
line (139,75)-(195,130),rgb(255,255,255),bf
line (204,10)-(491,310),rgb(255,255,255),bf
End Sub

Sub Red()
r = 255:g = 0:b = 0
End Sub

Sub Grn()
r = 0:g = 255:b = 0
End Sub

Sub Blu()
r = 0:g = 0:b = 255
End Sub

Do

t = time

hrs = val(left(t,2)):min = val(mid(t,4,2))
If hrs > 12 Then hrs -= 12
If hrs = 0 Then hrs += 12 

a1 = 0:b1 = 0:c1 = 0:d1 = 0
a2 = 0:b2 = 0:c2 = 0:d2 = 0

Screenlock
Cls

zero

If hrs = 1 THEN a1 = 1:red:oneB
If hrs = 2 THEN a1 = 2:red:two
If hrs = 3 THEN a1 = 3:red:three
If hrs = 4 THEN a1 = 1:b1 = 3:red:oneB:three
If hrs = 5 THEN a1 = 5:red:five
If hrs = 6 THEN a1 = 1:b1 = 5:red:five:oneB
If hrs = 7 THEN a1 = 2:b1 = 5:red:two:five
If hrs = 8 THEN a1 = 3:b1 = 5:red:three:five
If hrs = 9 THEN a1 = 1:b1 = 3:c1 = 5:red:oneB:three:five
If hrs = 10 THEN a1 = 2:b1 = 3:c1 = 5:red:two:three:five
If hrs = 11 THEN a1 = 2:b1 = 3:c1 = 5:d1 = 1:red:two:three:five:oneB

If min > 4 and min < 10 Then a2 = 1:grn:oneA
If min > 9 and min < 15 Then a2 = 2:grn:two
If min > 14 and min < 20 Then a2 = 3:grn:three
If min > 19 and min < 25 Then a2 = 1:b2 = 3:grn:three:oneA
If min > 24 and min < 30 Then a2 = 5:grn:five
If min > 29 and min < 35 Then a2 = 1:b2 = 5:grn:oneA:five
If min > 34 and min < 40 Then a2 = 2:b2 = 5:grn:two:five
If min > 39 and min < 45 Then a2 = 3:b2 = 5:grn:three:five
If min > 44 and min < 50 Then a2 = 1:b2 = 3:c2 = 5:grn:oneA:three:five
If min > 49 and min < 55 Then a2 = 2:b2 = 3:c2 = 5:grn:two:three:five
If min > 54 Then a2 = 2:b2 = 3:c2 = 5:d2 = 1:grn:two:three:five:oneA

if a1 = 2 and a2 = 2 Then blu:two
if a1 = 3 and a2 = 3 Then blu:three
if a1 = 3 and b2 = 3 Then blu:three
if b1 = 3 and b2 = 3 Then blu:three
if b1 = 3 and a2 = 3 Then blu:three

if a1 = 5 and a2 = 5 Then blu:five
if a1 = 5 and b2 = 5 Then blu:five
if a1 = 5 and c2 = 5 Then blu:five
if a2 = 5 and c1 = 5 Then blu:five

if b1 = 5 and b2 = 5 Then blu:five
if b1 = 5 and c2 = 5 Then blu:five
if b1 = 5 and a2 = 5 Then blu:five
if b2 = 5 and c1 = 5 Then blu:five
if c1 = 5 and c2 = 5 Then blu:five

locate 4,21:print "1":locate 12,21:print "1"
locate 4,9:print "2":locate 20,13:print "3"
locate 4,43:print "5":

Screenunlock
key = inkey
sleep 100,1
Loop Until (key = Chr(27)) Or (key = Chr(255) & "k")
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Re: Scrollling Word Clock

Post by neil »

Four of my clocks Scrolling word clock, Word clock, a Base-4 clock, and a Fibonacci clock are included in clocks4.bas. This creates a zip file with four clocks in it. It includes a readme-clocks.txt file.

Code: Select all

'clock4.bas text to zip file by neil 
Dim AS string sa,s1
Dim as UShort cnt
Dim As UByte i,b

' choose your path
open "clocks.zip" For Binary as #1

Do
read sa
for i = 1 to 96 step 2
s1 = mid(sa,i,2)
b = val("&H" + s1)
put #1,,b
next
cnt += 1
Loop until cnt = 129

read sa
for i = 1 to 8 step 2
s1 = mid(sa,i,2)
b = val("&H" + s1)
put #1,,b
next
close #1
print "Created clocks.zip"
sleep

Data "504B03040A0000000000AB7A515700000000000000000000000007001C00636C6F636B732F5554090003E2082F65E208"
Data "2F6575780B000104000000000400000000504B030414000000080020765157E5D90EC05C0500004D23000015001C0063"
Data "6C6F636B732F6261736534636C6F636B2E62617355540900034C012F654C012F6575780B000104000000000400000000"
Data "A55A5B4FE338147ECFAFB0FA30D34A414A6C274D2BCDC3C2CC2C0F7B9116462BED5B0BA18D4813948661D95FBF762E8D"
Data "EDF81C8716A9A0DADFE7F39D6B5CE033A19CDC96AF15D96E8EE915270F79F9F04CB6EFA448B3DCF3FECE8AC7F2ED3EAB"
Data "F394CCAE05847072232133EFEEA14AD3A24A8F8425B1CF5681CFA8E77DCD0EE4972339D65556ECC873FAEE1F0A7F5FF9"
Data "75B373B7DF54E9A304FCB87EAF5352F93B7F2BB68FFE212B3CE2DDBD6EC93F69557A7956A4644E039F068BAB79C8025F"
Data "BC167EB5DBCE6914F9DD6BE16F9F3A68C85BC8D59CF244B2102C8D92F65C16C7AE73A584E8A481E358615942AE1A3592"
Data "86801BDB0DB8918383A58AB857C1964E151D983BC12C8E3AB0540182BF158F44E4C66B12F45456F57B9AEDF6F57C8125"
Data "AA49AE4E3F0A7AFD96E63FD313D59E380B579AAEF7A2E606ABD63C82D44CC8AEDF4A4DF438B500DDF0D79E69C8B46214"
Data "483BC03C66FFD6A2C934C9E33A00C84FA2AD35C596AA00A865912A8AAD250230FF4A1F05B3225F88A89DF54EFC0CD65B"
Data "F95D87FD5A151D2C6840126C815DE7AF1AAC3D4B8007D8D7D2EB46911C4BDE4D7EF46A81A9B343EAEDAB2FBF678FF3DA"
Data "0F7DBA581F8AEE1D17EFC4DE51C07E6EF2F9BE127B59D1BD3B140BEF336977E36E9DADBCFFE454CA9E48BB1092FB7D5A"
Data "905D55AC45A886753AAC8BA40FEB4C5997253CECF06147E66BD8880CCA7A7468AC53C780A50DA09B4F064853E1C3CECA"
Data "D8598F9C0D031B442A5030A115A38B08B5B0C9E9A0EC29A11BF62D62B879C6381E6164C7186A94B876FDA76C2E479B16"
Data "2D891DA48B5901205D0D0DECB0A658145808C3C6022975A035A594B9D086646EC71B0546230466D13C4E8B01D7450389"
Data "028B908249D30B924279030A930109348A542100A9842B96A9FDD33FE6946D66D9B608E5104C3F2D026186AA1802EA83"
Data "8E2DD1032D0A12EC600B7EE5C637D295A91C4014A388798802C751E6B65C6185CCC1EC81A5CC914CEAC5CCE16402E5CC"
Data "C1AC425397C3F9052B9A2B291EAE9BCAFECAB67F52AB3C450310A8898C4218A74B8B2888341EE00C058E431B71374117"
Data "1D4D2018EA63906284385AE2488B7E6BD2B0DA8EE0349AF16F72DADECA42B21197BF97322B6A713B0D035F8CCC682136"
Data "3EDD7EFF1E04F245EE6FBFFD41B6F96BAF7002B3FD6A05890FA9A7426AA974440D5723A3922A8D764E4E609A46FB4741"
Data "4B65236A128036FB44BBA923A3A7E9D772B9CA1562AD01EEEDF6453F816ADA3DDD615A6E64953CCD5D946BF717E13609"
Data "9A925B9C8A2737B6876A529871AE35CE76EEC7DCC5A9B8BBCB0BDCC5B9B8BBCB0BAA0AE5BABA281989C6E27C9ABE53C8"
Data "A6E9963CB0579798C6C976D376F2306101CBDA70C6A9F874161F452FF0D8C176B8ACB33FD6500E2EDE51617891D338DB"
Data "E5F4F8513ABDAD70B2ABAF42E581DAE81E3F13FB87FF70DD7552C7A16EA80A979D6F16A60266ED5419A9C9571D84E8E8"
Data "257EBEA330D5E92837F45AAE5783D9721AD1D13FD1F98EC254A7A391A117B16AB40DCC74F68CF2E49E27681529BFF272"
Data "724DB33D57212F2F300C7321C376EE87FA06213AFA26B9C05598EB763539B77310A2A3735617B80A73DDAEAECEEE1D98"
Data "E9EA1D1A9CEF2CC2753AAB71E58C410CEB575E8C699A353E83D1F0026761AEDBD9F06C6711A6D5593BF323330223E233"
Data "82D20BC20B73DDE1352F3ED3C38B301DE1A567CE258C88CF25CA2E082FCC7587D7BCE04D0F2FC27484D7BCE04D9E8508"
Data "139885BF950F9B3A2591BF5ABF54F2D23EE3C96C9DF7AB94F7CB215596D909CD66FD113418CE600358FE5DFB7448A22E"
Data "0F87D0D3214C1112C6273453957075793824ECFF6FE5B5FD73B1F79CBE0BDFB342FCF48E799ABE88CF64A2E284A9F285"
Data "FC28EA2C27F31673B3AFE674B958903F2B6D291209FB4466CFB3C5FF504B030414000000080000785157E5A8CF4A3003"
Data "0000090B000019001C00636C6F636B732F6669626F6E61636369636C6F636B2E6261735554090003E0032F65E0032F65"
Data "75780B00010400000000040000000095965D6F9B301486EFFD2BAC5C6C4173256CE276416BA5F46B9D34ADD2926AD2EE"
Data "3038092A858A9055DDAFDFB10DB14D48A25DA44ECE79DE735E9B43E123A60C3F54DB1ADFE7A22A9334CDF14D51A5CF58"
Data "BCE352E60542BFF232ABDE167953483CEA5123344F6B29CB5A6E300F198998FAA0DBFC05CF3678D3D479B9C2CFF29D34"
Data "3A365F27B5CC54EAE9FABD91B8262B223ADA84124A0425292519250923829194918C9175BD212F7989D0662BF0E2AD1A"
Data "07A8C84B89C73424340CCEC634822F5118907A25C6BA7040C412DD95190689D13D96726685D1B4554E39393F1F12CE95"
Data "706E84D79EF082B7C2032D77CAC51ACEC7331B4D5B69448F4BEFF33F56C9C289713B99D293CADFB23E71408C73D27EB4"
Data "FC98BD03ECD0F11D46F70F6C981DDE679FF576FB5366B0D91A5F6248C72B58C358A8BF3EF6B52E5B2CD4908207B0EB62"
Data "EB61A616C016BBAD106A20D8E42F1221984CF8FE2729C6855C36E386B020886154DBE04B9E416CA2A2E8DB122BFA4ADD"
Data "748BB52CF5AFB34BF8D9A5A09FCD7C52198C50428D0FB3A466C9F4821266726649CD92E905B537A7BA51D14DB141E82F"
Data "CC05B2AD285E3CDCFDC0BA3C8DE1CE8C2B98739B674E9EE97CF356D974E4A4239356C36E8189575F584EB5E9C3DC81B9"
Data "A69630FF367FBE5FCC623DE3179E718705FFBDB29FBD4DB8A8B2D783A7431B4AADC6EEAB27A4E1BE234FA98C0D0AE911"
Data "61662F9CAF37C7A1AAA839BC820B91C0ECAAEF5FB41535607A7068BCAA4B45CF2C3C7561EEC04CC3ED081896BA95995B"
Data "393270778D5BDCADCDB86744F4543D57CCED14B99DB8D674C7D6D26EA368A011DF6DBCA78CDC3E93D0DBBEA37407A915"
Data "BA2D27DC3B0A57E85DE4F6F2B83D7938742C69CFF46019D701E7FBD6BD32FB1367AAF0C911616687667FE26608E5CB76"
Data "52B51353C29413C5568F4E474496881C42CF8BCF88438CF83F66B8D7AE19B710B7903E1B1F11A791F410C22C4207909D"
Data "E3E39DC4E94EE2F496C4093380A4271A2178B424F0D2064F371ABFC2CB5E83477414B751CABCB085A75D90ED58A6DE3C"
Data "BA70E4B0935D948FE2EE89B635CF3478B1045379092BDA1452BEC23F37A883BE57D52B7E2A9BBCC063C3DCACEB31BB08"
Data "02FC587B21789DC01FF0E87914FC03504B0304140000000800C0765157B5C5BD7A8A040000921400001A001C00636C6F"
Data "636B732F7363726F6C6C776F7264636C6F636B2E626173555409000378022F6578022F6575780B000104000000000400"
Data "00000095586B73E23614FDAE5F71870F0DDE88192C60F398263329311BCF12BC8B9D4DFBAD0494E062E48C511AD25F5F"
Data "C98FC506FB8A0D33B1E4A373AE1E47B27D4F60334FE2280AC50BBCC7C902E6513C5FC1D307081E46843C866211BF07A1"
Data "8C38B4FCE1D41B8FDDC91778F4A6B7301C7BC3AF2D721BAEE16603BE4CB4C832A16B41259536958CAEF847813F3C7D48"
Data "AEE00D5D878246425FEC0CF40BB2E45B494711979227D4CBAE9B42C01592BFF004FE8BE3355C410F4E4EE03951651B64"
Data "0C17F01C27C0B7B3F56BC4F729EFAA3DEBC12738A7B0D4655B97893F4F381753BE81DE79979E7589CFE57DFCB6E1D0A5"
Data "EA47880A100B09F33852DA2FBA3174E07D19AA813CCDE6AB97247E130B324C6146ED0119461B426E6322559056EB52DA"
Data "F99565D7B5C8AECB24BDA6CD64B8E6642DAEEEC3455BD23E659682F39AAD6A444D996AF6EF2C6A2F13EB52CD5A5E5B0B"
Data "8BB8CF7A46E11A6C06C152754FD73A57AA5A4057D0DD21A71A01A231AD730DBD1C24054AC23A450D386201E133291AA8"
Data "5B19AEC6A607E34D9CD60E633F3105058F5E09EA55A0BBA953E6F5CBE0C87B9896B04105737F94799FCB98EFFE5982CE"
Data "2A90F3C39994C0F332E8B85FEE8212785106276E658076B7328C8AA86D5754C77B31EDBDC971C67A281ACFD6B6504EBD"
Data "03F99F1B80EBABEAA9A69DAA82F777BAFDA0B523DACD44B53A70EF4E1E0207BEDDF8412EB4A3B266AA5ABD9CEAD7737B"
Data "08572F2FCEEE37B3F5FAE3E401425606A925EFD89F9BD9CA4278E43384ABD71B679F37B35313E2EC8B66B676294EB611"
Data "7B050DFD2EB1118F65463744478DA67782818F9ACD9D068EB10706C31DA180B8EE06BE3FDC288D69D3FCE19E3B22B8C9"
Data "78474898DC67563038D0ACC030173EAA51FC653022438C9809743CD35660B819B586F1F0639821730DF321C81053E62A"
Data "E6C39021BE2C44CC8722431C9AAB180F478698B4D0309F150CF169AE72C461C910AFE62AE643B387D8F5EE663C6A98CB"
Data "9ED9A495D8817718D9ECD1EA24D469983D5A5D8E3A0DB343CBB6A853F8457BEE244A1A667356F6495D37CCDEAC6ED83A"
Data "0DB333CB07479D82D9951E6E8CFEF12768DD4CF6116B1E1CE175E1115F1E3C44EAF888270F9F6375028821F79FA475F4"
Data "A31EE2B5338778F0E005A22E3266C0FD57983A3E6EBE71ED16DAB111E3EDBDC0D5B00747BE3C6AEADEB40D0C8643C39A"
Data "CC86924D4E43C9B8CB0E07BC631EFB6D52F258896D3019DA67D46086A36D80BACBC3068C38ABF4F9591A6EA46911176D"
Data "695B3A6942F2CC8FBA9BA63F6CAA7E1629F240BBDB8C46C22269A09FE0298CC66991E4699D713C5F65F918559A49AE13"
Data "3497AF4928A4EA6243E685E89C14ECD22B641427B02D6792AEE01D3AFA4B3B56DFE9BEE4AFD0B109806EF7516DB7AC6B"
Data "07300E056F6FE1539AC6A28A9495AC8E6ED44E735B8A47A1285914BEC5AAD3EDAD6AAC2A7F8C94CC846F2549FFE5837D"
Data "133A6D4756FC43450E854EBB9113D8BC72BE80D9E29FB78D84D90684AAF205F123AEFAC3EC2EB50BCBD9F0FB75BA8EC1"
Data "9DDA10CE3694B088759AA8FD35959C2F93363BB32C002F81761666A8EF0D0616FC06AD55CBCA56DF110B3DE1F16BFA0F"
Data "1E840CA30A418B346AE824D3FF504B030414000000080060775157AF558DACBC0500006412000014001C00636C6F636B"
Data "732F776F7264636C6F636B2E6261735554090003A4032F65A4032F6575780B000104000000000400000000ED98DD6FDB"
Data "3610C0DFF9571CF4B0DA2D0388B2E40FA109E0B9CE62D4B1D338D9C7A3E328B5115BCA2465B5F7D7EF8E92C8A3EB16DD"
Data "DB1E16A00579FC1D8FA4EE8E47BF0115C055F69AC3972C7F84D5365B3DC3C301D264B315E2C36607C3022669997C4E72"
Data "F83BCB76700E21C09B37F09463474199C1009EB21C92FD72F7B24DBE52FA821A4107DE425FC29ADA8ADA15B6582FF3E4"
Data "91E845996FD2CF502C65A16411C8A2238B5016912CBAB2E8C9A22F8B010EF9F80FC755705A3D5BC997A2947F96B95C53"
Data "A30850218864E937ABAAC1752E77A92C92952CE57372389AEDFEE15026C81472B749E546EEE541A6729D96A854CAC7E4"
Data "E1F5B32814EEC59BC30CC65E5C04D4B983DF608E9D4ED5B9825B18EBD190049730877BB8C56E04E7D89BC0AF38288A2E"
Data "0D2EB0FB3B0EF5AACE98C66086823E09C638FA0BCE77878201096628A80C2BBF324634AE091785F4944DA0CCD2484E26"
Data "E36C552D7D8402FAFFA317E36191EC0686B02033653DEDDC137898D4FE848B1FE28EC8146E625D6B5CA1700A977404BE"
Data "353443EC0F9245473230FB16E842FA24915080CD5D06BBEC31E1721F204F96DBCA2B85A18558ACF22449F3A440EF7AAB"
Data "DD927CAB6A89C5EB03CC47A4D26A8B51B645DF5491983CD107D5C6EEAEC6339866AB257E6415C820861B748A120A65A9"
Data "C0A542A9FA060B2CD6399E4C85714D752C151E4F664D86968ABE32E91B8CADBF7B6CD22EAC6BA99E4BF599C91E58ACEF"
Data "625D86F52D3570295FAAAEC106EC647D87C3D86347EB334E1D5B550C641F4105C7BBE06020AC212BCF56629C3E023A81"
Data "D09EF0A9CCD155D113F8AC4B2430B4E9D3E0A9AF93B41EF245B1248FF588AE808E5F01073AAD784FAE1183A628042CD7"
Data "4CC4383FD65CE9C734FB3BF25C832B86E377E6F3D2B4C66DC5A6D2B880606096FD1E3AB57A7D0207B96FDC6E19373278"
Data "078191D76B4503EF2FF4CA1D7DF2C88AF3865E6C84DD5A8829203E61493841C5A6D341F563317532A4DCA9BE15529CB2"
Data "1B388A2817C2933E1950AE41B32A379E38D4B7F67A4E3471A86B21379838A483E9742C314CC7D23742C935A92C771449"
Data "EEFA1917B81173BD490B8C1716095FC5CD057442376E268D9B86CC4B9B8450B97C6421EECA2AE2906253298E050E1630"
Data "2CE0263B8EC980D9EC702C74B00EC7B8D1D0311AF26D722C72B0886151E88CB8CB3107E8A6860830F41B052809D2DFA2"
Data "8862CA165D9D2C54C87289CF347CAE81FE6EF3910AAC4AC054424725F09915AEC196D5719615448E06BF717F385929EB"
Data "DF2CAB5EE8AFFEE3AAA5FFEF33D25182F83F23FDC7321256DD154D4F0E742C5B288A0F991034586E7689C05AFEFC7AF3"
Data "D82A654F06ED7897D6BD907AEBBCEE29EC896A017F2DB7AD758EA47669EAED5253255C98F551EFAC099E3ADBB9911B40"
Data "53904EA94C1DCDA7F35B8CE7D1B610623A1F0DEFC6A0BDEF7632BB036F8265F0148BE0852EB587700D3770ED356068C1"
Data "2156E64ED10D1F6064C0AE054F94D7F89668C0BE05EB5A9D2A7CAD7009BAC0AFC12A8E2AB27E0768ABF7D0BC360CC9B6"
Data "A31F40A09F2F609F3C8664FBA9DF3F6689D56BC9906C43E6B903FC296348B623F35202FEC031A7EEF343228A78FEEEE1"
Data "DFA7C95BF14B5508E18762E3FD13E30B4F5740F615436EA1DDA4F2D93A6FD4BDDAEDB0272A97DB510BC774F62FB649F2"
Data "82B717069FCE7E5AA75B7B5AD5C332B2A1293A264F42A4EEDD8B5729BB301BE5BADE64578F7FA2926CAA5D76C5F1D922"
Data "67B630124E296B6F067EAFD4336BC6DE068E3D3FAE5E6A349CDAAC5D15ED8DD0677587BD4F31BAE0128DEDF98F0DE7F8"
Data "203CA35932D45A9478A4674A80F923FEE0F2EBEFF1F837DDA4496B6F5E9987BAD53E23BAA57F11C1092434ADB6849B0C"
Data "1DA4B547183B3F5FB2F966C9BE144E43FF57658FD7549F84784EE83ADDA4F4BB8441F0285A1F71E0026B32E5B5618827"
Data "D222F23D0A0628D0BED7D8A97FA8F975B9A59520D63643DF7D3A13D0F89686B5572AF44AA88E059F5CD90BDCA7E5665B"
Data "993F87D13A6F05BD761BE6B9238AA236FC04DEB3D7FE07504B0304140000000800AB7A5157C7C7089A56010000220300"
Data "0018001C00636C6F636B732F726561646D652D636C6F636B732E7478745554090003E2082F65E4082F6575780B000104"
Data "000000000400000000BD924D6B02311086EFFE8AF7D65377552C05418A08AD3DF4D20A3D96EC66DCA4E6639B0F17FDF5"
Data "CD7E884A2F3D945E422633EF3B9387D908C2BB751CA5B2E52EC37380F4F014628DAD75E0A42DB4E594612598A928BD14"
Data "B1C202E32EEF88A9937693BCCE31AC5107C49AB3401EB42777C01DB43431C5D968D456BF95CE2A254DD5CFB03AFBF416"
Data "D7EA5E3B48A733AC1D0AE6E9763654BF1287FF8ACC25453A206C743EC39323325789D31058A25091865CF771912E1C8D"
Data "0CA29783197EAEEF3A9F9C04DB134CD405A532691004697C461FC038EFA30431585414DA1041EA84714D8E6E922FD2BF"
Data "771D436DDBE6666BE71021D47E9EE74DD364071B432C282BADCE1B164AF1B05FBC2C7762623FEED7E3658F61326D313C"
Data "CAC21A5696F29F40FC0587D6A2EA264A08867697430CBDFA39A30AB256B22D495BD4F7FFB92217FBF53BCC9A05E10B1B"
Data "3AC6753C1E15F97C7B82D9ADE3E81B504B01021E030A0000000000AB7A51570000000000000000000000000700180000"
Data "00000000001000ED4100000000636C6F636B732F5554050003E2082F6575780B000104000000000400000000504B0102"
Data "1E0314000000080020765157E5D90EC05C0500004D230000150018000000000001000000A48141000000636C6F636B73"
Data "2F6261736534636C6F636B2E62617355540500034C012F6575780B000104000000000400000000504B01021E03140000"
Data "00080000785157E5A8CF4A30030000090B0000190018000000000001000000A481EC050000636C6F636B732F6669626F"
Data "6E61636369636C6F636B2E6261735554050003E0032F6575780B000104000000000400000000504B01021E0314000000"
Data "0800C0765157B5C5BD7A8A040000921400001A0018000000000001000000A4816F090000636C6F636B732F7363726F6C"
Data "6C776F7264636C6F636B2E626173555405000378022F6575780B000104000000000400000000504B01021E0314000000"
Data "080060775157AF558DACBC05000064120000140018000000000001000000A4814D0E0000636C6F636B732F776F726463"
Data "6C6F636B2E6261735554050003A4032F6575780B000104000000000400000000504B01021E03140000000800AB7A5157"
Data "C7C7089A5601000022030000180018000000000001000000A48157140000636C6F636B732F726561646D652D636C6F63"
Data "6B732E7478745554050003E2082F6575780B000104000000000400000000504B050600000000060006001F020000FF15"
Data "00000000"
neil
Posts: 594
Joined: Mar 17, 2022 23:26

Re: Scrollling Word Clock

Post by neil »

No frills, basic clock. Not many work on Linux, but this one does.

Code: Select all

' no frills basic clock

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
Post Reply