From 61002ca34597abbe1273cfad1abd7490b6e71065 Mon Sep 17 00:00:00 2001 From: =?utf-8?q?P=C3=A1draig_Brady?= Date: Tue, 2 Oct 2007 00:22:45 +0100 Subject: [PATCH] cal: Add support for highlighting an arbitrary date. This is done by calling cal with the extra day parameter like: cal 14 9 1752 Note the tests were updated to use the new syntax. Note also that this patch changes the -y option to always print a full year, even if a month or the -[13] options are specified. This matches the cal operation from bsdmainutils on debian and also allows one to print a full year while highlighting a particular date. Signed-off-by: Pádraig Brady --- TODO | 2 - misc-utils/Makefile.am | 6 ----- misc-utils/cal.1 | 4 ++- misc-utils/cal.c | 49 +++++++++++++++++++++++++++-------------------- tests/commands.sh.in | 1 - tests/ts-cal-1 | 18 ++++++++-------- tests/ts-cal-3 | 18 ++++++++-------- tests/ts-cal-y | 18 ++++++++-------- 8 files changed, 58 insertions(+), 58 deletions(-) diff --git a/TODO b/TODO index 9777371..774fed6 100644 --- a/TODO +++ b/TODO @@ -29,8 +29,6 @@ From: LaMont Jones Subject: Re: [PATCH] losetup: support password hashing and specifying the key length - * add an option to the cal command to control highlight date - * convet po/ files to UTF-8 * use rpmatch() for all Y/N questions diff --git a/misc-utils/Makefile.am b/misc-utils/Makefile.am index e9f304f..45ee3cc 100644 --- a/misc-utils/Makefile.am +++ b/misc-utils/Makefile.am @@ -75,9 +75,3 @@ install-exec-hook:: endif endif endif - -noinst_PROGRAMS = cal_test -cal_test_SOURCES = cal.c -cal_test_CPPFLAGS = -DTEST_CAL $(AM_CPPFLAGS) -cal_test_LDADD = $(cal_LDADD) - diff --git a/misc-utils/cal.1 b/misc-utils/cal.1 index 8ec44b0..53a6299 100644 --- a/misc-utils/cal.1 +++ b/misc-utils/cal.1 @@ -43,7 +43,7 @@ .Sh SYNOPSIS .Nm cal .Op Fl smjy13 -.Op [ Ar month ] Ar year +.Op [ [ Ar day] Ar month ] Ar year .Sh DESCRIPTION .Nm Cal displays a simple calendar. @@ -76,6 +76,8 @@ will .Em not display a calendar for 1989. Two parameters denote the month (1 - 12) and year. +Three parameters denote the day (1-31), month and year, +and the day will be highlighted if the calendar is displayed on a terminal. If no parameters are specified, the current month's calendar is displayed. .Pp diff --git a/misc-utils/cal.c b/misc-utils/cal.c index 77333d8..a981729 100644 --- a/misc-utils/cal.c +++ b/misc-utils/cal.c @@ -341,6 +341,10 @@ main(int argc, char **argv) { day = month = year = 0; switch(argc) { + case 3: + if ((day = atoi(*argv++)) < 1 || month > 31) + errx(1, _("illegal day value: use 1-%d"), 31); + /* FALLTHROUGH */ case 2: if ((month = atoi(*argv++)) < 1 || month > 12) errx(1, _("illegal month value: use 1-12")); @@ -348,38 +352,38 @@ main(int argc, char **argv) { case 1: if ((year = atoi(*argv)) < 1 || year > 9999) errx(1, _("illegal year value: use 1-9999")); + if (day) { + int dm = days_in_month[leap_year(year)][month]; + if (day > dm) + errx(1, _("illegal day value: use 1-%d"), dm); + day = day_in_year(day, month, year); + } + if (!month) + yflag=1; break; case 0: - { -#ifdef TEST_CAL - char *e = getenv("TEST_TIME"); - - if (e && isdigit((unsigned char) *e)) - now = atol(e); - else -#endif - time(&now); - } + time(&now); local_time = localtime(&now); - if (isatty(1)) - day = local_time->tm_yday + 1; + day = local_time->tm_yday + 1; year = local_time->tm_year + 1900; - if (!yflag) - month = local_time->tm_mon + 1; + month = local_time->tm_mon + 1; break; default: usage(); } headers_init(); - if (month && num_months == 1) - monthly(day, month, year); - else if (month && num_months == 3) - monthly3(day, month, year); - else if (julian) + if (!isatty(1)) + day = 0; /* don't highlight */ + + if (yflag && julian) j_yearly(day, year); - else + else if (yflag) yearly(day, year); + else if (num_months == 1) + monthly(day, month, year); + else if (num_months == 3) + monthly3(day, month, year); exit(0); } @@ -633,6 +637,9 @@ day_array(int day, int month, int year, int *days) { if (month == 9 && year == 1752) { d_sep1752 = julian ? j_sep1752 : sep1752; memcpy(days, d_sep1752 + week1stday, MAXDAYS * sizeof(int)); + for (dm=0; dm> $TS_OUTPUT +$TS_CMD_CAL -1m $MYTIME >> $TS_OUTPUT ts_log "Gregorian - Sunday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -1s + $TS_CMD_CAL -1s $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -1s >> $TS_OUTPUT +$TS_CMD_CAL -1s $MYTIME >> $TS_OUTPUT ts_log "Julian - Monday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -1mj + $TS_CMD_CAL -1mj $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -1mj >> $TS_OUTPUT +$TS_CMD_CAL -1mj $MYTIME >> $TS_OUTPUT ts_log "Julian - Sunday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -1sj + $TS_CMD_CAL -1sj $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -1sj >> $TS_OUTPUT +$TS_CMD_CAL -1sj $MYTIME >> $TS_OUTPUT ts_finalize diff --git a/tests/ts-cal-3 b/tests/ts-cal-3 index 877c194..aa815f5 100755 --- a/tests/ts-cal-3 +++ b/tests/ts-cal-3 @@ -26,35 +26,35 @@ ts_init "$*" set -o pipefail USETERM=$( ts_has_option "useterm" "$*" ) -MYTIME=1159350000 +MYTIME="27 09 2006" [ "$USETERM" == "yes" ] && TS_VERBOSE="yes" ts_log "" ts_log "Gregorian - Monday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -3m + $TS_CMD_CAL -3m $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -3m >> $TS_OUTPUT +$TS_CMD_CAL -3m $MYTIME >> $TS_OUTPUT ts_log "Gregorian - Sunday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -3s + $TS_CMD_CAL -3s $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -3s >> $TS_OUTPUT +$TS_CMD_CAL -3s $MYTIME >> $TS_OUTPUT ts_log "Julian - Monday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -3mj + $TS_CMD_CAL -3mj $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -3mj >> $TS_OUTPUT +$TS_CMD_CAL -3mj $MYTIME >> $TS_OUTPUT ts_log "Julian - Sunday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -3sj + $TS_CMD_CAL -3sj $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -3sj >> $TS_OUTPUT +$TS_CMD_CAL -3sj $MYTIME >> $TS_OUTPUT ts_finalize diff --git a/tests/ts-cal-y b/tests/ts-cal-y index 4a18445..769373a 100755 --- a/tests/ts-cal-y +++ b/tests/ts-cal-y @@ -26,35 +26,35 @@ ts_init "$*" set -o pipefail USETERM=$( ts_has_option "useterm" "$*" ) -MYTIME=1164800000 # 29-Nov-2006 +MYTIME="29 11 2006" [ "$USETERM" == "yes" ] && TS_VERBOSE="yes" ts_log "" ts_log "Gregorian - Monday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -ym + $TS_CMD_CAL -ym $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -ym >> $TS_OUTPUT +$TS_CMD_CAL -ym $MYTIME >> $TS_OUTPUT ts_log "Gregorian - Sunday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -ys + $TS_CMD_CAL -ys $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -ys >> $TS_OUTPUT +$TS_CMD_CAL -ys $MYTIME >> $TS_OUTPUT ts_log "Julian - Monday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -ymj + $TS_CMD_CAL -ymj $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -ymj >> $TS_OUTPUT +$TS_CMD_CAL -ymj $MYTIME >> $TS_OUTPUT ts_log "Julian - Sunday-based week" if [ "$USETERM" == "yes" ]; then - TEST_TIME=$MYTIME $TS_CMD_CALTEST -ysj + $TS_CMD_CAL -ysj $MYTIME fi -TEST_TIME=$MYTIME $TS_CMD_CALTEST -ysj >> $TS_OUTPUT +$TS_CMD_CAL -ysj $MYTIME >> $TS_OUTPUT ts_finalize -- 1.5.0.6