+#define _init_char_str(...) str _s=(__VA_ARGS__)
+#define _head_char_str(ONE,ALL) ONE=(ALL?*ALL:0),ALL
+#define _test_char_str(ONE,...) ONE
+#define _free_char_str(...) FALSE
+#define _next_char_str(ONE,...) ONE=*(++_s)
+#define _count_char_str(S) strlen(S)
+#define _init_str_str(...) str _s=(__VA_ARGS__)
+#define _head_str_str(ONE,ALL) ONE=utf8_copy(ONE,ALL),ALL
+#define _test_str_str(ONE,...) *ONE
+#define _free_str_str(...) FALSE
+#define _next_str_str(ONE,...) ONE=utf8_copy(ONE,(_s+=strlen(ONE)))
+#define _COUNT_STR_STR int _count_str_str(str S) { int l=0; str X=""; for_each2(str,X,str,S){l++;} return l; }
+#define _init_void_array(...) int _i=(__VA_ARGS__)
+#define _head_void_array(ONE,ALL,LEN) ONE=*ALL,0
+#define _test_void_array(ONE,ALL,LEN) _i < LEN
+#define _free_void_array(...) FALSE
+#define _next_void_array(ONE,ALL,LEN) ONE=ALL[++_i]
+//_count_void_array not defined
+#define _init_str_array(...) int _i=(__VA_ARGS__)
+#define _head_str_array(ONE,ALL,LEN) ONE=(str)*ALL,0
+#define _test_str_array(ONE,ALL,LEN) _i < LEN
+#define _free_str_array(...) FALSE
+#define _next_str_array(ONE,ALL,LEN) ONE=(str)ALL[++_i]
+//_count_str_array not defined
+#define _init_str_file(ALL) file _f=fopen(ALL,"r")
+#define _head_str_file(ONE,ALL) ALL
+#define _test_str_file(ONE,...) (!feof(_f)&&(ONE=fget_str(_f)))
+#define _free_str_file(...) fclose(_f)
+#define _next_str_file(...)
+#define _COUNT_STR_FILE int _count_str_file(str F) { int l=0; str X; for_each2(str,X,file,F){l++;} return l; }
+#define _init_str_stream(...) (__VA_ARGS__)
+#define _head_str_stream(ONE,ALL,LEN) (ONE=(str)get_buf(LEN)) && fgets(ONE,LEN,ALL) && strrchr(ONE,'\n') && (ONE[strlen(ONE)-1]=0)
+#define _test_str_stream(ONE,ALL,LEN) !feof(ALL)
+#define _free_str_stream(...) FALSE
+#define _next_str_stream(ONE,ALL,LEN) ((ONE=(str)get_buf(LEN)) && fgets(ONE,LEN,ALL) && strrchr(ONE,'\n') && (ONE[strlen(ONE)-1]=0))
+//_count_str_stream not defined
+#define _EXPORT_COUNTERS _COUNT_STR_STR _COUNT_STR_FILE