displays a simple calendar. If no arguments are specified, the current
month is displayed.
.sp
-The \fImonth\fR may be specified as a number (1-12) or as a month name according
-to the current locales.
+The \fImonth\fR may be specified as a number (1-12), as a month name or as an
+abbreviated month name according to the current locales.
.SH OPTIONS
.TP
\fB\-1\fR, \fB\-\-one\fR
will not display a calendar for 1989.
.TP
\fBSingle string parameter (e.g. 'cal tomorrow' or 'cal August')\fR
-Specifies \fItimestamp\fR or a \fImonth name\fR according to the current
+Specifies \fItimestamp\fR or a \fImonth name\fR (or abbreviated name) according to the current
locales.
.sp
The special placeholders are accepted when parsing timestamp, "now" may be used
struct cal_control {
const char *full_month[MONTHS_IN_YEAR]; /* month names */
+ const char *abbr_month[MONTHS_IN_YEAR]; /* abbreviated month names */
+
int colormode; /* day and week number highlight */
int num_months; /* number of requested monts */
int span_months; /* span the date */
ctl->full_month[i] = nl_langinfo(MON_1 + i);
}
+static void init_abbr_monthnames(struct cal_control *ctl)
+{
+ size_t i;
+
+ if (ctl->abbr_month[0] != '\0')
+ return; /* already initialized */
+
+ for (i = 0; i < MONTHS_IN_YEAR; i++)
+ ctl->abbr_month[i] = nl_langinfo(ABMON_1 + i);
+}
+
static int monthname_to_number(struct cal_control *ctl, const char *name)
{
size_t i;
init_monthnames(ctl);
-
for (i = 0; i < MONTHS_IN_YEAR; i++)
if (strcasecmp(ctl->full_month[i], name) == 0)
return i + 1;
+ init_abbr_monthnames(ctl);
+ for (i = 0; i < MONTHS_IN_YEAR; i++)
+ if (strcasecmp(ctl->abbr_month[i], name) == 0)
+ return i + 1;
+
return -EINVAL;
}