/** 
 * \file util.c
 * A set of common utility functions found
 * in all samples.
 *
 * Copyright (C) 2008 Linus Walleij <triad@df.lth.se>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */
#include "util.h"
#ifdef HAVE_LANGINFO_H
#include <langinfo.h>
#endif
#ifdef HAVE_LOCALE_H
#include <locale.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void checklang(void)
{
  char *langsuff = NULL;
  char *lang = getenv("LANG");

#ifdef HAVE_LOCALE_H
  // Set the locale in accordance with environment
  setlocale(LC_ALL, "");
#endif
#ifdef HAVE_LANGINFO_H
  langsuff = nl_langinfo(CODESET);
#else
  /*
   * Check environment variables $LANG and $LC_CTYPE
   * to see if we want to support UTF-8 unicode
   */
  if (lang != NULL) {
    if (strlen(lang) > 5) {
      langsuff = &lang[strlen(lang)-5];
    }
  }
#endif
  if (langsuff == NULL) {
    printf("Could not determine language suffix for your system. Please check your setup!\n");
  } else if (strcmp(langsuff, "UTF-8")) {
    printf("Your system does not appear to have UTF-8 enabled ($LANG=\"%s\")\n", lang);
    printf("If you want to have support for diacritics and Unicode characters,\n");
    printf("please switch your locale to an UTF-8 locale, e.g. \"en_US.UTF-8\".\n");
  }
}
