calendar_basic_month

one of the documented procedures in this installation of the ACS
Usage:
calendar_basic_month {-calendar_details "" -date "" -days_of_week "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" -large_calendar_p 1 -master_bgcolor "black" -header_bgcolor "black" -header_text_color "white" -header_text_size "+2" -day_number_template {<!--\$julian_date--><font size=1>\$day_number</font>} -day_header_size 2 -day_header_bgcolor "#666666" -calendar_width "100%" -day_bgcolor "#DDDDDD" -day_text_color "white" -empty_bgcolor "white" -next_month_template "" -prev_month_template "" -prev_next_links_in_title 0 -fill_all_days 0 }
What it does:
Returns a calendar for a specific month, with details supplied by Julian date. Defaults to this month. To specify details for the individual days (if large_calendar_p is set) put data in an ns_set calendar_details. The key is the Julian date of the day, and the value is a string (possibly with HTML formatting) that represents the details.
Defined in: /web/philip/tcl/ad-calendar-widget.tcl

Source code:

arg_parser_for_calendar_basic_month $args


    set selection [calendar_get_info_from_db $date]
    set_variables_after_query

    if { $calendar_details == "" } {
	set calendar_details [ns_set create calendar_details]
    }

    set day_of_week $first_day_of_month
    set julian_date $first_julian_date

    set month_heading [format "%s %s" $month $year]
    set next_month_url ""
    set prev_month_url ""

    if { $prev_month_template != "" } { 
	set ansi_date [ns_urlencode $prev_month]
	set prev_month_url [subst $prev_month_template]
    }
    if { $next_month_template != "" } {
	set ansi_date [ns_urlencode $next_month]
	set next_month_url [subst $next_month_template]
    }

    # We offer an option to put the links to next and previous months in the title bar
    if { $prev_next_links_in_title == 0 } {
	set title "<td colspan=7 align=center><font size=$header_text_size color=$header_text_color><b>$month_heading</b></font></td>"
    } else {
	set title "
<td colspan=7>
  <table width=100% cellpadding=0 cellspacing=0 border=0>
  <tr>
    <td align=left>$prev_month_url</td>
    <td align=center><font size=$header_text_size color=$header_text_color><b>$month_heading</b></font></td>
    <td align=right>$next_month_url</td>
  </tr>
  </table>
</td>
"
    }

    # Write out the header and the days of the week
    append output "<table bgcolor=$master_bgcolor cellpadding=3 cellspacing=1  border=0 width=$calendar_width>
    <tr bgcolor=$header_bgcolor>
    $title
    </tr>
    <tr bgcolor=$day_header_bgcolor>"


    foreach day_of_week $days_of_week {
	append output "<td width=14% align=center><font face=\"Verdana,Arial,Helvetica\" size=$day_header_size color=$day_text_color><b>$day_of_week</b></font></td>"

    }

    append output "</tr><tr>"

    if { $fill_all_days == 0 } {
	for { set n 1} { $n < $first_day_of_month } { incr n } {
	    append output "<td bgcolor=$empty_bgcolor align=right valign=top></td>"
	}
    }

    set day_of_week 1
    set julian_date $first_julian_date
    set day_number $first_day

    while {1} {

        if {$julian_date < $first_julian_date_of_month} {
            set before_month_p 1
            set after_month_p 0
        } elseif {$julian_date > $last_julian_date_in_month} {
            set before_month_p 0
            set after_month_p 1
        } else {
            set before_month_p 0
            set after_month_p 0
        }

        if {$julian_date == $first_julian_date_of_month} {
            set day_number 1
        } elseif {$julian_date > $last_julian_date} {
            break
        } elseif {$julian_date == [expr $last_julian_date_in_month +1]} {
            set day_number 1
        }

	if { $day_of_week == 1} {
	    append output "\n<tr>\n"
	}

	set skip_day 0
	if {$before_month_p || $after_month_p} {
	    append output "<td bgcolor=$empty_bgcolor align=right valign=top>&nbsp;"
	    if { $fill_all_days == 0 } {
		set skip_day 1
	    } else {
		append output "[subst $day_number_template]&nbsp;"
	    }
	} else {
	    append output "<td bgcolor=$day_bgcolor align=right valign=top>[subst $day_number_template]&nbsp;"
	}

	if { (! $skip_day) && $large_calendar_p == 1 } {
	    append output "<div align=left>"

	    set calendar_day_index [ns_set find $calendar_details $julian_date]
	    
	    while { $calendar_day_index >= 0 } {
		    
		set calendar_day [ns_set value $calendar_details $calendar_day_index]
		ns_set delete $calendar_details $calendar_day_index
		
		append output "$calendar_day"
		
		set calendar_day_index [ns_set find $calendar_details $julian_date]
		
	    }
	    
	    append output "</div>"
	}

	append output "</td>\n"

	incr day_of_week
	incr julian_date
        incr day_number

	if { $day_of_week > 7 } {
	    set day_of_week 1
	    append output "</tr>\n"
	}
    }


    # There are two ways to display previous and next month link - this is the default
    if { $prev_next_links_in_title == 0 } {
	append output "
    <tr bgcolor=white>
    <td align=center colspan=7>$prev_month_url$next_month_url</td>
    </tr>"
    }

    append output "</table>"

    return $output



philg@mit.edu