
#include <stdbool.h>
#include <stdio.h>
#include <unicode/ucol.h>

#define CAPACITY 1024

int main(int argc, char *argv[])
{
  UErrorCode	 status;
  UCollator	*collator;
  const char	*requested_locale = NULL;
  const char	*valid_locale;
  const char	*actual_locale;
  char		 canonical[CAPACITY] = {0};
  char		 variant[CAPACITY] = {0};
  char		 basename[CAPACITY] = {0};
  char		 getname[CAPACITY] = {0};
  char		 langtag[CAPACITY] = {0};
  char		 langtag_s[CAPACITY] = {0};

  if (argc > 1)
    {
      requested_locale = argv[1];
      status = U_ZERO_ERROR;
      uloc_canonicalize(requested_locale, canonical, CAPACITY, &status);
      if (U_FAILURE(status))
	printf("canonicalize error: %s\n", u_errorName(status));
      status = U_ZERO_ERROR;
      uloc_getBaseName(requested_locale, basename, CAPACITY, &status);
      if (U_FAILURE(status))
	printf("basename error: %s\n", u_errorName(status));
      status = U_ZERO_ERROR;
      uloc_getName(requested_locale, getname, CAPACITY, &status);
      if (U_FAILURE(status))
	printf("getname error: %s\n", u_errorName(status));
      status = U_ZERO_ERROR;
      uloc_getVariant(requested_locale, variant, CAPACITY, &status);
      if (U_FAILURE(status))
	printf("variant error: %s\n", u_errorName(status));
      status = U_ZERO_ERROR;
      uloc_toLanguageTag(requested_locale, langtag, CAPACITY, false, &status);
      if (U_FAILURE(status))
	printf("langtag error: %s\n", u_errorName(status));
      uloc_toLanguageTag(requested_locale, langtag_s, CAPACITY, true, &status);
      if (U_FAILURE(status))
	printf("langtag strict error: %s\n", u_errorName(status));
    }
  else if (argc > 2)
    fprintf(stderr, "too many arguments");
  
  status = U_ZERO_ERROR;
  collator = ucol_open(requested_locale, &status);
  valid_locale = ucol_getLocaleByType(collator, ULOC_VALID_LOCALE, &status);
  actual_locale = ucol_getLocaleByType(collator, ULOC_ACTUAL_LOCALE, &status);
  printf("canonicalize: %s\n", canonical);
  printf("langtag       : %s\n", langtag);
  printf("langtag strict: %s\n", langtag_s);
  printf("variant: %s\n", variant);
  printf("getBaseName: %s\n", basename);
  printf("getName: %s\n", getname);
  printf("valid locale: %s\n", valid_locale);
  printf("actual locale: %s\n", actual_locale);
  ucol_close(collator);
}
