annotate foosdk/sdk/foobar2000/shared/utf8api.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "shared.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include <lmcons.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #ifndef BIF_NEWDIALOGSTYLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 #define BIF_NEWDIALOGSTYLE 0x0040
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 using namespace pfc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 class param_os_from_utf8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 bool m_is_null;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 WORD m_low_word;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 stringcvt::string_os_from_utf8 m_cvt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 param_os_from_utf8(const char * p) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 m_is_null(p==NULL),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 m_low_word( ((t_size)p & ~0xFFFF) == 0 ? (WORD)((t_size)p & 0xFFFF) : 0),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 m_cvt( p != NULL && ((t_size)p & ~0xFFFF) != 0 ? p : "")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 operator const TCHAR *()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 return get_ptr();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 const TCHAR * get_ptr()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 return m_low_word ? (const TCHAR*)(t_size)m_low_word : m_is_null ? 0 : m_cvt.get_ptr();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 extern "C" {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 LRESULT SHARED_EXPORT uSendMessageText(HWND wnd,UINT msg,WPARAM wp,const char * p_text)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 if (p_text == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 return SendMessage(wnd,msg,wp,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 stringcvt::string_os_from_utf8 temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 temp.convert(p_text);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 return SendMessage(wnd,msg,wp,(LPARAM)temp.get_ptr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 LRESULT SHARED_EXPORT uSendDlgItemMessageText(HWND wnd,UINT id,UINT msg,WPARAM wp,const char * text)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 return uSendMessageText(uGetDlgItem(wnd,id),msg,wp,text);//SendDlgItemMessage(wnd,id,msg,wp,(long)(const TCHAR*)string_os_from_utf8(text));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 BOOL SHARED_EXPORT uGetWindowText(HWND wnd,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 PFC_ASSERT( wnd != NULL );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 int len = GetWindowTextLength(wnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 if (len>0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 len++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 pfc::array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 temp.set_size(len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 temp[0]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 if (GetWindowText(wnd,temp.get_ptr(),len)>0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 else return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 out.reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 BOOL SHARED_EXPORT uSetWindowTextEx(HWND wnd,const char * p_text,size_t p_text_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 return SetWindowText(wnd,stringcvt::string_os_from_utf8(p_text, p_text_length));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 BOOL SHARED_EXPORT uGetDlgItemText(HWND wnd,UINT id,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 return uGetWindowText(GetDlgItem(wnd,id),out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 BOOL SHARED_EXPORT uSetDlgItemTextEx(HWND wnd,UINT id,const char * p_text,size_t p_text_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 return SetDlgItemText(wnd,id,stringcvt::string_os_from_utf8(p_text,p_text_length));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 int SHARED_EXPORT uMessageBox(HWND wnd,const char * text,const char * caption,UINT type)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 modal_dialog_scope scope(wnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 return MessageBox(wnd,param_os_from_utf8(text),param_os_from_utf8(caption),type);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 void SHARED_EXPORT uOutputDebugString(const char * msg) {OutputDebugString(stringcvt::string_os_from_utf8(msg));}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 BOOL SHARED_EXPORT uAppendMenu(HMENU menu,UINT flags,UINT_PTR id,const char * content)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 return AppendMenu(menu,flags,id,param_os_from_utf8(content));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 BOOL SHARED_EXPORT uInsertMenu(HMENU menu,UINT position,UINT flags,UINT_PTR id,const char * content)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 return InsertMenu(menu,position,flags,id,param_os_from_utf8(content));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 int SHARED_EXPORT uCharCompare(t_uint32 p_char1,t_uint32 p_char2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 #ifdef UNICODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 wchar_t temp1[4],temp2[4];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 temp1[utf16_encode_char(p_char1,temp1)]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 temp2[utf16_encode_char(p_char2,temp2)]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 return lstrcmpiW(temp1,temp2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 wchar_t temp1[4],temp2[4];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 char ctemp1[20],ctemp2[20];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 temp1[utf16_encode_char(p_char1,temp1)]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 temp2[utf16_encode_char(p_char2,temp2)]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 WideCharToMultiByte(CP_ACP,0,temp1,-1,ctemp1,_countof(ctemp1),0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 WideCharToMultiByte(CP_ACP,0,temp2,-1,ctemp2,_countof(ctemp2),0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 return lstrcmpiA(ctemp1,ctemp2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 int SHARED_EXPORT uStringCompare(const char * elem1, const char * elem2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 for(;;) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 unsigned c1,c2; t_size l1,l2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 l1 = utf8_decode_char(elem1,c1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 l2 = utf8_decode_char(elem2,c2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 if (l1==0 && l2==0) return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 if (c1!=c2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 int test = uCharCompare(c1,c2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 if (test) return test;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 elem1 += l1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 elem2 += l2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 int SHARED_EXPORT uStringCompare_ConvertNumbers(const char * elem1,const char * elem2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 for(;;) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 if (pfc::char_is_numeric(*elem1) && pfc::char_is_numeric(*elem2)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 t_size delta1 = 1, delta2 = 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 while(pfc::char_is_numeric(elem1[delta1])) delta1++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 while(pfc::char_is_numeric(elem2[delta2])) delta2++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 int test = pfc::compare_t(pfc::atoui64_ex(elem1,delta1),pfc::atoui64_ex(elem2,delta2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 if (test != 0) return test;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 elem1 += delta1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 elem2 += delta2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 unsigned c1,c2; t_size l1,l2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 l1 = utf8_decode_char(elem1,c1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 l2 = utf8_decode_char(elem2,c2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 if (l1==0 && l2==0) return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 if (c1!=c2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 int test = uCharCompare(c1,c2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 if (test) return test;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 elem1 += l1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 elem2 += l2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 HINSTANCE SHARED_EXPORT uLoadLibrary(const char * name)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 return LoadLibrary(param_os_from_utf8(name));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 HANDLE SHARED_EXPORT uCreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState, const char * lpName)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 return CreateEvent(lpEventAttributes,bManualReset,bInitialState, param_os_from_utf8(lpName));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 DWORD SHARED_EXPORT uGetModuleFileName(HMODULE hMod,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 pfc::array_t<TCHAR> buffer; buffer.set_size(256);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 for(;;) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 DWORD ret = GetModuleFileName(hMod,buffer.get_ptr(), (DWORD)buffer.get_size());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 if (ret == 0) return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 if (ret < buffer.get_size()) break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 buffer.set_size(buffer.get_size() * 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 out = stringcvt::string_utf8_from_os(buffer.get_ptr(),buffer.get_size());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 return (DWORD) out.length();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 } catch(...) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 BOOL SHARED_EXPORT uSetClipboardRawData(UINT format,const void * ptr,t_size size) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 HANDLE buffer = GlobalAlloc(GMEM_DDESHARE,size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 if (buffer == NULL) throw std::bad_alloc();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 CGlobalLockScope lock(buffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 PFC_ASSERT(lock.GetSize() == size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 memcpy(lock.GetPtr(),ptr,size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 } catch(...) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 GlobalFree(buffer); throw;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 if (SetClipboardData(format,buffer) == NULL) throw pfc::exception_bug_check();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 } catch(...) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 BOOL SHARED_EXPORT uSetClipboardString(const char * ptr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 CClipboardOpenScope scope;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 if (!scope.Open(NULL)) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 EmptyClipboard();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 stringcvt::string_os_from_utf8 temp(ptr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 return uSetClipboardRawData(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 #ifdef UNICODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 CF_UNICODETEXT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 CF_TEXT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 ,temp.get_ptr(), (temp.length() + 1) * sizeof(TCHAR));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 } catch(...) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 BOOL SHARED_EXPORT uGetClipboardString(pfc::string_base & p_out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 try {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 CClipboardOpenScope scope;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 if (!scope.Open(NULL)) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 HANDLE data = GetClipboardData(
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 #ifdef UNICODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 CF_UNICODETEXT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 CF_TEXT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 if (data == NULL) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 CGlobalLockScope lock(data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 p_out = pfc::stringcvt::string_utf8_from_os( (const TCHAR*) lock.GetPtr(), lock.GetSize() / sizeof(TCHAR) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 } catch(...) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 BOOL SHARED_EXPORT uGetClassName(HWND wnd,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 TCHAR temp[512];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 temp[0]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 if (GetClassName(wnd,temp,_countof(temp))>0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 out = stringcvt::string_utf8_from_os(temp,_countof(temp));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 else return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 t_size SHARED_EXPORT uCharLength(const char * src) {return utf8_char_len(src);}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 BOOL SHARED_EXPORT uDragQueryFile(HDROP hDrop,UINT idx,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 UINT len = DragQueryFile(hDrop,idx,0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 if (len>0 && len!=(UINT)(~0))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 len++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 temp.set_size(len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 temp[0] =0 ;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278 if (DragQueryFile(hDrop,idx,temp.get_ptr(),len)>0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 UINT SHARED_EXPORT uDragQueryFileCount(HDROP hDrop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 return DragQueryFile(hDrop,-1,0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 BOOL SHARED_EXPORT uGetTextExtentPoint32(HDC dc,const char * text,UINT cb,LPSIZE size)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 stringcvt::string_os_from_utf8 temp(text,cb);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 return GetTextExtentPoint32(dc,temp,pfc::downcast_guarded<int>(temp.length()),size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 BOOL SHARED_EXPORT uExtTextOut(HDC dc,int x,int y,UINT flags,const RECT * rect,const char * text,UINT cb,const int * lpdx)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 stringcvt::string_os_from_utf8 temp(text,cb);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 return ExtTextOut(dc,x,y,flags,rect,temp,pfc::downcast_guarded<int>(_tcslen(temp)),lpdx);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 static UINT_PTR CALLBACK choose_color_hook(HWND wnd,UINT msg,WPARAM wp,LPARAM lp)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 switch(msg)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 case WM_INITDIALOG:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 CHOOSECOLOR * cc = reinterpret_cast<CHOOSECOLOR*>(lp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 reinterpret_cast<modal_dialog_scope*>(cc->lCustData)->initialize(FindOwningPopup(wnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 BOOL SHARED_EXPORT uChooseColor(DWORD * p_color,HWND parent,DWORD * p_custom_colors)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 modal_dialog_scope scope;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 CHOOSECOLOR cc = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 cc.lStructSize = sizeof(cc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 cc.hwndOwner = parent;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 cc.rgbResult = *p_color;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 cc.lpCustColors = p_custom_colors;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 cc.Flags = CC_ANYCOLOR|CC_FULLOPEN|CC_RGBINIT|CC_ENABLEHOOK;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 cc.lpfnHook = choose_color_hook;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 cc.lCustData = reinterpret_cast<LPARAM>(&scope);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 BOOL rv = ChooseColor(&cc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 if (rv)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336 *p_color = cc.rgbResult;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 else return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 HCURSOR SHARED_EXPORT uLoadCursor(HINSTANCE hIns,const char * name)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 return LoadCursor(hIns,param_os_from_utf8(name));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 HICON SHARED_EXPORT uLoadIcon(HINSTANCE hIns,const char * name)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 return LoadIcon(hIns,param_os_from_utf8(name));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 HMENU SHARED_EXPORT uLoadMenu(HINSTANCE hIns,const char * name)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 return LoadMenu(hIns,param_os_from_utf8(name));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 BOOL SHARED_EXPORT uGetEnvironmentVariable(const char * name,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 stringcvt::string_os_from_utf8 name_t(name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 DWORD size = GetEnvironmentVariable(name_t,0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 if (size>0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 size++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 temp.set_size(size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 temp[0]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 if (GetEnvironmentVariable(name_t,temp.get_ptr(),size)>0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 out = stringcvt::string_utf8_from_os(temp.get_ptr(),size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378 HMODULE SHARED_EXPORT uGetModuleHandle(const char * name)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 return GetModuleHandle(param_os_from_utf8(name));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 UINT SHARED_EXPORT uRegisterWindowMessage(const char * name)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 return RegisterWindowMessage(stringcvt::string_os_from_utf8(name));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 BOOL SHARED_EXPORT uMoveFile(const char * src,const char * dst)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 return MoveFile(stringcvt::string_os_from_utf8(src),stringcvt::string_os_from_utf8(dst));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 BOOL SHARED_EXPORT uDeleteFile(const char * fn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 return DeleteFile(stringcvt::string_os_from_utf8(fn));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398 DWORD SHARED_EXPORT uGetFileAttributes(const char * fn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 PFC_ASSERT( ! pfc::string_has_prefix_i( fn, "file://" ) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 return GetFileAttributes(stringcvt::string_os_from_utf8(fn));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 BOOL SHARED_EXPORT uRemoveDirectory(const char * fn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 return RemoveDirectory(stringcvt::string_os_from_utf8(fn));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 HANDLE SHARED_EXPORT uCreateFile(const char * fn,DWORD access,DWORD share,LPSECURITY_ATTRIBUTES blah,DWORD creat,DWORD flags,HANDLE tmpl)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 return CreateFile(stringcvt::string_os_from_utf8(fn),access,share,blah,creat,flags,tmpl);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 BOOL SHARED_EXPORT uCreateDirectory(const char * fn,LPSECURITY_ATTRIBUTES blah)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 return CreateDirectory(stringcvt::string_os_from_utf8(fn),blah);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 HANDLE SHARED_EXPORT uCreateMutex(LPSECURITY_ATTRIBUTES blah,BOOL bInitialOwner,const char * name)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 return name ? CreateMutex(blah,bInitialOwner,stringcvt::string_os_from_utf8(name)) : CreateMutex(blah,bInitialOwner,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 BOOL SHARED_EXPORT uGetFullPathName(const char * name,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 stringcvt::string_os_from_utf8 name_os(name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 unsigned len = GetFullPathName(name_os,0,0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 if (len==0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 temp.set_size(len+1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 TCHAR * blah;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 if (GetFullPathName(name_os,len+1,temp.get_ptr(),&blah)==0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 BOOL SHARED_EXPORT uGetLongPathName(const char * name,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 TCHAR temp[4096];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 temp[0]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 BOOL state = GetLongPathName(stringcvt::string_os_from_utf8(name),temp,_countof(temp));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 if (state) out = stringcvt::string_utf8_from_os(temp,_countof(temp));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 return state;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 void SHARED_EXPORT uGetCommandLine(string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 out = stringcvt::string_utf8_from_os(GetCommandLine());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 BOOL SHARED_EXPORT uGetTempPath(string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 TCHAR temp[MAX_PATH+1];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 temp[0]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 if (GetTempPath(_countof(temp),temp))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 out = stringcvt::string_utf8_from_os(temp,_countof(temp));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 BOOL SHARED_EXPORT uGetTempFileName(const char * path_name,const char * prefix,UINT unique,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 if (path_name==0 || prefix==0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 TCHAR temp[MAX_PATH+1];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 temp[0]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 if (GetTempFileName(stringcvt::string_os_from_utf8(path_name),stringcvt::string_os_from_utf8(prefix),unique,temp))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 out = stringcvt::string_utf8_from_os(temp,_countof(temp));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 class uFindFile_i : public uFindFile
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 string8 fn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479 WIN32_FIND_DATA fd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 HANDLE hFF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 uFindFile_i() {hFF = INVALID_HANDLE_VALUE;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 bool FindFirst(const char * path)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 hFF = FindFirstFile(stringcvt::string_os_from_utf8(path),&fd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486 if (hFF==INVALID_HANDLE_VALUE) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 fn = stringcvt::string_utf8_from_os(fd.cFileName,_countof(fd.cFileName));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 virtual BOOL FindNext()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 if (hFF==INVALID_HANDLE_VALUE) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 BOOL rv = FindNextFile(hFF,&fd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 if (rv) fn = stringcvt::string_utf8_from_os(fd.cFileName,_countof(fd.cFileName));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 return rv;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498 virtual const char * GetFileName()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 return fn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 virtual t_uint64 GetFileSize()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 union
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 t_uint64 val64;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 struct
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510 DWORD lo,hi;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 } ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 ret.hi = fd.nFileSizeHigh;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 ret.lo = fd.nFileSizeLow;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 return ret.val64;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 virtual DWORD GetAttributes()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 return fd.dwFileAttributes;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 virtual FILETIME GetCreationTime()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 return fd.ftCreationTime;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528 virtual FILETIME GetLastAccessTime()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530 return fd.ftLastAccessTime;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532 virtual FILETIME GetLastWriteTime()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534 return fd.ftLastWriteTime;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 virtual ~uFindFile_i()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538 if (hFF!=INVALID_HANDLE_VALUE) FindClose(hFF);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 puFindFile SHARED_EXPORT uFindFirstFile(const char * path)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 pfc::ptrholder_t<uFindFile_i> ptr = new uFindFile_i;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 if (!ptr->FindFirst(path)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546 ptr.release();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 return ptr.detach();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 HINSTANCE SHARED_EXPORT uShellExecute(HWND wnd,const char * oper,const char * file,const char * params,const char * dir,int cmd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555 modal_dialog_scope modal; // IDIOCY - ShellExecute may spawn a modal dialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556 if (wnd) modal.initialize(wnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557 return ShellExecute(wnd,param_os_from_utf8(oper),param_os_from_utf8(file),param_os_from_utf8(params),param_os_from_utf8(dir),cmd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 HWND SHARED_EXPORT uCreateStatusWindow(LONG style,const char * text,HWND parent,UINT id)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 return CreateStatusWindow(style,param_os_from_utf8(text),parent,id);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 HWND SHARED_EXPORT uCreateWindowEx(DWORD dwExStyle,const char * lpClassName,const char * lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID lpParam)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 return CreateWindowEx(dwExStyle,param_os_from_utf8(lpClassName),param_os_from_utf8(lpWindowName),dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 HANDLE SHARED_EXPORT uLoadImage(HINSTANCE hIns,const char * name,UINT type,int x,int y,UINT flags)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 return LoadImage(hIns,param_os_from_utf8(name),type,x,y,flags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 BOOL SHARED_EXPORT uGetSystemDirectory(string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 UINT len = GetSystemDirectory(0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578 if (len==0) len = MAX_PATH;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 len++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 temp.set_size(len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582 if (GetSystemDirectory(temp.get_ptr(),len)==0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 BOOL SHARED_EXPORT uGetWindowsDirectory(string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589 UINT len = GetWindowsDirectory(0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 if (len==0) len = MAX_PATH;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 len++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593 temp.set_size(len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 if (GetWindowsDirectory(temp.get_ptr(),len)==0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 BOOL SHARED_EXPORT uSetCurrentDirectory(const char * path)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 return SetCurrentDirectory(stringcvt::string_os_from_utf8(path));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 BOOL SHARED_EXPORT uGetCurrentDirectory(string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606 UINT len = GetCurrentDirectory(0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607 if (len==0) len = MAX_PATH;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608 len++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609 array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 temp.set_size(len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 if (GetCurrentDirectory(len,temp.get_ptr())==0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616 BOOL SHARED_EXPORT uExpandEnvironmentStrings(const char * src,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 stringcvt::string_os_from_utf8 src_os(src);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619 UINT len = ExpandEnvironmentStrings(src_os,0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 if (len==0) len = 256;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621 len++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623 temp.set_size(len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 if (ExpandEnvironmentStrings(src_os,temp.get_ptr(),len)==0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629 BOOL SHARED_EXPORT uGetUserName(string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631 TCHAR temp[UNLEN+1];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 DWORD len = _countof(temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633 if (GetUserName(temp,&len))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635 out = stringcvt::string_utf8_from_os(temp,_countof(temp));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 else return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 BOOL SHARED_EXPORT uGetShortPathName(const char * src,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 stringcvt::string_os_from_utf8 src_os(src);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644 UINT len = GetShortPathName(src_os,0,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645 if (len==0) len = MAX_PATH;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 len++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 array_t<TCHAR> temp; temp.set_size(len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 if (GetShortPathName(src_os,temp.get_ptr(),len))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 else return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 #ifdef UNICODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 #define DDE_CODEPAGE CP_WINUNICODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660 #define DDE_CODEPAGE CP_WINANSI
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664 HSZ SHARED_EXPORT uDdeCreateStringHandle(DWORD ins,const char * src)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 return DdeCreateStringHandle(ins,stringcvt::string_os_from_utf8(src),DDE_CODEPAGE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 BOOL SHARED_EXPORT uDdeQueryString(DWORD ins,HSZ hsz,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671 array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672 UINT len = DdeQueryString(ins,hsz,0,0,DDE_CODEPAGE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673 if (len==0) len = MAX_PATH;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674 len++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675 temp.set_size(len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676 if (DdeQueryString(ins,hsz,temp.get_ptr(),len,DDE_CODEPAGE))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678 out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
680 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
681 else return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
682 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
683
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
684 UINT SHARED_EXPORT uDdeInitialize(LPDWORD pidInst,PFNCALLBACK pfnCallback,DWORD afCmd,DWORD ulRes)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
685 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
686 return DdeInitialize(pidInst,pfnCallback,afCmd,ulRes);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
687 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
688
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
689 BOOL SHARED_EXPORT uDdeAccessData_Text(HDDEDATA data,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
690 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
691 const TCHAR * ptr = (const TCHAR*) DdeAccessData(data,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
692 if (ptr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
693 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
694 out = stringcvt::string_utf8_from_os(ptr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
695 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
696 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
697 else return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
698 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
699
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
700 uSortString_t SHARED_EXPORT uSortStringCreate(const char * src) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
701 t_size lenEst = pfc::stringcvt::estimate_utf8_to_wide(src,SIZE_MAX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
702 TCHAR * ret = pfc::__raw_malloc_t<TCHAR>(lenEst);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
703 pfc::stringcvt::convert_utf8_to_wide(ret,lenEst,src,SIZE_MAX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
704 return reinterpret_cast<uSortString_t>( ret );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
705 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
706
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
707 int SHARED_EXPORT uSortStringCompareEx(uSortString_t string1, uSortString_t string2,uint32_t flags) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
708 return CompareString(LOCALE_USER_DEFAULT,flags,reinterpret_cast<const TCHAR*>(string1),-1,reinterpret_cast<const TCHAR*>(string2),-1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
709 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
710
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
711 int SHARED_EXPORT uSortStringCompare(uSortString_t string1, uSortString_t string2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
712 return lstrcmpi(reinterpret_cast<const TCHAR*>(string1),reinterpret_cast<const TCHAR*>(string2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
713 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
714
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
715 void SHARED_EXPORT uSortStringFree(uSortString_t string) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
716 pfc::__raw_free_t(reinterpret_cast<TCHAR*>(string));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
717 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
718
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
719 HTREEITEM SHARED_EXPORT uTreeView_InsertItem(HWND wnd,const uTVINSERTSTRUCT * param)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
720 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
721 stringcvt::string_os_from_utf8 temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
722 temp.convert(param->item.pszText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
723
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
724
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
725 TVINSERTSTRUCT l_param = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
726 l_param.hParent = param->hParent;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
727 l_param.hInsertAfter = param->hInsertAfter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
728 l_param.item.mask = param->item.mask;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
729 l_param.item.hItem = param->item.hItem;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
730 l_param.item.state = param->item.state;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
731 l_param.item.stateMask = param->item.stateMask;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
732 l_param.item.pszText = const_cast<TCHAR*>(temp.get_ptr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
733 l_param.item.cchTextMax = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
734 l_param.item.iImage = param->item.iImage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
735 l_param.item.iSelectedImage = param->item.iImage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
736 l_param.item.cChildren = param->item.cChildren;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
737 l_param.item.lParam = param->item.lParam;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
738 if (param->item.mask & TVIF_INTEGRAL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
739 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
740 l_param.itemex.iIntegral = param->itemex.iIntegral;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
741 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
742
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
743 return (HTREEITEM) uSendMessage(wnd,TVM_INSERTITEM,0,(LPARAM)&l_param);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
744 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
745
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
746 UINT SHARED_EXPORT uGetFontHeight(HFONT font)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
747 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
748 UINT ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
749 HDC dc = CreateCompatibleDC(0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
750 SelectObject(dc,font);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
751 ret = uGetTextHeight(dc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
752 DeleteDC(dc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
753 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
754 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
755
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
756
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
757 HIMAGELIST SHARED_EXPORT uImageList_LoadImage(HINSTANCE hi, const char * lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
758 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
759 return ImageList_LoadImage(hi,param_os_from_utf8(lpbmp),cx,cGrow,crMask,uType,uFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
760 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
761
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
762 int SHARED_EXPORT uTabCtrl_InsertItem(HWND wnd,t_size idx,const uTCITEM * item)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
763 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
764 param_os_from_utf8 text((item->mask & TCIF_TEXT) ? item->pszText : 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
765 TCITEM l_item;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
766 assert(sizeof(l_item)==sizeof(*item));//meh lazy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
767 memcpy(&l_item,item,sizeof(l_item));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
768 l_item.pszText = const_cast<TCHAR*>(text.get_ptr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
769 l_item.cchTextMax = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
770 return TabCtrl_InsertItem(wnd,idx,&l_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
771 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
772
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
773 int SHARED_EXPORT uTabCtrl_SetItem(HWND wnd,t_size idx,const uTCITEM * item)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
774 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
775 param_os_from_utf8 text((item->mask & TCIF_TEXT) ? item->pszText : 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
776 TCITEM l_item;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
777 PFC_STATIC_ASSERT(sizeof(l_item)==sizeof(*item));//meh lazy
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
778 memcpy(&l_item,item,sizeof(l_item));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
779 l_item.pszText = const_cast<TCHAR*>(text.get_ptr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
780 l_item.cchTextMax = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
781 return TabCtrl_SetItem(wnd,idx,&l_item);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
782 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
783
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
784 int SHARED_EXPORT uGetKeyNameText(LONG lparam,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
785 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
786 TCHAR temp[256];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
787 temp[0]=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
788 if (!GetKeyNameText(lparam,temp,_countof(temp))) return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
789 out = stringcvt::string_utf8_from_os(temp,_countof(temp));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
790 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
791 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
792
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
793 HANDLE SHARED_EXPORT uCreateFileMapping(HANDLE hFile,LPSECURITY_ATTRIBUTES lpFileMappingAttributes,DWORD flProtect,DWORD dwMaximumSizeHigh,DWORD dwMaximumSizeLow,const char * lpName)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
794 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
795 return CreateFileMapping(hFile,lpFileMappingAttributes,flProtect,dwMaximumSizeHigh,dwMaximumSizeLow,param_os_from_utf8(lpName));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
796 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
797
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
798 BOOL SHARED_EXPORT uListBox_GetText(HWND listbox,UINT index,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
799 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
800 t_size len = uSendMessage(listbox,LB_GETTEXTLEN,index,0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
801 if (len==LB_ERR || len>16*1024*1024) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
802 if (len==0) {out.reset();return TRUE;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
803
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
804 array_t<TCHAR> temp; temp.set_size(len+1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
805 pfc::memset_t(temp,(TCHAR)0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
806 len = uSendMessage(listbox,LB_GETTEXT,index,(LPARAM)temp.get_ptr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
807 if (len==LB_ERR) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
808 out = stringcvt::string_utf8_from_os(temp.get_ptr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
809 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
810 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
811 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
812 void SHARED_EXPORT uPrintf(string_base & out,const char * fmt,...)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
813 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
814 va_list list;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
815 va_start(list,fmt);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
816 uPrintfV(out,fmt,list);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
817 va_end(list);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
818 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
819 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
820 void SHARED_EXPORT uPrintfV(string_base & out,const char * fmt,va_list arglist)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
821 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
822 pfc::string_printf_here_va(out, fmt, arglist);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
823 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
824
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
825 int SHARED_EXPORT uCompareString(DWORD flags,const char * str1,size_t len1,const char * str2,size_t len2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
826 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
827 return CompareString(LOCALE_USER_DEFAULT,flags,stringcvt::string_os_from_utf8(str1,len1),-1,stringcvt::string_os_from_utf8(str2,len2),-1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
828 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
829
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
830 class uResource_i : public uResource
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
831 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
832 unsigned size;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
833 const void * ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
834 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
835 inline uResource_i(const void * p_ptr,unsigned p_size) : ptr(p_ptr), size(p_size)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
836 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
837 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
838 virtual const void * GetPointer()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
839 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
840 return ptr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
841 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
842 virtual unsigned GetSize()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
843 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
844 return size;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
845 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
846 virtual ~uResource_i()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
847 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
848 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
849 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
850
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
851 puResource SHARED_EXPORT uLoadResource(HMODULE hMod,const char * name,const char * type,WORD wLang)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
852 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
853 HRSRC res = uFindResource(hMod,name,type,wLang);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
854 if (res==0) return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
855 HGLOBAL hglob = LoadResource(hMod,res);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
856 if (hglob)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
857 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
858 void * ptr = LockResource(hglob);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
859 if (ptr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
860 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
861 return new uResource_i(ptr,SizeofResource(hMod,res));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
862 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
863 else return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
864 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
865 else return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
866 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
867
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
868 puResource SHARED_EXPORT LoadResourceEx(HMODULE hMod,const TCHAR * name,const TCHAR * type,WORD wLang)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
869 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
870 HRSRC res = wLang ? FindResourceEx(hMod,type,name,wLang) : FindResource(hMod,name,type);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
871 if (res==0) return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
872 HGLOBAL hglob = LoadResource(hMod,res);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
873 if (hglob)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
874 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
875 void * ptr = LockResource(hglob);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
876 if (ptr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
877 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
878 return new uResource_i(ptr,SizeofResource(hMod,res));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
879 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
880 else return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
881 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
882 else return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
883 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
884
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
885 HRSRC SHARED_EXPORT uFindResource(HMODULE hMod,const char * name,const char * type,WORD wLang)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
886 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
887 return wLang ? FindResourceEx(hMod,param_os_from_utf8(type),param_os_from_utf8(name),wLang) : FindResource(hMod,param_os_from_utf8(name),param_os_from_utf8(type));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
888 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
889
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
890 BOOL SHARED_EXPORT uLoadString(HINSTANCE ins,UINT id,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
891 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
892 BOOL rv = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
893 uResource * res = uLoadResource(ins,uMAKEINTRESOURCE(id),(const char*)(RT_STRING));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
894 if (res)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
895 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
896 unsigned size = res->GetSize();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
897 const WCHAR * ptr = (const WCHAR*)res->GetPointer();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
898 if (size>=4)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
899 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
900 unsigned len = *(const WORD*)(ptr+1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
901 if (len * 2 + 4 <= size)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
902 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
903 out = stringcvt::string_utf8_from_wide(ptr+2,len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
904 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
905 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
906
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
907 delete res;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
908 rv = TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
909 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
910 return rv;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
911 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
912
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
913 BOOL SHARED_EXPORT uGetMenuString(HMENU menu,UINT id,string_base & out,UINT flag)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
914 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
915 unsigned len = GetMenuString(menu,id,0,0,flag);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
916 if (len==0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
917 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
918 out.reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
919 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
920 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
921 array_t<TCHAR> temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
922 temp.set_size(len+1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
923 if (GetMenuString(menu,id,temp.get_ptr(),len+1,flag)==0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
924 out.reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
925 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
926 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
927 out = stringcvt::string_utf8_from_os(temp.get_ptr());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
928 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
929 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
930
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
931 BOOL SHARED_EXPORT uModifyMenu(HMENU menu,UINT id,UINT flags,UINT newitem,const char * data)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
932 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
933 return ModifyMenu(menu,id,flags,newitem,param_os_from_utf8(data));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
934 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
935
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
936 UINT SHARED_EXPORT uGetMenuItemType(HMENU menu,UINT position)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
937 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
938 MENUITEMINFO info = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
939 info.cbSize = sizeof(info);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
940 info.fMask = MIIM_TYPE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
941 if (!GetMenuItemInfo(menu,position,TRUE,&info))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
942 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
943 return info.fType;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
944 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
945
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
946 static inline bool i_is_path_separator(unsigned c)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
947 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
948 return c=='\\' || c=='/' || c=='|' || c==':';
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
949 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
950
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
951 int SHARED_EXPORT uSortPathCompare(HANDLE string1,HANDLE string2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
952 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
953 const TCHAR * s1 = reinterpret_cast<const TCHAR*>(string1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
954 const TCHAR * s2 = reinterpret_cast<const TCHAR*>(string2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
955 const TCHAR * p1, * p2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
956
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
957 while (*s1 || *s2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
958 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
959 if (*s1 == *s2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
960 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
961 s1++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
962 s2++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
963 continue;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
964 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
965
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
966 p1 = s1; while (*p1 && !i_is_path_separator(*p1)) p1++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
967 p2 = s2; while (*p2 && !i_is_path_separator(*p2)) p2++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
968
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
969 if ((!*p1 && !*p2) || (*p1 && *p2))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
970 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
971 int test = CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE | NORM_IGNOREKANATYPE | NORM_IGNOREWIDTH, s1, pfc::downcast_guarded<int>(p1 - s1), s2, pfc::downcast_guarded<int>(p2 - s2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
972 if (test && test != 2) return test - 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
973 if (!*p1) return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
974 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
975 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
976 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
977 if (*p1) return -1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
978 else return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
979 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
980
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
981 s1 = p1 + 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
982 s2 = p2 + 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
983 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
984
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
985 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
986 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
987
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
988 UINT SHARED_EXPORT uRegisterClipboardFormat(const char * name)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
989 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
990 return RegisterClipboardFormat(stringcvt::string_os_from_utf8(name));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
991 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
992
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
993 BOOL SHARED_EXPORT uGetClipboardFormatName(UINT format,string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
994 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
995 TCHAR temp[1024];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
996 if (!GetClipboardFormatName(format,temp,_countof(temp))) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
997 out = stringcvt::string_utf8_from_os(temp,_countof(temp));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
998 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
999 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1000
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1001 }//extern "C"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1002
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1003 BOOL SHARED_EXPORT uSearchPath(const char * path, const char * filename, const char * extension, string_base & p_out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1004 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1005 enum {temp_size = 1024};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1006 param_os_from_utf8 path_os(path), filename_os(filename), extension_os(extension);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1007 array_t<TCHAR> temp; temp.set_size(temp_size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1008 LPTSTR dummy;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1009 unsigned len;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1010
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1011 len = SearchPath(path_os,filename_os,extension_os,temp_size,temp.get_ptr(),&dummy);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1012 if (len == 0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1013 if (len >= temp_size)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1014 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1015 unsigned len2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1016 temp.set_size(len + 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1017 len2 = SearchPath(path_os,filename_os,extension_os,len+1,temp.get_ptr(),&dummy);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1018 if (len2 == 0 || len2 > len) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1019 len = len2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1020 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1021
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1022 p_out = stringcvt::string_utf8_from_os(temp.get_ptr(),len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1023
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1024 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1025
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1026 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1027
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1028 static bool is_ascii_alpha(char c)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1029 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1030 return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1031 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1032
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1033 static char ascii_upper(char c)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1034 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1035 if (c >= 'a' && c <= 'z') c += 'A' - 'a';
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1036 return c;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1037 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1038
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1039 static BOOL uFixPathCaps_Internal(const char * path,string_base & p_out, bool bQuick) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1040 pfc::string8_fastalloc temp, prependbuffer;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1041 if (path[0] == '\\' && path[1] == '\\')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1042 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1043 unsigned index = 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1044 while(path[index] != '\\')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1045 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1046 if (path[index] == 0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1047 index++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1048 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1049 index++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1050 if (path[index] == '\\' || path[index] == 0) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1051 while(path[index] != '\\')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1052 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1053 if (path[index] == 0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1054 // \\host\share
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1055 uStringLower(p_out,path);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1056 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1057 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1058 index++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1059 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1060 index++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1061 if (path[index] == '\\') return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1062 uAddStringLower(temp,path,index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1063 path += index;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1064 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1065 else if (is_ascii_alpha(path[0]) && path[1] == ':' && path[2] == '\\')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1066 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1067 temp.add_char(ascii_upper(path[0]));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1068 temp.add_string(":\\");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1069 path += 3;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1070 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1071 else return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1072
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1073 for(;;)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1074 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1075 t_size truncat = temp.length();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1076 t_size delta = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1077 while(path[delta]!=0 && path[delta]!='\\') delta++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1078 if (delta == 0) break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1079 temp.add_string_nc(path,delta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1080
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1081 bool found = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1082 if (!bQuick) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1083 #ifdef UNICODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1084 pfc::winPrefixPath( prependbuffer, temp );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1085 pfc::ptrholder_t<uFindFile> ff = uFindFirstFile(prependbuffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1086 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1087 pfc::ptrholder_t<uFindFile> ff = uFindFirstFile(temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1088 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1089 if (ff.is_valid()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1090 do {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1091 const char * fn = ff->GetFileName();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1092 if (!stricmp_utf8_ex(path,delta,fn,strlen(fn)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1093 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1094 found = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1095 temp.truncate(truncat);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1096 temp.add_string(fn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1097 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1098 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1099 } while(ff->FindNext());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1100 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1101 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1102 if (!found)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1103 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1104 temp.add_string(path + delta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1105 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1106 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1107 path += delta;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1108 if (*path == 0) break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1109 path ++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1110 temp.add_char('\\');
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1111 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1112
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1113
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1114 p_out = temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1115
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1116 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1117 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1118 /*BOOL SHARED_EXPORT uFixPathCapsQuick(const char * path,string_base & p_out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1119 return uFixPathCaps_Internal(path, p_out, true);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1120 }*/
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1121 BOOL SHARED_EXPORT uFixPathCaps(const char * path,string_base & p_out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1122 return uFixPathCaps_Internal(path, p_out, false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1123 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1124
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1125 LPARAM SHARED_EXPORT uTreeView_GetUserData(HWND p_tree,HTREEITEM p_item)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1126 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1127 TVITEM item = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1128 item.mask = TVIF_PARAM;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1129 item.hItem = p_item;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1130 if (uSendMessage(p_tree,TVM_GETITEM,0,(LPARAM)&item))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1131 return item.lParam;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1132 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1133 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1134
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1135 bool SHARED_EXPORT uTreeView_GetText(HWND p_tree,HTREEITEM p_item,string_base & p_out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1136 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1137 TCHAR temp[1024];//changeme ?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1138 TVITEM item = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1139 item.mask = TVIF_TEXT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1140 item.hItem = p_item;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1141 item.pszText = temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1142 item.cchTextMax = _countof(temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1143 if (uSendMessage(p_tree,TVM_GETITEM,0,(LPARAM)&item))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1144 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1145 p_out = stringcvt::string_utf8_from_os(temp,_countof(temp));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1146 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1147 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1148 else return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1149 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1150
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1151 BOOL SHARED_EXPORT uSetWindowText(HWND wnd,const char * p_text)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1152 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1153 PFC_ASSERT( wnd != NULL );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1154 return SetWindowText(wnd,stringcvt::string_os_from_utf8(p_text));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1155 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1156
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1157 BOOL SHARED_EXPORT uSetDlgItemText(HWND wnd,UINT id,const char * p_text)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1158 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1159 PFC_ASSERT( wnd != NULL );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1160 return SetDlgItemText(wnd, id, stringcvt::string_os_from_utf8(p_text));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1161 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1162
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1163 BOOL SHARED_EXPORT uFileExists(const char * fn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1164 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1165 DWORD attrib = uGetFileAttributes(fn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1166 if (attrib == 0xFFFFFFFF || (attrib & FILE_ATTRIBUTE_DIRECTORY)) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1167 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1168 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1169
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1170 BOOL SHARED_EXPORT uFormatSystemErrorMessage(string_base & p_out,DWORD p_code) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1171 return pfc::winFormatSystemErrorMessage(p_out, p_code);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1172 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1173
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1174 HMODULE SHARED_EXPORT LoadSystemLibrary(const TCHAR * name) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1175 pfc::array_t<TCHAR> buffer; buffer.set_size( MAX_PATH + _tcslen(name) + 2 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1176 TCHAR * bufptr = buffer.get_ptr();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1177 if (GetSystemDirectory(bufptr, MAX_PATH) == 0) return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1178 bufptr[MAX_PATH] = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1179
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1180 size_t idx = _tcslen(bufptr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1181 if (idx > 0 && bufptr[idx-1] != '\\') bufptr[idx++] = '\\';
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1182
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1183 pfc::strcpy_t(bufptr+idx, name);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1184
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1185 return LoadLibrary(bufptr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1186 }