00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef COMMON_WSTR_H
00021 #define COMMON_WSTR_H
00022
00023 #include <common/ac/stddef.h>
00024 #include <common/ac/stdlib.h>
00025 #include <common/main.h>
00026
00033 typedef unsigned long wstr_hash_ty;
00034
00035 struct wstring_ty
00036 {
00037 wstr_hash_ty wstr_hash;
00038 wstring_ty *wstr_next;
00039 long wstr_references;
00040 size_t wstr_length;
00041 wchar_t wstr_text[1];
00042 };
00043
00044 #define wstr_n_from_c_release() wstr_n_from_c((const char *)0, 0)
00045
00046 void wstr_release(void);
00047 wstring_ty *wstr_from_c(const char *);
00048 wstring_ty *wstr_from_wc(const wchar_t *);
00049 wstring_ty *wstr_n_from_c(const char *, size_t);
00050 wstring_ty *wstr_n_from_wc(const wchar_t *, size_t);
00051 wstring_ty *wstr_copy(wstring_ty *);
00052 void wstr_free(wstring_ty *);
00053 wstring_ty *wstr_catenate(const wstring_ty *, const wstring_ty *);
00054 wstring_ty *wstr_cat_three(const wstring_ty *, const wstring_ty *,
00055 const wstring_ty *);
00056 wstring_ty *wstr_to_upper(const wstring_ty *);
00057 wstring_ty *wstr_to_lower(const wstring_ty *);
00058 wstring_ty *wstr_capitalize(const wstring_ty *);
00059 wstring_ty *wstr_to_ident(const wstring_ty *);
00060 void wstr_to_mbs(const wstring_ty *, char **, size_t *);
00061 int wstr_equal(const wstring_ty *, const wstring_ty *);
00062
00063 #ifndef DEBUG
00064 #define wstr_equal(s1, s2) ((s1) == (s2))
00065 #endif
00066
00067 struct string_ty;
00068 struct string_ty *wstr_to_str(const wstring_ty *);
00069 wstring_ty *str_to_wstr(const struct string_ty *);
00070
00071 wstring_ty *wstr_quote_shell(wstring_ty *);
00072 int wstr_column_width(wstring_ty *);
00073
00075 #endif // COMMON_WSTR_H