--- zdump.8.orig 29 Oct 2003 20:43:27 -0000 1.5 +++ zdump.8 12 Mar 2007 13:02:35 -0000 @@ -10,6 +10,7 @@ .Nm zdump .Op Fl \-version .Op Fl v +.Op Fl s Ar startyear .Op Fl c Ar cutoffyear .Op Ar zonename ... .Sh DESCRIPTION @@ -39,6 +40,8 @@ if the given time is Daylight Saving Tim otherwise. .It Fl c Ar cutoffyear Cut off the verbose output near the start of the given year. +.It Fl s Ar startyear +Begin the verbose output after the start of the given year. .El .Sh SEE ALSO .Xr ctime 3 , --- zdump.c.orig 4 Dec 2006 17:24:40 -0000 1.16 +++ zdump.c 12 Mar 2007 13:02:35 -0000 @@ -146,6 +146,9 @@ char * argv[]; register char * cutoff; register int cutyear; register long cuttime; + register char * beginning; + register int beginyear; + register long begintime; char ** fakeenv; time_t now; time_t t; @@ -170,9 +173,12 @@ char * argv[]; } vflag = 0; cutoff = NULL; - while ((c = getopt(argc, argv, "c:v")) == 'c' || c == 'v') + beginning = NULL; + while ((c = getopt(argc, argv, "s:c:v")) == 'c' || c == 's' || c == 'v') if (c == 'v') vflag = 1; + else if (c == 's') + beginning = optarg; else cutoff = optarg; if ((c != EOF && c != -1) || (optind == argc - 1 && strcmp(argv[optind], "=") == 0)) { @@ -190,6 +196,15 @@ _("%s: usage is %s [ --version ] [ -v ] cuttime += DAYSPERNYEAR + isleap(y); cuttime *= SECSPERHOUR * HOURSPERDAY; } + if ( beginning != NULL) { + int y; + + beginyear = atoi(beginning); + begintime = 0; + for (y = EPOCH_YEAR; y < beginyear; ++y) + begintime += DAYSPERNYEAR + isleap(y); + begintime *= SECSPERHOUR * HOURSPERDAY; + } (void) time(&now); longest = 0; for (i = optind; i < argc; ++i) @@ -232,6 +247,8 @@ _("%s: usage is %s [ --version ] [ -v ] t = hibit; if (t > 0) /* time_t is unsigned */ t = 0; + if ( beginning != NULL) + t = begintime; show(argv[i], t, TRUE); t += SECSPERHOUR * HOURSPERDAY; show(argv[i], t, TRUE);