1370b324cSopenharmony_ci// Common/StringConvert.h
2370b324cSopenharmony_ci
3370b324cSopenharmony_ci#ifndef ZIP7_INC_COMMON_STRING_CONVERT_H
4370b324cSopenharmony_ci#define ZIP7_INC_COMMON_STRING_CONVERT_H
5370b324cSopenharmony_ci
6370b324cSopenharmony_ci#include "MyString.h"
7370b324cSopenharmony_ci#include "MyWindows.h"
8370b324cSopenharmony_ci
9370b324cSopenharmony_ciUString MultiByteToUnicodeString(const AString &src, UINT codePage = CP_ACP);
10370b324cSopenharmony_ciUString MultiByteToUnicodeString(const char *src, UINT codePage = CP_ACP);
11370b324cSopenharmony_ci
12370b324cSopenharmony_ci// optimized versions that work faster for ASCII strings
13370b324cSopenharmony_civoid MultiByteToUnicodeString2(UString &dest, const AString &src, UINT codePage = CP_ACP);
14370b324cSopenharmony_ci// void UnicodeStringToMultiByte2(AString &dest, const UString &s, UINT codePage, char defaultChar, bool &defaultCharWasUsed);
15370b324cSopenharmony_civoid UnicodeStringToMultiByte2(AString &dest, const UString &src, UINT codePage);
16370b324cSopenharmony_ci
17370b324cSopenharmony_ciAString UnicodeStringToMultiByte(const UString &src, UINT codePage, char defaultChar, bool &defaultCharWasUsed);
18370b324cSopenharmony_ciAString UnicodeStringToMultiByte(const UString &src, UINT codePage = CP_ACP);
19370b324cSopenharmony_ci
20370b324cSopenharmony_ciinline const wchar_t* GetUnicodeString(const wchar_t *u)  { return u; }
21370b324cSopenharmony_ciinline const UString& GetUnicodeString(const UString &u)  { return u; }
22370b324cSopenharmony_ci
23370b324cSopenharmony_ciinline UString GetUnicodeString(const AString &a)  { return MultiByteToUnicodeString(a); }
24370b324cSopenharmony_ciinline UString GetUnicodeString(const char *a)     { return MultiByteToUnicodeString(a); }
25370b324cSopenharmony_ci
26370b324cSopenharmony_ciinline UString GetUnicodeString(const AString &a, UINT codePage)
27370b324cSopenharmony_ci  { return MultiByteToUnicodeString(a, codePage); }
28370b324cSopenharmony_ciinline UString GetUnicodeString(const char *a, UINT codePage)
29370b324cSopenharmony_ci  { return MultiByteToUnicodeString(a, codePage); }
30370b324cSopenharmony_ci
31370b324cSopenharmony_ciinline const wchar_t* GetUnicodeString(const wchar_t *u, UINT) { return u; }
32370b324cSopenharmony_ciinline const UString& GetUnicodeString(const UString &u, UINT) { return u; }
33370b324cSopenharmony_ci
34370b324cSopenharmony_ciinline const char*    GetAnsiString(const char    *a) { return a; }
35370b324cSopenharmony_ciinline const AString& GetAnsiString(const AString &a) { return a; }
36370b324cSopenharmony_ci
37370b324cSopenharmony_ciinline AString GetAnsiString(const wchar_t *u) { return UnicodeStringToMultiByte(UString(u)); }
38370b324cSopenharmony_ciinline AString GetAnsiString(const UString &u) { return UnicodeStringToMultiByte(u); }
39370b324cSopenharmony_ci
40370b324cSopenharmony_ci/*
41370b324cSopenharmony_ciinline const char* GetOemString(const char* oem)
42370b324cSopenharmony_ci  { return oem; }
43370b324cSopenharmony_ciinline const AString& GetOemString(const AString &oem)
44370b324cSopenharmony_ci  { return oem; }
45370b324cSopenharmony_ci*/
46370b324cSopenharmony_ciconst char* GetOemString(const char* oem);
47370b324cSopenharmony_ciconst AString& GetOemString(const AString &oem);
48370b324cSopenharmony_ciinline AString GetOemString(const UString &u)
49370b324cSopenharmony_ci  { return UnicodeStringToMultiByte(u, CP_OEMCP); }
50370b324cSopenharmony_ci
51370b324cSopenharmony_ci#ifdef _UNICODE
52370b324cSopenharmony_ci  inline const wchar_t* GetSystemString(const wchar_t *u) { return u;}
53370b324cSopenharmony_ci  inline const UString& GetSystemString(const UString &u) { return u;}
54370b324cSopenharmony_ci  inline const wchar_t* GetSystemString(const wchar_t *u, UINT /* codePage */) { return u;}
55370b324cSopenharmony_ci  inline const UString& GetSystemString(const UString &u, UINT /* codePage */) { return u;}
56370b324cSopenharmony_ci
57370b324cSopenharmony_ci  inline UString GetSystemString(const AString &a, UINT codePage) { return MultiByteToUnicodeString(a, codePage); }
58370b324cSopenharmony_ci  inline UString GetSystemString(const char    *a, UINT codePage) { return MultiByteToUnicodeString(a, codePage); }
59370b324cSopenharmony_ci  inline UString GetSystemString(const AString &a) { return MultiByteToUnicodeString(a); }
60370b324cSopenharmony_ci  inline UString GetSystemString(const char    *a) { return MultiByteToUnicodeString(a); }
61370b324cSopenharmony_ci#else
62370b324cSopenharmony_ci  inline const char*    GetSystemString(const char    *a) { return a; }
63370b324cSopenharmony_ci  inline const AString& GetSystemString(const AString &a) { return a; }
64370b324cSopenharmony_ci  inline const char*    GetSystemString(const char    *a, UINT) { return a; }
65370b324cSopenharmony_ci  inline const AString& GetSystemString(const AString &a, UINT) { return a; }
66370b324cSopenharmony_ci
67370b324cSopenharmony_ci  inline AString GetSystemString(const wchar_t *u) { return UnicodeStringToMultiByte(UString(u)); }
68370b324cSopenharmony_ci  inline AString GetSystemString(const UString &u) { return UnicodeStringToMultiByte(u); }
69370b324cSopenharmony_ci  inline AString GetSystemString(const UString &u, UINT codePage) { return UnicodeStringToMultiByte(u, codePage); }
70370b324cSopenharmony_ci
71370b324cSopenharmony_ci
72370b324cSopenharmony_ci
73370b324cSopenharmony_ci  /*
74370b324cSopenharmony_ci  inline AString GetSystemString(const wchar_t *u)
75370b324cSopenharmony_ci  {
76370b324cSopenharmony_ci    UString s;
77370b324cSopenharmony_ci    s = u;
78370b324cSopenharmony_ci    return UnicodeStringToMultiByte(s);
79370b324cSopenharmony_ci  }
80370b324cSopenharmony_ci  */
81370b324cSopenharmony_ci
82370b324cSopenharmony_ci#endif
83370b324cSopenharmony_ci
84370b324cSopenharmony_ci#ifndef UNDER_CE
85370b324cSopenharmony_ciAString SystemStringToOemString(const CSysString &src);
86370b324cSopenharmony_ci#endif
87370b324cSopenharmony_ci
88370b324cSopenharmony_ci
89370b324cSopenharmony_ci#ifdef _WIN32
90370b324cSopenharmony_ci/* we don't need locale functions in Windows
91370b324cSopenharmony_ci   but we can define ENV_HAVE_LOCALE here for debug purposes */
92370b324cSopenharmony_ci// #define ENV_HAVE_LOCALE
93370b324cSopenharmony_ci#else
94370b324cSopenharmony_ci#define ENV_HAVE_LOCALE
95370b324cSopenharmony_ci#endif
96370b324cSopenharmony_ci
97370b324cSopenharmony_ci#ifdef ENV_HAVE_LOCALE
98370b324cSopenharmony_civoid MY_SetLocale();
99370b324cSopenharmony_ciconst char *GetLocale(void);
100370b324cSopenharmony_ci#endif
101370b324cSopenharmony_ci
102370b324cSopenharmony_ci#if !defined(_WIN32) || defined(ENV_HAVE_LOCALE)
103370b324cSopenharmony_cibool IsNativeUTF8();
104370b324cSopenharmony_ci#endif
105370b324cSopenharmony_ci
106370b324cSopenharmony_ci#ifndef _WIN32
107370b324cSopenharmony_ciextern bool g_ForceToUTF8;
108370b324cSopenharmony_ci#endif
109370b324cSopenharmony_ci
110370b324cSopenharmony_ci#endif
111