53 lines
1.3 KiB
Plaintext
53 lines
1.3 KiB
Plaintext
Red [ "Print Calendar in six months across and for two rows - Hinjo, 20 July 2025" ]
|
|
|
|
months: system/locale/months
|
|
|
|
; get day from year, month, week, and weekday!
|
|
getday: function [y[integer!] m[integer!] w[integer!] wd[integer!]] [
|
|
fd: to-date reduce [1 m y] ; first day!
|
|
swd: fd/weekday + 1 if swd > 7 [swd: 1] ; shift from mon=1 to sun=1
|
|
ofs: (w - 1) * 7 + (wd - swd) ; offset
|
|
d: fd + ofs ; date
|
|
either d/month = m [d/day][0] ; return day or zero!
|
|
]
|
|
|
|
; center string
|
|
centr: function [str wid] [
|
|
gap: wid - length? str
|
|
lpad: to-integer gap / 2
|
|
pad/left str wid - lpad
|
|
pad str wid
|
|
]
|
|
|
|
either "" = y: ask "Year (ENTER for current): " [y: now/year][y: to-integer y]
|
|
|
|
print centr "[ S N O O P Y ]" 130 ; print snoopy block centered
|
|
print centr to-string y 130 ; print year
|
|
|
|
foreach r [[1 2 3 4 5 6][7 8 9 10 11 12]] [
|
|
; print month's name
|
|
foreach m r [
|
|
prin rejoin [centr months/:m 21 " "]
|
|
] print ""
|
|
|
|
; print for each week across months
|
|
foreach w [0 1 2 3 4 5 6] [
|
|
; each months
|
|
foreach m r [
|
|
either w = 0 [ ; print weekdays
|
|
foreach d ["Su" "Mo" "Tu" "We" "Th" "Fr" "Sa"]
|
|
[prin [form pad d 3]]
|
|
] [
|
|
foreach wd [1 2 3 4 5 6 7] [ ; print dates
|
|
; reconstruct the day
|
|
either 0 < dt: getday y m w wd [
|
|
prin [form pad/left dt 2]
|
|
] [
|
|
prin " "
|
|
] prin " "
|
|
]
|
|
] prin " "
|
|
] print ""
|
|
] print ""
|
|
]
|