#!../blt_wish -f if [file exists ../library] { set blt_library ../library } option add *Calendar.Frame.borderWidth 2 option add *Calendar.Frame.relief raised option add *Calendar.Label.font *-Helvetica-Bold-R-*-14-* option add *Calendar*background steelblue option add *Calendar*foreground white set monthInfo(Jan) { January 31 } set monthInfo(Feb) { February 28 } set monthInfo(Mar) { March 31 } set monthInfo(Apr) { April 30 } set monthInfo(May) { May 31 } set monthInfo(Jun) { June 30 } set monthInfo(Jul) { July 31 } set monthInfo(Aug) { August 31 } set monthInfo(Sep) { September 30 } set monthInfo(Oct) { October 31 } set monthInfo(Nov) { November 30 } set monthInfo(Dec) { December 31 } set abbrDays { Sun Mon Tue Wed Thu Fri Sat } proc Calendar { weekday day month year } { global monthInfo abbrDays set wkdayOffset [lsearch $abbrDays $weekday] if { $wkdayOffset < 0 } { error "Invalid week day \"$weekday\"" } set dayOffset [expr ($day-1)%7] if { $wkdayOffset < $dayOffset } { set wkdayOffset [expr $wkdayOffset+7] } set wkday [expr $wkdayOffset-$dayOffset] if { [info commands .calendar] == ".calendar" } { destroy .calendar } frame .calendar -class Calendar if ![info exists monthInfo($month)] { error "Invalid month \"$month\"" } set info $monthInfo($month) label .calendar.month \ -text "[lindex $info 0] $year" \ -font *-New*Century*Schoolbook-Bold-R-*-18-* blt_table .calendar .calendar.month 1,1 -cspan 7 set cnt 1 frame .calendar.weekframe -relief sunken -bd 2 blt_table .calendar .calendar.weekframe 2,0 -columnspan 8 -fill both foreach dayName $abbrDays { set name [string tolower $dayName] label .calendar.$name \ -text $dayName \ -font *-New*Century*Schoolbook-Bold-R-*-14-* blt_table .calendar .calendar.$name 2,$cnt -pady 2 -padx 2 incr cnt } blt_table column .calendar configure all -padx 4 blt_table column .calendar configure 0 -width 0 blt_table row .calendar configure 2 -pady 4 set week 0 set numDays [lindex $info 1] for { set cnt 1 } { $cnt <= $numDays } { incr cnt } { label .calendar.day${cnt} -text $cnt if { $cnt == $day } { .calendar.day${cnt} configure -relief raised } if { $wkday == 7 } { incr week set wkday 0 } incr wkday blt_table .calendar .calendar.day${cnt} $week+3,$wkday -fill both } button .calendar.quit -command { destroy . } -text {Quit} blt_table .calendar \ .calendar.quit $week+4,6 -cspan 2 -ipadx 10 -pady 4 -ipady 2 -anchor e pack append . .calendar {fill expand frame center} } set date [exec date] scan $date {%s %s %d %*s %*s %s} weekday month day year Calendar $weekday $day $month $year wm minsize . 0 0