'
' Another HUG demonstration program
'
' November 2009, PvE - GPL
'
' -------------------------------------------------------------------------------------------------------------------------------------
INCLUDE "hug.bac"
CONST OffSet = 10
CONST LedLength = 50
CONST LedWidth = 5
CONST DigitWidth = 2*LedWidth + LedLength
SUB Draw_Led(NUMBER which, NUMBER xcoord, STRING color)
SELECT which
CASE 1
SQUARE(color, OffSet + LedWidth + xcoord, OffSet, LedLength, LedWidth, TRUE)
CASE 2
SQUARE(color, OffSet + xcoord, OffSet + LedWidth, LedWidth, LedLength, TRUE)
CASE 3
SQUARE(color, OffSet + LedWidth + LedLength + xcoord, OffSet + LedWidth, LedWidth, LedLength, TRUE)
CASE 4
SQUARE(color, OffSet + LedWidth + xcoord, OffSet + LedWidth + LedLength, LedLength, LedWidth, TRUE)
CASE 5
SQUARE(color, OffSet + xcoord, OffSet + 2*LedWidth + LedLength, LedWidth, LedLength, TRUE)
CASE 6
SQUARE(color, OffSet + LedWidth + LedLength + xcoord, OffSet + 2*LedWidth + LedLength, LedWidth, LedLength, TRUE)
CASE 7
SQUARE(color, OffSet + LedWidth + xcoord, OffSet + 2*LedWidth + 2*LedLength, LedLength, LedWidth, TRUE)
END SELECT
END SUB
SUB Draw_One(NUMBER xcoord)
Draw_Led(1, xcoord, "#FFFFFF")
Draw_Led(2, xcoord, "#FFFFFF")
Draw_Led(3, xcoord, "#0000FF")
Draw_Led(4, xcoord, "#FFFFFF")
Draw_Led(5, xcoord, "#FFFFFF")
Draw_Led(6, xcoord, "#0000FF")
Draw_Led(7, xcoord, "#FFFFFF")
END SUB
SUB Draw_Two(NUMBER xcoord)
Draw_Led(1, xcoord, "#00FF00")
Draw_Led(2, xcoord, "#FFFFFF")
Draw_Led(3, xcoord, "#00FF00")
Draw_Led(4, xcoord, "#00FF00")
Draw_Led(5, xcoord, "#00FF00")
Draw_Led(6, xcoord, "#FFFFFF")
Draw_Led(7, xcoord, "#00FF00")
END SUB
SUB Draw_Three(NUMBER xcoord)
Draw_Led(1, xcoord, "#FF0000")
Draw_Led(2, xcoord, "#FFFFFF")
Draw_Led(3, xcoord, "#FF0000")
Draw_Led(4, xcoord, "#FF0000")
Draw_Led(5, xcoord, "#FFFFFF")
Draw_Led(6, xcoord, "#FF0000")
Draw_Led(7, xcoord, "#FF0000")
END SUB
SUB Draw_Four(NUMBER xcoord)
Draw_Led(1, xcoord, "#FFFFFF")
Draw_Led(2, xcoord, "#808000")
Draw_Led(3, xcoord, "#808000")
Draw_Led(4, xcoord, "#808000")
Draw_Led(5, xcoord, "#FFFFFF")
Draw_Led(6, xcoord, "#808000")
Draw_Led(7, xcoord, "#FFFFFF")
END SUB
SUB Draw_Five(NUMBER xcoord)
Draw_Led(1, xcoord, "#008080")
Draw_Led(2, xcoord, "#008080")
Draw_Led(3, xcoord, "#FFFFFF")
Draw_Led(4, xcoord, "#008080")
Draw_Led(5, xcoord, "#FFFFFF")
Draw_Led(6, xcoord, "#008080")
Draw_Led(7, xcoord, "#008080")
END SUB
SUB Draw_Six(NUMBER xcoord)
Draw_Led(1, xcoord, "#FFFFFF")
Draw_Led(2, xcoord, "#808080")
Draw_Led(3, xcoord, "#FFFFFF")
Draw_Led(4, xcoord, "#808080")
Draw_Led(5, xcoord, "#808080")
Draw_Led(6, xcoord, "#808080")
Draw_Led(7, xcoord, "#808080")
END SUB
SUB Draw_Seven(NUMBER xcoord)
Draw_Led(1, xcoord, "#CCCC00")
Draw_Led(2, xcoord, "#FFFFFF")
Draw_Led(3, xcoord, "#CCCC00")
Draw_Led(4, xcoord, "#FFFFFF")
Draw_Led(5, xcoord, "#FFFFFF")
Draw_Led(6, xcoord, "#CCCC00")
Draw_Led(7, xcoord, "#FFFFFF")
END SUB
SUB Draw_Eight(NUMBER xcoord)
Draw_Led(1, xcoord, "#FF00FF")
Draw_Led(2, xcoord, "#FF00FF")
Draw_Led(3, xcoord, "#FF00FF")
Draw_Led(4, xcoord, "#FF00FF")
Draw_Led(5, xcoord, "#FF00FF")
Draw_Led(6, xcoord, "#FF00FF")
Draw_Led(7, xcoord, "#FF00FF")
END SUB
SUB Draw_Nine(NUMBER xcoord)
Draw_Led(1, xcoord, "#000000")
Draw_Led(2, xcoord, "#000000")
Draw_Led(3, xcoord, "#000000")
Draw_Led(4, xcoord, "#000000")
Draw_Led(5, xcoord, "#FFFFFF")
Draw_Led(6, xcoord, "#000000")
Draw_Led(7, xcoord, "#000000")
END SUB
SUB Draw_Zero(NUMBER xcoord)
Draw_Led(1, xcoord, "#00FFFF")
Draw_Led(2, xcoord, "#00FFFF")
Draw_Led(3, xcoord, "#00FFFF")
Draw_Led(4, xcoord, "#FFFFFF")
Draw_Led(5, xcoord, "#00FFFF")
Draw_Led(6, xcoord, "#00FFFF")
Draw_Led(7, xcoord, "#00FFFF")
END SUB
FUNCTION Update_Time
LOCAL hour$, minute$, second$, curtime$
LOCAL digit
hour$ = STR$(HOUR(NOW))
IF LEN(hour$) < 2 THEN
hour$ = CONCAT$("0", hour$)
END IF
minute$ = STR$(MINUTE(NOW))
IF LEN(minute$) < 2 THEN
minute$ = CONCAT$("0", minute$)
END IF
second$ = STR$(SECOND(NOW))
IF LEN(second$) < 2 THEN
second$ = CONCAT$("0", second$)
END IF
curtime$ = CONCAT$(hour$, minute$, second$)
FOR digit = 0 TO LEN(curtime$) - 1
SELECT MID$(curtime$, digit + 1, 1)
CASE "0"
Draw_Zero(DigitWidth*digit + OffSet*digit)
CASE "1"
Draw_One(DigitWidth*digit + OffSet*digit)
CASE "2"
Draw_Two(DigitWidth*digit + OffSet*digit)
CASE "3"
Draw_Three(DigitWidth*digit + OffSet*digit)
CASE "4"
Draw_Four(DigitWidth*digit + OffSet*digit)
CASE "5"
Draw_Five(DigitWidth*digit + OffSet*digit)
CASE "6"
Draw_Six(DigitWidth*digit + OffSet*digit)
CASE "7"
Draw_Seven(DigitWidth*digit + OffSet*digit)
CASE "8"
Draw_Eight(DigitWidth*digit + OffSet*digit)
CASE "9"
Draw_Nine(DigitWidth*digit + OffSet*digit)
END SELECT
NEXT
OUT(CONCAT$(MONTH$(NOW), " ", STR$(DAY(NOW)), ", ", STR$(YEAR(NOW))), "#000000", "#FFFFFF", 3*OffSet + 2*DigitWidth, 2*OffSet + 2*LedLength + 3*LedWidth)
RETURN TRUE
END FUNCTION
' -------------------------------------------------------------------------------------------------------------------------------------
' We're using canvas so no widget scaling
HUGOPTIONS("NOSCALING")
' Define GUI
app = WINDOW("Digital clock", 7*OffSet + 6*DigitWidth + 20, 2*OffSet + 2*LedLength + 3*LedWidth + 40)
frame = FRAME(7*OffSet + 6*DigitWidth + 10, 2*OffSet + 2*LedLength + 3*LedWidth + 30)
ATTACH (app, frame, 5, 5)
canvas = CANVAS(7*OffSet + 6*DigitWidth, 2*OffSet + 2*LedLength + 3*LedWidth + 20)
ATTACH (app, canvas, 10, 10)
' Setup timeout in GTK mainloop
TIMEOUT (1000, Update_Time)
' Draw time already
Update_Time
' Endless GTK mainloop
DISPLAY