From d7a92b89944d16410c03bfc58f360f783cc435c4 Mon Sep 17 00:00:00 2001
From: =?utf8?q?P=C3=A1draig=20Brady?=
Date: Tue, 2 Oct 2007 00:22:45 +0100
Subject: [PATCH] cal: add support for highlighting an arbitrary date
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
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 11716482..f063f011 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 e9f304f4..45ee3ccc 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 8ec44b04..53a62992 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 10bb8b5c..d5bcee64 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 877c194e..aa815f58 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 4a18445d..769373a9 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
--
2.39.5