diff options
author | Sébastien Dailly <sebastien@chimrod.com> | 2016-11-15 13:00:01 +0100 |
---|---|---|
committer | Sébastien Dailly <sebastien@chimrod.com> | 2016-11-15 13:00:01 +0100 |
commit | ef312564ca84a2b49fc291434d8fb2f8501bb618 (patch) | |
tree | 79415fcf225e6da1042c8edaae5e4a74c7a983cb /stub/locale.c |
Initial commit
Diffstat (limited to 'stub/locale.c')
-rwxr-xr-x | stub/locale.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/stub/locale.c b/stub/locale.c new file mode 100755 index 0000000..c46b493 --- /dev/null +++ b/stub/locale.c @@ -0,0 +1,45 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <locale.h> + +#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); + +} |