#include <stdio.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

struct tm tm;

void usage (char *argv [])
{
  fprintf (stderr,
	   "Usage: %s [-d] <date string>\n"
	   " -d: Print in date form, otherwise diary URL form\n",
	   argv [0] );
  exit (1);
  }

int main (char 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;
  }
