11-13-2023, 10:52 PM
Here is another version I found on my NAS from way back:
Code: (Select All)
_TITLE "MATRIX v1.0"
'-----| by harixxx
'-----| 6-16-2010
CONST OBJECT = 256
CONST TAIL = 64
CONST LIMIT = 30
SCREEN _NEWIMAGE(640, 480, 256)
VIEW PRINT 1 TO 30
RANDOMIZE TIMER
DIM Char(3, OBJECT, TAIL), CharSet(52) AS STRING * 1
DIM Count%
DIM Fcount%
DIM Mpos%
DIM Message$
DIM Tfcount%
DIM NewMessage$
FOR Count% = 0 TO 63
OUT 968, Count%
OUT 969, 0
OUT 969, Count%
OUT 969, 0
NEXT
FOR Count% = 0 TO 36
CharSet(Count%) = CHR$(Count% + 129)
NEXT
FOR Count% = 37 TO 52
CharSet(Count%) = CHR$(Count% + 187)
NEXT
FOR Count% = 1 TO OBJECT
Char(0, Count%, TAIL) = INT(RND * 80) + 1
Char(1, Count%, TAIL) = INT(RND * 30) + 1
Char(2, Count%, TAIL) = RND * 52
Char(3, Count%, TAIL) = RND + .1
NEXT
Fcount% = 0
Tfcount% = 0
Mpos% = 0
Message$ = DayOfWeek$ + CustomMessage$
DO
_LIMIT LIMIT
IF Tfcount% = LIMIT * 60 THEN Tfcount% = 0
IF Tfcount% = 0 THEN NewMessage$ = DayOfWeek$ + CustomMessage$
Tfcount% = Tfcount% + 1
Fcount% = Fcount% + 1
IF Fcount% = LIMIT \ 4 THEN
Fcount% = 0
Mpos% = Mpos% + 1
IF Mpos% > LEN(Message$) THEN
Mpos% = 1
IF NewMessage$ <> Message$ THEN Message$ = NewMessage$
END IF
END IF
Title$ = MID$(Message$, Mpos%, 10)
Title$ = LEFT$(Title$ + " ", 10)
SHOWCLOCK Title$
LOOP UNTIL INKEY$ <> ""
'----------------------------------------------------------------------------------------------------------------------
FUNCTION CustomMessage$ ()
DIM Message$
IF _FILEEXISTS("mclock.txt") THEN
OPEN "mclock.txt" FOR INPUT AS #1
LINE INPUT #1, Message$
CLOSE #1
END IF
CustomMessage$ = Message$
END FUNCTION
'----------------------------------------------------------------------------------------------------------------------
FUNCTION DayOfWeek$ ()
DIM d%, m%, y%, c%
DIM WeekDay%
DIM Month$
DIM Day$
DIM DayName$
DIM DaySuffix$
d% = VAL(MID$(DATE$, 4, 2))
m% = VAL(LEFT$(DATE$, 2))
y% = VAL(RIGHT$(DATE$, 2))
c% = VAL(MID$(DATE$, 7, 2))
SELECT CASE m%
CASE 1: Month$ = "January"
CASE 2: Month$ = "February"
CASE 3: Month$ = "March"
CASE 4: Month$ = "April"
CASE 5: Month$ = "May"
CASE 6: Month$ = "June"
CASE 7: Month$ = "July"
CASE 8: Month$ = "August"
CASE 9: Month$ = "September"
CASE 10: Month$ = "October"
CASE 11: Month$ = "November"
CASE 12: Month$ = "December"
END SELECT
Day$ = STR$(d%)
IF d% > 10 AND d% < 20 THEN
DaySuffix$ = "th, "
ELSE
SELECT CASE RIGHT$(Day$, 1)
CASE "0", "4", "5", "6", "7", "8", "9": DaySuffix$ = "th, "
CASE "1": DaySuffix$ = "st, "
CASE "2": DaySuffix$ = "nd, "
CASE "3": DaySuffix$ = "rd, "
END SELECT
END IF
Day$ = Day$ + DaySuffix$
IF m% < 3 THEN m% = m% + 12: y% = y% - 1
WeekDay% = ((c% \ 4 - (2 * c%) - 1) + ((5 * y%) \ 4) + (26 * (m% + 1) \ 10) + d%) MOD 7
IF WeekDay% < 0 THEN WeekDay% = WeekDay% + 7
SELECT CASE WeekDay%
CASE 0: DayName$ = " Sunday, "
CASE 1: DayName$ = " Monday, "
CASE 2: DayName$ = " Tuesday, "
CASE 3: DayName$ = " Wednesday, "
CASE 4: DayName$ = " Thursday, "
CASE 5: DayName$ = " Friday, "
CASE 6: DayName$ = " Saturday, "
END SELECT
DayOfWeek$ = DayName$ + Month$ + Day$ + RIGHT$(DATE$, 4)
END FUNCTION
'----------------------------------------------------------------------------------------------------------------------
SUB SHOWCLOCK (Title$)
SHARED Char()
SHARED CharSet() AS STRING * 1
REDIM bg(80, 30)
DIM tm$
DIM hr%
COLOR 1
LOCATE 1, 1
PRINT Title$
tm$ = TIME$
hr% = VAL(LEFT$(tm$, INSTR(tm$, ":") - 1))
IF hr% > 12 THEN hr% = hr% - 12
tm$ = LTRIM$(STR$(hr%)) + RIGHT$(tm$, LEN(tm$) - INSTR(tm$, ":") + 1)
IF LEN(tm$) < 8 THEN tm$ = "0" + tm$
PRINT " "; tm$; " "
FOR i = 0 TO 28
FOR j = 0 TO 78
IF POINT(j, i) > 0 THEN
bg(j + 1, i + 1) = 40
bg(j + 2, i + 1) = -20
bg(j + 2, i + 2) = -20
END IF
NEXT j, i
FOR i = 1 TO OBJECT
FOR j = 1 TO TAIL - 1
FOR k = 0 TO 2
Char(k, i, j) = Char(k, i, j + 1)
NEXT
IF RND < .1 THEN Char(k, i, j) = (Char(k, i, j) + 1) MOD 53
NEXT
Char(1, i, TAIL) = Char(1, i, TAIL) + Char(3, i, TAIL)
IF Char(1, i, TAIL) > 30 THEN
Char(0, i, TAIL) = INT(RND * 80) + 1
Char(1, i, TAIL) = 1
Char(2, i, TAIL) = RND * 52
Char(3, i, TAIL) = RND + .1
END IF
Char(2, i, TAIL) = (Char(2, i, TAIL) + 1) MOD 53
NEXT
FOR i = 1 TO OBJECT
FOR j = 1 TO TAIL
yy = Char(1, i, j)
xx = Char(0, i, j)
IF yy > 0 AND yy < 31 AND xx > 0 AND xx < 81 THEN
IF j = TAIL THEN c = 35 ELSE c = INT(j / TAIL * 30)
c = c + bg(xx, yy)
c = 1 * -(c < 1) + c * -(c > 0)
c = 63 * -(c > 63) + c * -(c < 64)
COLOR c
LOCATE yy, xx
PRINT CharSet(Char(2, i, j));
END IF
NEXT j, i
_DISPLAY
END SUB