aboutsummaryrefslogtreecommitdiff
path: root/stub/locale.c
diff options
context:
space:
mode:
Diffstat (limited to 'stub/locale.c')
-rwxr-xr-xstub/locale.c45
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);
+
+}