Rubyでも書いた

require 'date'

if ARGV.empty?
	print "calendar / usage: [month] [year]\n"
	exit 1
end

month = ARGV.shift.to_i
year = ARGV.shift.to_i

day = 1
wday = 0

print "Sun\tMon\tTue\tWed\tThu\tFri\tSat\n"
while true
	if(Date.valid_date?(year,month,day))
		target_day = Date.new(year,month,day)
	end
	
	if day > 1 && Date.valid_date?(year,month,day) || (day == 1 && target_day.wday == wday)
		print "#{day}\t"
		day += 1
	else 
		print "\t"
	end
	
	wday = (wday + 1) % 7
	
	if wday == 0
		# line break
		print "\n";
		if !Date.valid_date?(year,month,day) && wday == 0
			# exit loop
			break
		end
	end
end