clock's valid year : a catch example

A script to check the limit of clock scan procedure. It's also an example of catch command.


 proc isValidYear { year } {
     set valid 1
     if [catch {clock scan "1/1/$year" }] {
         set valid 0
     } 
     return $valid
 }

 proc limitvalidyear { year direction} {
     set stillvalid [isValidYear $year]
     if {! $stillvalid} {
         return -1
     }  
     while {$stillvalid} {
         if {[isValidYear $year]} {
             incr year $direction
         } else {
             set stillvalid 0
         } 
     }
     return $year
 }

 proc systeminfo {} {
     global tcl_platform 
     global tcl_patchLevel
     puts "(machine:$tcl_platform(machine), platform:$tcl_platform(platform), os version:$tcl_platform(osVersion), tcl version:$tcl_patchLevel)"
 }
 
 systeminfo 
 puts "maximum year is [limitvalidyear 2010 1]"
 puts "minimum year is [limitvalidyear 2010 -1]"

 (machine:intel, platform:windows, os version:5.1, tcl version:8.4.19)
 maximum year is 2038
 minimum year is 1901

 (machine:intel, platform:windows, os version:5.1, tcl version:8.5.2)
 maximum year is 100000
 minimum year is -1

 (machine:i386, platform:unix, os version:9.8.0, tcl version:8.4.7) 
 maximum year is 2038
 minimum year is 1901

 (machine:i386, platform:unix, os version:9.8.0, tcl version:8.5.5) 
 maximum year is 100000
 minimum year is -1