#ifndef STRING_HEAD
#define STRING_HEAD done

#ifndef MYSTR
#define MAX_STRLEN conf_item_max()
#define STR_NEW TRUE
#ifdef STR_NEW
typedef struct  STRING {int len, total; char **s;} String;
#else 
typedef struct  STRING {int len, total; char *s;} String;
#endif
int str_addfile(String *s, char *fname);

int str_total(void);
int str_checknulls(String *xitem, char *msg);
int s_checknulls(char *s, int len, char *msg);

void str_printf(String *s,char *arg_list, ...);
void str_lock(String *s);
void str_unlock(String *s);
int str_append(String *xitem, char *fname);
String *str_newsz(int sz);
void str_clear(String *dst); 
void str_clearbig(String *dst); 
String *str_new(void);
void str_init(String *s);
int str_len(String *s);
void str_adds(String *dst, char *s, int len);
void str_add(String *dst, String *src);
void str_expand(String *s, int len);
void str_setlen(String *s, int len);
void mem_blocks_show_str(String *str);
void str_setsize(String *s, int len);
void str_copys(String *dst, char *src, int len);
void str_copy(String *dst, String *src);
void str_free(String *s) ;
void str_dump(String *s) ;
void str_add_rest(String *dst, String *src, int from);
char *str_s(String *s);
int str_write(String *xitem, char *fname);
int str_read(String *s, char *fname);
void str_addsn(String *a, char *s);
void str_copysn(String *a, char *s);
void str_right(String *a, int r);
void mem_blocks_show(void);
int mem_block_total(void);
char *mem_malloc(int sz);
void mem_free(char *xx, char *file, int line);
int lib_test_malloc(int h);
int lib_test_str(void);
int str_getline(String *item, int *upto, char *bf, int bfsz);

#define  MYSTR TRUE
#endif

#endif
