1 /*  RetroArch - A frontend for libretro.
2  *  Copyright (C) 2011-2017 - Daniel De Matteis
3  *  Copyright (C) 2016-2019 - Brad Parker
4  *
5  *  RetroArch is free software: you can redistribute it and/or modify it under the terms
6  *  of the GNU General Public License as published by the Free Software Found-
7  *  ation, either version 3 of the License, or (at your option) any later version.
8  *
9  *  RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
10  *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11  *  PURPOSE.  See the GNU General Public License for more details.
12  *
13  *  You should have received a copy of the GNU General Public License along with RetroArch.
14  *  If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 #include <stdio.h>
18 #include <string.h>
19 
20 #include <lrc_hash.h>
21 #include <string/stdstring.h>
22 #include <libretro.h>
23 
24 #ifdef HAVE_CONFIG_H
25 #include "config.h"
26 #endif
27 
28 #include "msg_hash.h"
29 
30 /* TODO/FIXME - static public global variable */
31 static unsigned uint_user_language;
32 
msg_hash_get_help_enum(enum msg_hash_enums msg,char * s,size_t len)33 int msg_hash_get_help_enum(enum msg_hash_enums msg, char *s, size_t len)
34 {
35    int ret = -1;
36 
37 #ifdef HAVE_LANGEXTRA
38    switch (uint_user_language)
39    {
40       case RETRO_LANGUAGE_FRENCH:
41          ret = msg_hash_get_help_fr_enum(msg, s, len);
42          break;
43       case RETRO_LANGUAGE_GERMAN:
44          ret = msg_hash_get_help_de_enum(msg, s, len);
45          break;
46       case RETRO_LANGUAGE_SPANISH:
47          ret = msg_hash_get_help_es_enum(msg, s, len);
48          break;
49       case RETRO_LANGUAGE_ITALIAN:
50          ret = msg_hash_get_help_it_enum(msg, s, len);
51          break;
52       case RETRO_LANGUAGE_PORTUGUESE_BRAZIL:
53          ret = msg_hash_get_help_pt_br_enum(msg, s, len);
54          break;
55       case RETRO_LANGUAGE_PORTUGUESE_PORTUGAL:
56          ret = msg_hash_get_help_pt_pt_enum(msg, s, len);
57          break;
58       case RETRO_LANGUAGE_DUTCH:
59          ret = msg_hash_get_help_nl_enum(msg, s, len);
60          break;
61       case RETRO_LANGUAGE_ESPERANTO:
62          ret = msg_hash_get_help_eo_enum(msg, s, len);
63          break;
64       case RETRO_LANGUAGE_POLISH:
65          ret = msg_hash_get_help_pl_enum(msg, s, len);
66          break;
67       case RETRO_LANGUAGE_JAPANESE:
68          ret = msg_hash_get_help_jp_enum(msg, s, len);
69          break;
70       case RETRO_LANGUAGE_KOREAN:
71          ret = msg_hash_get_help_ko_enum(msg, s, len);
72          break;
73       case RETRO_LANGUAGE_VIETNAMESE:
74          ret = msg_hash_get_help_vn_enum(msg, s, len);
75          break;
76       case RETRO_LANGUAGE_CHINESE_SIMPLIFIED:
77          ret = msg_hash_get_help_chs_enum(msg, s, len);
78          break;
79       case RETRO_LANGUAGE_CHINESE_TRADITIONAL:
80          ret = msg_hash_get_help_cht_enum(msg, s, len);
81          break;
82       case RETRO_LANGUAGE_ARABIC:
83          ret = msg_hash_get_help_ar_enum(msg, s, len);
84          break;
85       case RETRO_LANGUAGE_GREEK:
86          ret = msg_hash_get_help_el_enum(msg, s, len);
87          break;
88       case RETRO_LANGUAGE_TURKISH:
89          ret = msg_hash_get_help_tr_enum(msg, s, len);
90          break;
91       case RETRO_LANGUAGE_SLOVAK:
92          ret = msg_hash_get_help_sk_enum(msg, s, len);
93          break;
94       case RETRO_LANGUAGE_PERSIAN:
95          ret = msg_hash_get_help_fa_enum(msg, s, len);
96          break;
97       case RETRO_LANGUAGE_HEBREW:
98          ret = msg_hash_get_help_he_enum(msg, s, len);
99          break;
100       case RETRO_LANGUAGE_ASTURIAN:
101          ret = msg_hash_get_help_ast_enum(msg, s, len);
102          break;
103       case RETRO_LANGUAGE_FINNISH:
104          ret = msg_hash_get_help_fi_enum(msg, s, len);
105       default:
106          break;
107    }
108 #endif
109 
110    if (ret == 0)
111       return ret;
112 
113    return msg_hash_get_help_us_enum(msg, s, len);
114 }
115 
get_user_language_iso639_1(bool limit)116 const char *get_user_language_iso639_1(bool limit)
117 {
118    switch (uint_user_language)
119    {
120       case RETRO_LANGUAGE_FRENCH:
121          return "fr";
122       case RETRO_LANGUAGE_GERMAN:
123          return "de";
124       case RETRO_LANGUAGE_SPANISH:
125          return "es";
126       case RETRO_LANGUAGE_ITALIAN:
127          return "it";
128       case RETRO_LANGUAGE_PORTUGUESE_BRAZIL:
129          if (limit)
130             return "pt";
131          return "pt_br";
132       case RETRO_LANGUAGE_PORTUGUESE_PORTUGAL:
133          if (limit)
134             return "pt";
135          return "pt_pt";
136       case RETRO_LANGUAGE_DUTCH:
137          return "nl";
138       case RETRO_LANGUAGE_ESPERANTO:
139          return "eo";
140       case RETRO_LANGUAGE_POLISH:
141          return "pl";
142       case RETRO_LANGUAGE_JAPANESE:
143          return "ja";
144       case RETRO_LANGUAGE_KOREAN:
145          return "ko";
146       case RETRO_LANGUAGE_VIETNAMESE:
147          return "vi";
148       case RETRO_LANGUAGE_CHINESE_SIMPLIFIED:
149          if (limit)
150             return "zh";
151          return "zh_cn";
152       case RETRO_LANGUAGE_CHINESE_TRADITIONAL:
153          if (limit)
154             return "zh";
155          return "zh_tw";
156       case RETRO_LANGUAGE_ARABIC:
157          return "ar";
158       case RETRO_LANGUAGE_GREEK:
159          return "el";
160       case RETRO_LANGUAGE_TURKISH:
161          return "tr";
162       case RETRO_LANGUAGE_SLOVAK:
163          return "sk";
164       case RETRO_LANGUAGE_RUSSIAN:
165          return "ru";
166       case RETRO_LANGUAGE_PERSIAN:
167          return "fa";
168       case RETRO_LANGUAGE_HEBREW:
169          return "he";
170       case RETRO_LANGUAGE_ASTURIAN:
171          return "ast";
172       case RETRO_LANGUAGE_FINNISH:
173          return "fi";
174    }
175    return "en";
176 }
177 
msg_hash_to_str(enum msg_hash_enums msg)178 const char *msg_hash_to_str(enum msg_hash_enums msg)
179 {
180    const char *ret = NULL;
181 
182 #ifdef HAVE_LANGEXTRA
183    switch (uint_user_language)
184    {
185       case RETRO_LANGUAGE_FRENCH:
186          ret = msg_hash_to_str_fr(msg);
187          break;
188       case RETRO_LANGUAGE_GERMAN:
189          ret = msg_hash_to_str_de(msg);
190          break;
191       case RETRO_LANGUAGE_SPANISH:
192          ret = msg_hash_to_str_es(msg);
193          break;
194       case RETRO_LANGUAGE_ITALIAN:
195          ret = msg_hash_to_str_it(msg);
196          break;
197       case RETRO_LANGUAGE_PORTUGUESE_BRAZIL:
198          ret = msg_hash_to_str_pt_br(msg);
199          break;
200       case RETRO_LANGUAGE_PORTUGUESE_PORTUGAL:
201          ret = msg_hash_to_str_pt_pt(msg);
202          break;
203       case RETRO_LANGUAGE_DUTCH:
204          ret = msg_hash_to_str_nl(msg);
205          break;
206       case RETRO_LANGUAGE_ESPERANTO:
207          ret = msg_hash_to_str_eo(msg);
208          break;
209       case RETRO_LANGUAGE_POLISH:
210          ret = msg_hash_to_str_pl(msg);
211          break;
212       case RETRO_LANGUAGE_RUSSIAN:
213          ret = msg_hash_to_str_ru(msg);
214          break;
215       case RETRO_LANGUAGE_JAPANESE:
216          ret = msg_hash_to_str_jp(msg);
217          break;
218       case RETRO_LANGUAGE_KOREAN:
219          ret = msg_hash_to_str_ko(msg);
220          break;
221       case RETRO_LANGUAGE_VIETNAMESE:
222          ret = msg_hash_to_str_vn(msg);
223          break;
224       case RETRO_LANGUAGE_CHINESE_SIMPLIFIED:
225          ret = msg_hash_to_str_chs(msg);
226          break;
227       case RETRO_LANGUAGE_CHINESE_TRADITIONAL:
228          ret = msg_hash_to_str_cht(msg);
229          break;
230       case RETRO_LANGUAGE_ARABIC:
231          ret = msg_hash_to_str_ar(msg);
232          break;
233       case RETRO_LANGUAGE_GREEK:
234          ret = msg_hash_to_str_el(msg);
235          break;
236       case RETRO_LANGUAGE_TURKISH:
237          ret = msg_hash_to_str_tr(msg);
238          break;
239       case RETRO_LANGUAGE_SLOVAK:
240          ret = msg_hash_to_str_sk(msg);
241          break;
242       case RETRO_LANGUAGE_PERSIAN:
243          ret = msg_hash_to_str_fa(msg);
244          break;
245       case RETRO_LANGUAGE_HEBREW:
246          ret = msg_hash_to_str_he(msg);
247          break;
248       case RETRO_LANGUAGE_ASTURIAN:
249          ret = msg_hash_to_str_ast(msg);
250          break;
251       case RETRO_LANGUAGE_FINNISH:
252          ret = msg_hash_to_str_fi(msg);
253          break;
254       default:
255          break;
256    }
257 #endif
258 
259    if (ret && !string_is_equal(ret, "null"))
260       return ret;
261 
262    return msg_hash_to_str_us(msg);
263 }
264 
msg_hash_calculate(const char * s)265 uint32_t msg_hash_calculate(const char *s)
266 {
267    return djb2_calculate(s);
268 }
269 
270 #define MENU_VALUE_FILE_WEBM                                                   0x7ca00b50U
271 #define MENU_VALUE_FILE_F4F                                                    0x0b886be5U
272 #define MENU_VALUE_FILE_F4V                                                    0x0b886bf5U
273 #define MENU_VALUE_FILE_OGM                                                    0x0b8898c8U
274 #define MENU_VALUE_FILE_MKV                                                    0x0b8890d3U
275 #define MENU_VALUE_FILE_AVI                                                    0x0b885f25U
276 #define MENU_VALUE_FILE_M4A                                                    0x0b8889a7U
277 #define MENU_VALUE_FILE_3GP                                                    0x0b87998fU
278 #define MENU_VALUE_FILE_MP4                                                    0x0b889136U
279 #define MENU_VALUE_FILE_MP3                                                    0x0b889135U
280 #define MENU_VALUE_FILE_FLAC                                                   0x7c96d67bU
281 #define MENU_VALUE_FILE_OGG                                                    0x0b8898c2U
282 #define MENU_VALUE_FILE_MOD                                                    0x0b889145U
283 #define MENU_VALUE_FILE_S3M                                                    0x0b88a318U
284 #define MENU_VALUE_FILE_XM                                                     0x00597a2aU
285 #define MENU_VALUE_FILE_FLV                                                    0x0b88732dU
286 #define MENU_VALUE_FILE_WAV                                                    0x0b88ba13U
287 #define MENU_VALUE_FILE_MOV                                                    0x0b889157U
288 #define MENU_VALUE_FILE_WMV                                                    0x0b88bb9fU
289 #define MENU_VALUE_FILE_3G2                                                    0x0b879951U
290 #define MENU_VALUE_FILE_MPG                                                    0x0b889169U
291 #define MENU_VALUE_FILE_MPEG                                                   0x7c9abeaeU
292 #define MENU_VALUE_FILE_VOB                                                    0x0b88b78cU
293 #define MENU_VALUE_FILE_ASF                                                    0x0b885ebfU
294 #define MENU_VALUE_FILE_DIVX                                                   0x7c95b3c0U
295 #define MENU_VALUE_FILE_M2P                                                    0x0b888974U
296 #define MENU_VALUE_FILE_M2TS                                                   0x7c99b8ebU
297 #define MENU_VALUE_FILE_PS                                                     0x00597928U
298 #define MENU_VALUE_FILE_TS                                                     0x005979acU
299 #define MENU_VALUE_FILE_MXF                                                    0x0b889270U
300 #define MENU_VALUE_FILE_WMA                                                    0x0b88bb8aU
301 
302 #define MENU_VALUE_FILE_JPG                                                    0x0b8884a6U
303 #define MENU_VALUE_FILE_JPEG                                                   0x7c99198bU
304 #define MENU_VALUE_FILE_JPG_CAPS                                               0x0b87f846U
305 #define MENU_VALUE_FILE_JPEG_CAPS                                              0x7c87010bU
306 #define MENU_VALUE_FILE_PNG                                                    0x0b889deaU
307 #define MENU_VALUE_FILE_PNG_CAPS                                               0x0b88118aU
308 #define MENU_VALUE_FILE_GONG                                                   0x7c977150U
309 #define MENU_VALUE_FILE_GONG_CAPS                                              0x7c8558d0U
310 #define MENU_VALUE_FILE_TGA                                                    0x0b88ae01U
311 #define MENU_VALUE_FILE_BMP                                                    0x0b886244U
312 
313 #define MENU_VALUE_MD5                                                         0x0b888fabU
314 #define MENU_VALUE_SHA1                                                        0x7c9de632U
315 #define MENU_VALUE_CRC                                                         0x0b88671dU
316 #define MENU_VALUE_MORE                                                        0x0b877cafU
317 #define MENU_VALUE_CFILE                                                       0xac3ec4f9U
318 #define MENU_VALUE_ON                                                          0x005974c2U
319 #define MENU_VALUE_OFF                                                         0x0b880c40U
320 #define MENU_VALUE_COMP                                                        0x6a166ba5U
321 #define MENU_VALUE_MUSIC                                                       0xc4a73997U
322 #define MENU_VALUE_IMAGE                                                       0xbab7ebf9U
323 #define MENU_VALUE_MOVIE                                                       0xc43c4bf6U
324 #define MENU_VALUE_CORE                                                        0x6a167f7fU
325 #define MENU_VALUE_CURSOR                                                      0x57bba8b4U
326 #define MENU_VALUE_FILE                                                        0x6a496536U
327 #define MENU_VALUE_RDB                                                         0x0b00f54eU
328 #define MENU_VALUE_DIR                                                         0x0af95f55U
329 #define MENU_VALUE_GLSLP                                                       0x0f840c87U
330 #define MENU_VALUE_CGP                                                         0x0b8865bfU
331 #define MENU_VALUE_GLSL                                                        0x7c976537U
332 #define MENU_VALUE_HLSL                                                        0x7c97f198U
333 #define MENU_VALUE_HLSLP                                                       0x0f962508U
334 #define MENU_VALUE_CG                                                          0x0059776fU
335 #define MENU_VALUE_SLANG                                                       0x105ce63aU
336 #define MENU_VALUE_SLANGP                                                      0x1bf9adeaU
337 
338 #define FILE_HASH_APK                                                          0x0b885e61U
339 
340 #define HASH_EXTENSION_7Z                                                      0x005971d6U
341 #define HASH_EXTENSION_7Z_UPP                                                  0x005971b6U
342 #define HASH_EXTENSION_ZIP                                                     0x0b88c7d8U
343 #define HASH_EXTENSION_ZIP_UPP                                                 0x0b883b78U
344 #define HASH_EXTENSION_CUE                                                     0x0b886782U
345 #define HASH_EXTENSION_CUE_UPPERCASE                                           0x0b87db22U
346 #define HASH_EXTENSION_GDI                                                     0x00b887659
347 #define HASH_EXTENSION_GDI_UPPERCASE                                           0x00b87e9f9
348 #define HASH_EXTENSION_ISO                                                     0x0b8880d0U
349 #define HASH_EXTENSION_ISO_UPPERCASE                                           0x0b87f470U
350 #define HASH_EXTENSION_LUTRO                                                   0x0fe37b7bU
351 #define HASH_EXTENSION_CHD                                                     0x0b8865d4U
352 
msg_hash_to_file_type(uint32_t hash)353 enum msg_file_type msg_hash_to_file_type(uint32_t hash)
354 {
355    switch (hash)
356    {
357       case MENU_VALUE_COMP:
358       case HASH_EXTENSION_7Z:
359       case HASH_EXTENSION_7Z_UPP:
360       case HASH_EXTENSION_ZIP:
361       case HASH_EXTENSION_ZIP_UPP:
362       case FILE_HASH_APK:
363          return FILE_TYPE_COMPRESSED;
364       case MENU_VALUE_CFILE:
365          return FILE_TYPE_IN_CARCHIVE;
366       case MENU_VALUE_MORE:
367          return FILE_TYPE_MORE;
368       case MENU_VALUE_CORE:
369          return FILE_TYPE_CORE;
370       case MENU_VALUE_RDB:
371          return FILE_TYPE_RDB;
372       case MENU_VALUE_CURSOR:
373          return FILE_TYPE_CURSOR;
374       case MENU_VALUE_FILE:
375          return FILE_TYPE_PLAIN;
376       case MENU_VALUE_DIR:
377          return FILE_TYPE_DIRECTORY;
378       case MENU_VALUE_MUSIC:
379          return FILE_TYPE_MUSIC;
380       case MENU_VALUE_IMAGE:
381          return FILE_TYPE_IMAGE;
382       case MENU_VALUE_MOVIE:
383          return FILE_TYPE_MOVIE;
384       case MENU_VALUE_ON:
385          return FILE_TYPE_BOOL_ON;
386       case MENU_VALUE_OFF:
387          return FILE_TYPE_BOOL_OFF;
388       case MENU_VALUE_GLSL:
389          return FILE_TYPE_SHADER_GLSL;
390       case MENU_VALUE_HLSL:
391          return FILE_TYPE_SHADER_HLSL;
392       case MENU_VALUE_CG:
393          return FILE_TYPE_SHADER_CG;
394       case MENU_VALUE_SLANG:
395          return FILE_TYPE_SHADER_SLANG;
396       case MENU_VALUE_GLSLP:
397          return FILE_TYPE_SHADER_PRESET_GLSLP;
398       case MENU_VALUE_HLSLP:
399          return FILE_TYPE_SHADER_PRESET_HLSLP;
400       case MENU_VALUE_CGP:
401          return FILE_TYPE_SHADER_PRESET_CGP;
402       case MENU_VALUE_SLANGP:
403          return FILE_TYPE_SHADER_PRESET_SLANGP;
404       case MENU_VALUE_CRC:
405          return FILE_TYPE_CRC;
406       case MENU_VALUE_SHA1:
407          return FILE_TYPE_SHA1;
408       case MENU_VALUE_MD5:
409          return FILE_TYPE_MD5;
410 #if defined(HAVE_FFMPEG) || defined(HAVE_MPV)
411       case MENU_VALUE_FILE_OGM:
412          return FILE_TYPE_OGM;
413       case MENU_VALUE_FILE_MKV:
414          return FILE_TYPE_MKV;
415       case MENU_VALUE_FILE_AVI:
416          return FILE_TYPE_AVI;
417       case MENU_VALUE_FILE_MP4:
418          return FILE_TYPE_MP4;
419       case MENU_VALUE_FILE_FLV:
420          return FILE_TYPE_FLV;
421       case MENU_VALUE_FILE_WEBM:
422          return FILE_TYPE_WEBM;
423       case MENU_VALUE_FILE_3GP:
424          return FILE_TYPE_3GP;
425       case MENU_VALUE_FILE_F4F:
426          return FILE_TYPE_F4F;
427       case MENU_VALUE_FILE_F4V:
428          return FILE_TYPE_F4V;
429       case MENU_VALUE_FILE_MOV:
430          return FILE_TYPE_MOV;
431       case MENU_VALUE_FILE_WMV:
432          return FILE_TYPE_WMV;
433       case MENU_VALUE_FILE_MP3:
434          return FILE_TYPE_MP3;
435       case MENU_VALUE_FILE_M4A:
436          return FILE_TYPE_M4A;
437       case MENU_VALUE_FILE_OGG:
438          return FILE_TYPE_OGG;
439       case MENU_VALUE_FILE_FLAC:
440          return FILE_TYPE_FLAC;
441       case MENU_VALUE_FILE_WAV:
442          return FILE_TYPE_WAV;
443       case MENU_VALUE_FILE_3G2:
444          return FILE_TYPE_3G2;
445       case MENU_VALUE_FILE_MPG:
446          return FILE_TYPE_MPG;
447       case MENU_VALUE_FILE_MPEG:
448          return FILE_TYPE_MPEG;
449       case MENU_VALUE_FILE_VOB:
450          return FILE_TYPE_VOB;
451       case MENU_VALUE_FILE_ASF:
452          return FILE_TYPE_ASF;
453       case MENU_VALUE_FILE_DIVX:
454          return FILE_TYPE_DIVX;
455       case MENU_VALUE_FILE_M2P:
456          return FILE_TYPE_M2P;
457       case MENU_VALUE_FILE_M2TS:
458          return FILE_TYPE_M2TS;
459       case MENU_VALUE_FILE_PS:
460          return FILE_TYPE_PS;
461       case MENU_VALUE_FILE_TS:
462          return FILE_TYPE_TS;
463       case MENU_VALUE_FILE_MXF:
464          return FILE_TYPE_MXF;
465       case MENU_VALUE_FILE_WMA:
466          return FILE_TYPE_WMA;
467 #endif
468 #ifdef HAVE_IBXM
469        case MENU_VALUE_FILE_MOD:
470            return FILE_TYPE_MOD;
471        case MENU_VALUE_FILE_S3M:
472            return FILE_TYPE_S3M;
473        case MENU_VALUE_FILE_XM:
474            return FILE_TYPE_XM;
475 #endif
476 #ifdef HAVE_IMAGEVIEWER
477       case MENU_VALUE_FILE_JPG:
478       case MENU_VALUE_FILE_JPG_CAPS:
479       case MENU_VALUE_FILE_JPEG:
480       case MENU_VALUE_FILE_JPEG_CAPS:
481          return FILE_TYPE_JPEG;
482       case MENU_VALUE_FILE_PNG:
483       case MENU_VALUE_FILE_PNG_CAPS:
484          return FILE_TYPE_PNG;
485       case MENU_VALUE_FILE_TGA:
486          return FILE_TYPE_TGA;
487       case MENU_VALUE_FILE_BMP:
488          return FILE_TYPE_BMP;
489 #endif
490 #ifdef HAVE_EASTEREGG
491       case MENU_VALUE_FILE_GONG:
492       case MENU_VALUE_FILE_GONG_CAPS:
493          return FILE_TYPE_GONG;
494 #endif
495       case HASH_EXTENSION_CUE:
496       case HASH_EXTENSION_CUE_UPPERCASE:
497          return FILE_TYPE_CUE;
498       case HASH_EXTENSION_GDI:
499       case HASH_EXTENSION_GDI_UPPERCASE:
500          return FILE_TYPE_GDI;
501       case HASH_EXTENSION_ISO:
502       case HASH_EXTENSION_ISO_UPPERCASE:
503          return FILE_TYPE_ISO;
504       case HASH_EXTENSION_LUTRO:
505          return FILE_TYPE_LUTRO;
506       case HASH_EXTENSION_CHD:
507          return FILE_TYPE_CHD;
508       default:
509          break;
510    }
511 
512    return FILE_TYPE_NONE;
513 }
514 
msg_hash_get_uint(enum msg_hash_action type)515 unsigned *msg_hash_get_uint(enum msg_hash_action type)
516 {
517    switch (type)
518    {
519       case MSG_HASH_USER_LANGUAGE:
520          return &uint_user_language;
521       case MSG_HASH_NONE:
522          break;
523    }
524 
525    return NULL;
526 }
527 
msg_hash_set_uint(enum msg_hash_action type,unsigned val)528 void msg_hash_set_uint(enum msg_hash_action type, unsigned val)
529 {
530    switch (type)
531    {
532       case MSG_HASH_USER_LANGUAGE:
533          uint_user_language = val;
534          break;
535       case MSG_HASH_NONE:
536          break;
537    }
538 }
539 
msg_hash_get_wideglyph_str(void)540 const char *msg_hash_get_wideglyph_str(void)
541 {
542 #ifdef HAVE_LANGEXTRA
543    switch (uint_user_language)
544    {
545       case RETRO_LANGUAGE_CHINESE_SIMPLIFIED:
546          return msg_hash_get_wideglyph_str_chs();
547       case RETRO_LANGUAGE_CHINESE_TRADITIONAL:
548          return msg_hash_get_wideglyph_str_cht();
549       case RETRO_LANGUAGE_JAPANESE:
550          return msg_hash_get_wideglyph_str_jp();
551       case RETRO_LANGUAGE_KOREAN:
552          return msg_hash_get_wideglyph_str_ko();
553       default:
554          break;
555    }
556 #endif
557 
558    return NULL;
559 }
560