#!/usr/bin/awk -f
BEGIN {
if (ARGC<2) {
print "Mu-Cal v 0.1 (Nov 1999) by Andrea Manzini <linux@netbusiness.it>"
print "\nUsage: mucal <month> <year>"
print "\nParameters are NOT optional; Month must be expressed in 'literal'"
print "format (e.g. jan, Febbraio, Mar) in english or italian."
print "Years < 99 are taken as 19XX years." 
exit } 
M["JAN"]=1; M["FEB"]=2; M["MAR"]=3; M["APR"]=4
M["MAY"]=5; M["JUN"]=6; M["JUL"]=7; M["AUG"]=8
M["SEP"]=9; M["OCT"]=10; M["NOV"]=11; M["DEC"]=12
M["GEN"]=1; M["MAG"]=5; M["GIU"]=6; M["LUG"]=7
M["AGO"]=8; M["SET"]=9; M["OTT"]=10; M["DIC"]=12
split("31 28 31 30 31 30 31 31 30 31 30 31",GM," ");
y=ARGV[2]; m=toupper(substr(ARGV[1],1,3))
if (y<100) y+=1900
if (leap(y)) GM[2]++
print "\033[1m      "m" "y
print "\033[0mMo Tu We Th Fr Sa Su"
m=M[m]; p=f(y,m); ORS=""
for(i=0;i<p;i++) print "   "
for(i=1;i<=GM[m];i++) {
  printf "%2d ", i
  if (p++==6) { print "\n"; p=0 }
}
print "\n"
}

# returns first day-of week for a month
function f(y,m)
{if (m<3) {m+=12; a--}
s=(2*m)+int(3*(m+1)/5)+y+int(y/4)+6
if (y>1582) s+=int(y/400)-int(y/100)+2
return s%7}

function leap(y)
{if (y%4) return 0
if (y<1582) return 1
if (y%100) return 1
if (y%400) return 0
return 1}
