#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wchar.h>


int
main (void)
{
  locale_t l;
  locale_t old;
  struct tm tm;
  char buf[1000];
  wchar_t wbuf[1000];
  int result = 0;
  size_t n;

  l = newlocale (LC_ALL_MASK, "de_DE.ISO-8859-1", NULL);
  if (l == NULL)
    {
      puts ("newlocale failed");
      exit (1);
    }

  memset (&tm, '\0', sizeof (tm));

  tm.tm_year = 102;
  tm.tm_mon = 2;
  tm.tm_mday = 1;

  if (strftime (buf, sizeof (buf), "%e %^B %Y", &tm) == 0)
    {
      puts ("initial strftime failed");
      exit (1);
    }
  if (strcmp (buf, " 1 MARCH 2002") != 0)
    {
      printf ("initial strftime: expected \"%s\", got \"%s\"\n",
	      " 1 MARCH 2002", buf);
      result = 1;
    }
  else
    printf ("got \"%s\"\n", buf);

  /* Now using the extended locale model.  */
  if (strftime_l (buf, sizeof (buf), "%e %^B %Y", &tm, l) == 0)
    {
      puts ("strftime_l failed");
      result = 1;
    }
  else if (strcmp (buf, " 1 M\xc4RZ 2002") != 0)
    {
      printf ("strftime_l: expected \"%s\", got \"%s\"\n",
	      " 1 M\xc4RZ 2002", buf);
      result = 1;
    }
  else
    {
      setlocale (LC_ALL, "de_DE.ISO-8859-1");
      printf ("got \"%s\"\n", buf);
      setlocale (LC_ALL, "C");
    }

  /* And the wide character version.  */
  if (wcsftime_l (wbuf, sizeof (wbuf) / sizeof (wbuf[0]), L"%e %^B %Y", &tm, l)
      == 0)
    {
      puts ("wcsftime_l failed");
      result = 1;
    }
  else if (wcscmp (wbuf, L" 1 M\x00c4RZ 2002") != 0)
    {
      printf ("wcsftime_l: expected \"%ls\", got \"%ls\"\n",
	      L" 1 M\x00c4RZ 2002", wbuf);
      result = 1;
    }
  else
    {
      setlocale (LC_ALL, "de_DE.ISO-8859-1");
      printf ("got \"%ls\"\n", wbuf);
      setlocale (LC_ALL, "C");
    }

  old = uselocale (l);

  n = strftime (buf, sizeof (buf), "%e %^B %Y", &tm);

  /* Switch back.  */
  (void) uselocale (old);

  if (n == 0)
    {
      puts ("strftime after first uselocale failed");
      result = 1;
    }
  else if (strcmp (buf, " 1 M\xc4RZ 2002") != 0)
    {
      printf ("strftime in non-C locale: expected \"%s\", got \"%s\"\n",
	      " 1 M\xc4RZ 2002", buf);
      result = 1;
    }
  else
    {
      setlocale (LC_ALL, "de_DE.ISO-8859-1");
      printf ("got \"%s\"\n", buf);
      setlocale (LC_ALL, "C");
    }

  if (strftime (buf, sizeof (buf), "%e %^B %Y", &tm) == 0)
    {
      puts ("strftime after second uselocale failed");
      result = 1;
    }
  else if (strcmp (buf, " 1 MARCH 2002") != 0)
    {
      printf ("initial strftime: expected \"%s\", got \"%s\"\n",
	      " 1 MARCH 2002", buf);
      result = 1;
    }
  else
    printf ("got \"%s\"\n", buf);

  return result;
}
