#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <locale.h>
#include <locale/localeinfo.h>

int
main (void)
{
  int32_t table_size, idx, i, found;
  const int32_t *symb_table;
  const unsigned char *extra;
  uint32_t nrules;
  char *ca;
  union locale_data_value u;

  ca = setlocale (LC_ALL, "da_DK.ISO-8859-1");
  if (ca == NULL)
    {
      printf ("cannot set locale: %m\n");
      return 1;
    }
  printf ("current locale : %s\n", ca);

  u.string = nl_langinfo (_NL_COLLATE_NRULES);
  nrules = u.word;
  if (nrules == 0)
    {
      printf("No rule\n");
      return 1;
    }

  u.string = nl_langinfo (_NL_COLLATE_SYMB_HASH_SIZEMB);
  table_size = u.word;
  symb_table = (const int32_t *) nl_langinfo (_NL_COLLATE_SYMB_TABLEMB);
  extra = (const unsigned char *) nl_langinfo (_NL_COLLATE_SYMB_EXTRAMB);

  found = 0;
  for (i = 0; i < table_size; ++i)
    {
      if (symb_table[2 * i] != 0)
	{
	  char elem[256];
	  idx = symb_table[2 * i + 1];
	  strncpy (elem, (const char *) (extra + idx + 1), extra[idx]);
	  elem[extra[idx]] = '\0';
	  printf ("Found a collating element: %s\n", elem);
	  ++found;
	}
    }
  if (found == 0)
    {
      printf ("No collating element!\n");
      return 1;
    }
  else if (found != 4)
    {
      printf ("expected 4 collating elements, found %d\n", found);
      return 1;
    }

  return 0;
}
