#include #include #include #include #include struct tm tm; void usage (char *argv []) { fprintf (stderr, "Usage: %s [-d] \n" " -d: Print in date form, otherwise diary URL form\n", argv [0] ); exit (1); } int main (int argc, char *argv []) { char *months [] = {"foo", "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"}; int day; int month; int year; int dateform = 0; int i = 1; /* index of date arg in argv */ time_t seconds; struct tm *ltime; /* local time return */ #define BUFLEN 80 char buf [BUFLEN]; if ((argc > 3) || (argc < 2)) usage (argv); if (argc == 3) { if (strcmp (argv [1], "-d")) usage (argv); else dateform = 1; i = 2; /* arg */ } if (strlen (argv [i]) < 8) usage (argv); /* work backwards because we destroy the string */ day = atoi (&argv [i] [6]); argv [i] [6] = '\0'; month = atoi (&argv [i] [4]); argv [i] [4] = '\0'; year = atoi (argv [i]); if (dateform) { tm.tm_mday = day; tm.tm_mon = month - 1; tm.tm_year = year - 1900; /* Grrr. */ /* * This seems counterproductive, but it gets us the day of the * week for free. */ seconds = mktime (&tm); ltime = localtime (&seconds); strftime (buf, BUFLEN, "%A, %e %B %Y", ltime); puts (buf); } else printf ("%s%d.html#%d\n", months [month], year, day); return 0; }