Cover V12, I07
jul2003.tar

Listing 8 get_dow

# This function returns the day of week where
# 0 = sunday, 1 = monday, ... 6 = saturday
# This algorithm is from Mike Keith's World of Words & Numbers:
# http://users.aol.com/s6sj7gt/mikecal.htm
# arguments: $1 = month, $2 = day, $3 = year in format YYYY
get_dow()
{
# [.] means to truncate downward to the nearest integer
# dayofweek=([23m/9] + d + 4 + y + [z/4] - [z/100] + [z/400] - 2 (if m >= 3)) mod 7
typeset -i DOW
typeset -i z
typeset -i multpr

if [ $1 -lt 3 ]
then # year determination
   z=$(($3-1))
else
   z=$3
fi
if [ $1 -ge 3 ]
then # set the multiplier
   multpr=2
else
   multpr=0
fi
DOW=$(( ((23 * $1/9) + $2 + 4 + $3 + ($z/4) - ($z/100) + ($z/400) - $multpr) % 7))

echo $DOW
}

# return a day string 
# sunday, monday, .. saturday
get_day_string()
{
case $1 in
   0)  echo "sunday";;
   1)  echo "monday";;
   2)  echo "tuesday";;
   3)  echo "wednesday";;
   4)  echo "thursday";;
   5)  echo "friday";;
   6)  echo "saturday";;
   *)  echo "error";;
esac
}