#undef G_DISABLE_ASSERT
#undef G_LOG_DOMAIN

#ifdef GLIB_COMPILATION
#undef GLIB_COMPILATION
#endif

#include "glib.h"

#include <stdio.h>
#include <string.h>
#include <locale.h>

/* These only work in the POSIX locale, maybe C too - 
 * type POSIX into the program to check them
 */
char* posix_tests [] = {
  "19981024",
  "981024",
  "October 1998",
  "October 98",
  "oCT 98",
  "10/24/98",
  "10 -- 24 -- 98",
  "10/24/1998",
  "October 24, 1998",
  NULL
};

int main(int argc, char** argv)
{
  GDate* d;
  gchar* loc;
  gchar input[1024];

  loc = setlocale(LC_ALL,"");
  if (loc) 
    g_print("\nLocale set to %s\n", loc);
  else 
    g_print("\nLocale unchanged\n");

  d = g_date_new();

  while (fgets(input, 1023, stdin))
    {
      if (input[0] == '\n') 
        {
          g_print("Enter a date to parse and press enter, or type 'POSIX':\n");
          continue;
        }

      if (strcmp(input,"POSIX\n") == 0) 
        {
          char** s = posix_tests;
          while (*s) {
            g_date_set_parse(d, *s);
            
            g_print("POSIXy parse test '%s' ...", *s);

            if (!g_date_valid(d))
              {
                g_print(" failed.\n");
              }
            else 
              {
                gchar buf[256];
                
                g_date_strftime(buf,100," parsed '%x' (%B %d %Y)\n",
                                d);
                g_print("%s", buf);
              }

            ++s;
          }
        }
      else 
        {
          g_date_set_parse(d, input);
          
          if (!g_date_valid(d))
            {
              g_print("Parse failed.\n");
            }
          else 
            {
              gchar buf[256];
              
              g_date_strftime(buf,100,"Parsed: '%x' (%B %d %Y)\n",
                              d);
              g_print("%s", buf);
            }
        }
    }

  g_date_free(d);

  return 0;
}


