Changeset 4023 for trunk/src/kernel32/winimgres.cpp
- Timestamp:
- Aug 16, 2000, 10:04:44 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/winimgres.cpp
r3815 r4023 1 /* $Id: winimgres.cpp,v 1.4 3 2000-07-10 18:38:52sandervl Exp $ */1 /* $Id: winimgres.cpp,v 1.44 2000-08-16 08:04:44 sandervl Exp $ */ 2 2 3 3 /* … … 6 6 * Copyright 1998-2000 Sander van Leeuwen (sandervl@xs4all.nl) 7 7 * 8 * 9 * Language order based on Wine Code (loader\pe_resource.c) 10 * Copyright 1995 Thomas Sandford 11 * Copyright 1996 Martin von Loewis 12 * 8 13 * 9 14 * Project Odin Software License can be found in LICENSE.TXT … … 146 151 } 147 152 148 switch(lang) { 149 case LANG_SYSTEM_DEFAULT: 150 lang = GetSystemDefaultLangID(); 151 break; 152 case LANG_USER_DEFAULT: 153 lang = GetUserDefaultLangID(); 154 break; 155 case LANG_NEUTRAL: 156 //TODO: Not correct; should take language associated with current thread 157 lang = LANG_NEUTRAL; 158 break; 159 case LANG_GETFIRST: 160 lang = GetUserDefaultLangID(); 161 break; 162 } 163 164 hRes = (HRSRC)getResDataLang(pResDirRet, lang); 165 if(!hRes) { 166 //try primary language with default sublang 167 lang = MAKELANGID(PRIMARYLANGID(lang), SUBLANG_DEFAULT); 168 hRes = (HRSRC)getResDataLang(pResDirRet, lang); 169 if(!hRes) { 170 //try neutral language or get first entry if nothing found 171 hRes = (HRSRC)getResDataLang(pResDirRet, LANG_NEUTRAL, TRUE); 172 } 173 } 153 /* Here is the real difference between FindResource and FindResourceEx */ 154 if(lang == MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL) || 155 lang == MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) || 156 lang == MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT) || 157 lang == MAKELANGID(LANG_NEUTRAL, 3)) /* FIXME: real name? */ 158 { 159 hRes = getResourceLang(pResDirRet); 160 } 161 else hRes = getResourceLangEx(pResDirRet, lang); 174 162 175 163 if((ULONG)lpszName != ID_GETFIRST && HIWORD(lpszName)) { … … 216 204 } 217 205 218 switch(lang) { 219 case LANG_SYSTEM_DEFAULT: 220 lang = GetSystemDefaultLangID(); 221 break; 222 case LANG_USER_DEFAULT: 223 lang = GetUserDefaultLangID(); 224 break; 225 case LANG_NEUTRAL: 226 //TODO: Not correct; should take language associated with current thread 227 lang = LANG_NEUTRAL; 228 break; 229 case LANG_GETFIRST: 230 lang = GetUserDefaultLangID(); 231 break; 232 } 233 234 hRes = (HRSRC)getResDataLang(pResDirRet, lang); 206 /* Here is the real difference between FindResource and FindResourceEx */ 207 if(lang == MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL) || 208 lang == MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) || 209 lang == MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT) || 210 lang == MAKELANGID(LANG_NEUTRAL, 3)) /* FIXME: real name? */ 211 { 212 hRes = getResourceLang(pResDirRet); 213 } 214 else hRes = getResourceLangEx(pResDirRet, lang); 215 216 return hRes; 217 } 218 //****************************************************************************** 219 //According to Wine: 220 /* FindResourceA/W does search in the following order: 221 * 1. Neutral language with neutral sublanguage 222 * 2. Neutral language with default sublanguage 223 * 3. Current locale lang id 224 * 4. Current locale lang id with neutral sublanguage 225 * 5. (!) LANG_ENGLISH, SUBLANG_DEFAULT 226 * 6. Return first in the list 227 */ 228 //****************************************************************************** 229 HRSRC Win32ImageBase::getResourceLang(PIMAGE_RESOURCE_DIRECTORY pResDirToSearch) 230 { 231 HRSRC hRes; 232 DWORD lang; 233 234 /* 1. Neutral language with neutral sublanguage */ 235 lang = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); 236 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang); 235 237 if(!hRes) { 236 //try primary language with default sublang 237 lang = MAKELANGID(PRIMARYLANGID(lang), SUBLANG_DEFAULT); 238 hRes = (HRSRC)getResDataLang(pResDirRet, lang); 239 if(!hRes) { 240 //try neutral language or get first entry if nothing found 241 hRes = (HRSRC)getResDataLang(pResDirRet, LANG_NEUTRAL, TRUE); 242 } 243 } 244 238 /* 2. Neutral language with default sublanguage */ 239 lang = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT); 240 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang); 241 } 242 if(!hRes) { 243 /* 3. Current locale lang id */ 244 lang = LANGIDFROMLCID(GetUserDefaultLCID()); 245 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang); 246 } 247 if(!hRes) { 248 /* 4. Current locale lang id with neutral sublanguage */ 249 lang = MAKELANGID(PRIMARYLANGID(lang), SUBLANG_NEUTRAL); 250 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang); 251 } 252 if(!hRes) { 253 /* 5. (!) LANG_ENGLISH, SUBLANG_DEFAULT */ 254 lang = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT); 255 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang); 256 } 257 if(!hRes) { 258 /* 6. Return first in the list */ 259 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang, TRUE); 260 } 261 return hRes; 262 } 263 //****************************************************************************** 264 //According to Wine: 265 /* FindResourceExA/W does search in the following order: 266 * 1. Exact specified language 267 * 2. Language with neutral sublanguage 268 * 3. Neutral language with neutral sublanguage 269 * 4. Neutral language with default sublanguage 270 */ 271 //****************************************************************************** 272 HRSRC Win32ImageBase::getResourceLangEx(PIMAGE_RESOURCE_DIRECTORY pResDirToSearch, 273 DWORD lang) 274 { 275 HRSRC hRes; 276 277 /* 1. Exact specified language */ 278 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang); 279 if(!hRes) { 280 /* 2. Language with neutral sublanguage */ 281 lang = MAKELANGID(PRIMARYLANGID(lang), SUBLANG_NEUTRAL); 282 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang); 283 } 284 if(!hRes) { 285 /* 3. Neutral language with neutral sublanguage */ 286 lang = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); 287 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang); 288 } 289 if(!hRes) { 290 /* 4. Current locale lang id with neutral sublanguage */ 291 lang = MAKELANGID(PRIMARYLANGID(lang), SUBLANG_NEUTRAL); 292 hRes = (HRSRC)getResDataLang(pResDirToSearch, lang); 293 } 245 294 return hRes; 246 295 } … … 261 310 return FALSE; 262 311 } 263 hRes = findResourceW((LPWSTR)ID_GETFIRST, (LPWSTR)NTRT_VERSION, LANG_GETFIRST);312 hRes = findResourceW((LPWSTR)ID_GETFIRST, (LPWSTR)NTRT_VERSION, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)); 264 313 if(hRes == NULL) { 265 314 //last error already set by findResourceW
Note:
See TracChangeset
for help on using the changeset viewer.