38 lines
1.1 KiB
Nim
38 lines
1.1 KiB
Nim
IMPORT TIMES
|
|
IMPORT STRFORMAT
|
|
|
|
PROC PRINTCALENDAR(YEAR, NCOLS: INT) =
|
|
VAR ROWS = 12 DIV NCOLS
|
|
VAR DATE = INITDATETIME(1, MJAN, YEAR, 0, 0, 0, UTC())
|
|
IF ROWS MOD NCOLS != 0:
|
|
INC ROWS
|
|
VAR OFFS = GETDAYOFWEEK(DATE.MONTHDAY, DATE.MONTH, DATE.YEAR).INT
|
|
VAR MONS: ARRAY[12, ARRAY[8, STRING]]
|
|
FOR M IN 0..11:
|
|
MONS[M][0] = &"{$DATE.MONTH:^21}"
|
|
MONS[M][1] = " SU MO TU WE TH FR SA"
|
|
VAR DIM = GETDAYSINMONTH(DATE.MONTH, DATE.YEAR)
|
|
FOR D IN 1..42:
|
|
VAR DAY = D > OFFS AND D <= OFFS + DIM
|
|
VAR STR = IF DAY: &" {D-OFFS:2}" ELSE: " "
|
|
MONS[M][2 + (D - 1) DIV 7] &= STR
|
|
OFFS = (OFFS + DIM) MOD 7
|
|
DATE = DATE + MONTHS(1)
|
|
VAR SNOOPYSTRING, YEARSTRING: STRING
|
|
FORMATVALUE(SNOOPYSTRING, "[SNOOPY PICTURE]", "^" & $(NCOLS * 24 + 4))
|
|
FORMATVALUE(YEARSTRING, $YEAR, "^" & $(NCOLS * 24 + 4))
|
|
ECHO SNOOPYSTRING, "\N" , YEARSTRING, "\N"
|
|
FOR R IN 0..<ROWS:
|
|
VAR S: ARRAY[8, STRING]
|
|
FOR C IN 0..<NCOLS:
|
|
IF R * NCOLS + C > 11:
|
|
BREAK
|
|
FOR I, LINE IN MONS[R * NCOLS + C]:
|
|
S[I] &= &" {LINE}"
|
|
FOR LINE IN S:
|
|
IF LINE == "":
|
|
BREAK
|
|
ECHO LINE
|
|
ECHO ""
|
|
|
|
PRINTCALENDAR(1969, 5)
|