64 lines
1.6 KiB
Lua
64 lines
1.6 KiB
Lua
FUNCTION PRINT_CAL(YEAR)
|
|
LOCAL MONTHS={"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE",
|
|
"JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"}
|
|
LOCAL DAYSTITLE="MO TU WE TH FR SA SU"
|
|
LOCAL DAYSPERMONTH={31,28,31,30,31,30,31,31,30,31,30,31}
|
|
LOCAL STARTDAY=((YEAR-1)*365+MATH.FLOOR((YEAR-1)/4)-MATH.FLOOR((YEAR-1)/100)+MATH.FLOOR((YEAR-1)/400))%7
|
|
IF YEAR%4==0 AND YEAR%100~=0 OR YEAR%400==0 THEN
|
|
DAYSPERMONTH[2]=29
|
|
END
|
|
LOCAL SEP=5
|
|
LOCAL MONTHWIDTH=DAYSTITLE:LEN()
|
|
LOCAL CALWIDTH=3*MONTHWIDTH+2*SEP
|
|
|
|
FUNCTION CENTER(STR, WIDTH)
|
|
LOCAL FILL1=MATH.FLOOR((WIDTH-STR:LEN())/2)
|
|
LOCAL FILL2=WIDTH-STR:LEN()-FILL1
|
|
RETURN STRING.REP(" ",FILL1)..STR..STRING.REP(" ",FILL2)
|
|
END
|
|
|
|
FUNCTION MAKEMONTH(NAME, SKIP,DAYS)
|
|
LOCAL CAL={
|
|
CENTER(NAME,MONTHWIDTH),
|
|
DAYSTITLE
|
|
}
|
|
LOCAL CURDAY=1-SKIP
|
|
WHILE #CAL<9 DO
|
|
LINE={}
|
|
FOR I=1,7 DO
|
|
IF CURDAY<1 OR CURDAY>DAYS THEN
|
|
LINE[I]=" "
|
|
ELSE
|
|
LINE[I]=STRING.FORMAT("%2D",CURDAY)
|
|
END
|
|
CURDAY=CURDAY+1
|
|
END
|
|
CAL[#CAL+1]=TABLE.CONCAT(LINE," ")
|
|
END
|
|
RETURN CAL
|
|
END
|
|
|
|
LOCAL CALENDAR={}
|
|
FOR I,MONTH IN IPAIRS(MONTHS) DO
|
|
LOCAL DPM=DAYSPERMONTH[I]
|
|
CALENDAR[I]=MAKEMONTH(MONTH, STARTDAY, DPM)
|
|
STARTDAY=(STARTDAY+DPM)%7
|
|
END
|
|
|
|
|
|
PRINT(CENTER("[SNOOPY]",CALWIDTH):UPPER(),"\N")
|
|
PRINT(CENTER("--- "..YEAR.." ---",CALWIDTH):UPPER(),"\N")
|
|
|
|
FOR Q=0,3 DO
|
|
FOR L=1,9 DO
|
|
LINE={}
|
|
FOR M=1,3 DO
|
|
LINE[M]=CALENDAR[Q*3+M][L]
|
|
END
|
|
PRINT(TABLE.CONCAT(LINE,STRING.REP(" ",SEP)):UPPER())
|
|
END
|
|
END
|
|
END
|
|
|
|
PRINT_CAL(1969)
|