#include #include #include #include #include "ocaml.h" CAMLprim value c_set_locale(value v, value str) { int param = 0; char* defined_locale; switch (Int_val(v)) { case 0: param = LC_ALL; break; case 1: param = LC_COLLATE; break; case 2: param = LC_CTYPE; break; case 3: param = LC_MONETARY; break; case 4: param = LC_NUMERIC; break; case 5: param = LC_TIME; break; case 6: param = LC_MESSAGES; break; } const char *locale_name = String_val(str); setlocale(param,locale_name); defined_locale = setlocale(param,NULL); return caml_copy_string(defined_locale); } CAMLprim value c_length( value v ) { char *s; int len = 0; int i = 0, sum = 0; s = String_val(v); while ( ( len = mbtowc (NULL, &s[i], MB_CUR_MAX )) != 0) { i += len; sum++; } return Val_int(sum); }