+/** \brief allocates string of certain size on NMEM handle
+ \param mem NMEM handle
+ \param src string
+ \param n size of string
+ \returns duplicated string (0 terminated)
+ */
+YAZ_EXPORT char *nmem_strdupn(NMEM mem, const char *src, size_t n);
+
+/** \brief allocates sub strings out of string using certain delimitors
+ \param nmem NMEM handle
+ \param delim delimitor chars (splits on each char in there)
+ \param dstr string to be split
+ \param darray result string array for each sub string
+ \param num number of result strings
+*/
+YAZ_EXPORT void nmem_strsplit(NMEM nmem, const char *delim,
+ const char *dstr,
+ char ***darray, int *num);
+
+/** \brief allocates sub strings out of string using certain delimitors
+ \param nmem NMEM handle
+ \param delim delimitor chars (splits on each char in there)
+ \param dstr string to be split
+ \param darray result string array for each sub string
+ \param num number of result strings
+ \param collapse 1=collapse multiple delims to one; 0=no collapse
+*/
+YAZ_EXPORT void nmem_strsplitx(NMEM nmem, const char *delim,
+ const char *dstr,
+ char ***darray, int *num,
+ int collapse);
+
+/** \brief splits string into sub strings delimited by blanks
+ \param nmem NMEM handle
+ \param dstr string to be split
+ \param darray result string array for each sub string
+ \param num number of result strings
+*/
+YAZ_EXPORT void nmem_strsplit_blank(NMEM nmem, const char *dstr,
+ char ***darray, int *num);
+
+
+/** \brief allocates sub strings out of string using certain delimitors
+ \param nmem NMEM handle
+ \param delim delimitor chars (splits on each char in there)
+ \param dstr string to be split
+ \param darray result string array for each sub string
+ \param num number of result strings
+ \param collapse 1=collapse multiple delims to one; 0=no collapse
+ \param escape_char != 0, an escape char (could be \)
+*/
+YAZ_EXPORT void nmem_strsplit_escape(NMEM nmem, const char *delim,
+ const char *dstr,
+ char ***darray, int *num, int collapse,
+ int escape_char);
+
+/** \brief allocates sub strings out of string using certain delimitors
+ \param nmem NMEM handle
+ \param delim delimitor chars (splits on each char in there)
+ \param dstr string to be split
+ \param darray result string array for each sub string
+ \param num number of result strings
+ \param collapse 1=collapse multiple delims to one; 0=no collapse
+ \param escape_char != 0, an escape char (could be \)
+ \param subst_escape 1=substitute escapes, 0 leave as is
+*/
+YAZ_EXPORT void nmem_strsplit_escape2(NMEM nmem, const char *delim,
+ const char *dstr,
+ char ***darray, int *num, int collapse,
+ int escape_char, int subst_escape);
+
+/** \brief allocates and sets integer for NMEM
+ \param nmem NMEM handle
+ \param v integer value
+ \returns pointer to created integer
+*/
+YAZ_EXPORT nmem_int_t *nmem_intdup(NMEM nmem, nmem_int_t v);
+
+/** \brief allocates and sets boolean for NMEM
+ \param nmem NMEM handle
+ \param v value (0=false, != 0 true)
+ \returns pointer to created boolean
+*/
+YAZ_EXPORT nmem_bool_t *nmem_booldup(NMEM nmem, nmem_bool_t v);
+
+/** \brief transfers memory from one NMEM handle to another
+ \param src source NMEM handle
+ \param dst destination NMEM handle
+ */
+YAZ_EXPORT void nmem_transfer(NMEM dst, NMEM src);