NB. Inspired by APL work of Eugene McDonnell in 1979 NB. J translation by Keith Smillie, Comp. Sci, U. Alberta. NB. e-mail: K._W._Smillie@mts.ucs.ualberta.ca NB. Revised by Eugene McDonnell, 1992 NB. Additions by L.J.Dickey NB. Utilities pi =. >: @ i. div =. <. @ % & 4 100 400 mod =. 4 100 400 & | dayno =. 7&| NB. Constants DAYS =. ' Su Mo Tu We Th Fr Sa' MONTHS =. 'JanFebMarAprMayJunJulAugSepOctNovDec' LENGTHS =. 31 28 31 30 31 30 31 31 30 31 30 31 mn =. _12&{.@]@{&(_3]\MONTHS) NB. Month name centered ly =. 0&(~:/ . =) @ mod NB. Leap year test NB. Month lengths adjusted for leap year LENGTHSadj =. LENGTHS&+@((LENGTHS=28)&(*. ly))@] ml =. {LENGTHSadj NB. Month length nydate =. >:@(365&*+-/@div)@(]@-&1601) NB. New Year's date odate =. +/@({.LENGTHSadj) NB. Ordinal date mb =. -@dayno@(odate+nydate@]) NB. First day of month NB. Month calendar without headings mctable=. ,"_1@(6 7&$)@(mb |. (42&{.) @ (3&":) @,.@pi@ml) mc =. (mn@[), (DAYS&,@mctable) NB. Month calendar cal =. (i.@[) mc"0] NB. Calendar for given number of months calendar =. <"2@(4 3&cal) NB. Calendar with 4 rows & 3 columns NB. Additions by L.J.Dickey NB. calendar 0{6!:0 '' NB. Calendar for this year. NB. calendar 1+ 0{6!:0 '' NB. Calendar for next year. NB. mc ~/ 0 _1 + 2{.6!:0 '' NB. Calendar for this month. NB. mc ~/ 2{.6!:0 '' NB. Calendar for next month.