1 /***************************************************************************
2  * Copyright (c) 2024 Microsoft Corporation
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the MIT License which is available at
6  * https://opensource.org/licenses/MIT.
7  *
8  * SPDX-License-Identifier: MIT
9  **************************************************************************/
10 
11 
12 /**************************************************************************/
13 /**************************************************************************/
14 /**                                                                       */
15 /** GUIX Component                                                        */
16 /**                                                                       */
17 /**   Display Management (Display)                                        */
18 /**                                                                       */
19 /**************************************************************************/
20 
21 #define GX_SOURCE_CODE
22 
23 
24 /* Include necessary system files.  */
25 
26 #include "gx_api.h"
27 #include "gx_display.h"
28 #include "gx_utility.h"
29 
30 /* Bring in externs for caller checking code.  */
31 GX_CALLER_CHECKING_EXTERNS
32 
33 /**************************************************************************/
34 /*                                                                        */
35 /*  FUNCTION                                               RELEASE        */
36 /*                                                                        */
37 /*    _gxe_display_language_table_set                     PORTABLE C      */
38 /*                                                           6.1          */
39 /*  AUTHOR                                                                */
40 /*                                                                        */
41 /*    Kenneth Maxwell, Microsoft Corporation                              */
42 /*                                                                        */
43 /*  DESCRIPTION                                                           */
44 /*                                                                        */
45 /*    This function checks for errors in display language table set call. */
46 /*                                                                        */
47 /*  INPUT                                                                 */
48 /*                                                                        */
49 /*    display                               Pointer to display instance.  */
50 /*    language_table                        The language table to be set  */
51 /*    num_languages                         Number of languages in the    */
52 /*                                            table                       */
53 /*    number_of_strings                     Number of strings in each     */
54 /*                                            language                    */
55 /*                                                                        */
56 /*  OUTPUT                                                                */
57 /*                                                                        */
58 /*    status                                Completion status             */
59 /*                                                                        */
60 /*  CALLS                                                                 */
61 /*                                                                        */
62 /*    _gx_display_language_table_set        Actual display language table */
63 /*                                            set call                    */
64 /*                                                                        */
65 /*  CALLED BY                                                             */
66 /*                                                                        */
67 /*    Application Code                                                    */
68 /*                                                                        */
69 /*  RELEASE HISTORY                                                       */
70 /*                                                                        */
71 /*    DATE              NAME                      DESCRIPTION             */
72 /*                                                                        */
73 /*  05-19-2020     Kenneth Maxwell          Initial Version 6.0           */
74 /*  09-30-2020     Kenneth Maxwell          Modified comment(s),          */
75 /*                                            resulting in version 6.1    */
76 /*                                                                        */
77 /**************************************************************************/
78 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
_gxe_display_language_table_set(GX_DISPLAY * display,GX_CHAR *** language_table,GX_UBYTE number_of_languages,UINT number_of_strings)79 UINT  _gxe_display_language_table_set(GX_DISPLAY *display, GX_CHAR ***language_table,
80                                       GX_UBYTE number_of_languages, UINT number_of_strings)
81 {
82 UINT status;
83 
84     /* Check for invalid caller.  */
85     GX_INIT_AND_THREADS_CALLER_CHECKING
86 
87     if (display == GX_NULL)
88     {
89         /* Check for null pointer*/
90         return(GX_PTR_ERROR);
91     }
92 
93     /* Allow string table to be NULL if number_of_strings is zero. */
94     if (number_of_strings && language_table == GX_NULL)
95     {
96         /* Return error.  */
97         return(GX_PTR_ERROR);
98     }
99 
100     /* Call actual system string table set.  */
101     status = _gx_display_language_table_set(display, language_table, number_of_languages, number_of_strings);
102 
103     /* Return status.  */
104     return(status);
105 }
106 #endif
107 
108 /**************************************************************************/
109 /*                                                                        */
110 /*  FUNCTION                                               RELEASE        */
111 /*                                                                        */
112 /*    _gxe_display_language_table_set_ext                 PORTABLE C      */
113 /*                                                           6.1          */
114 /*  AUTHOR                                                                */
115 /*                                                                        */
116 /*    Kenneth Maxwell, Microsoft Corporation                              */
117 /*                                                                        */
118 /*  DESCRIPTION                                                           */
119 /*                                                                        */
120 /*    This function checks for errors in display language table set call. */
121 /*                                                                        */
122 /*  INPUT                                                                 */
123 /*                                                                        */
124 /*    display                               Pointer to display instance.  */
125 /*    table                                 The language table to be set  */
126 /*    num_languages                         Number of languages in the    */
127 /*                                            table                       */
128 /*    number_of_strings                     Number of strings in each     */
129 /*                                            language                    */
130 /*                                                                        */
131 /*  OUTPUT                                                                */
132 /*                                                                        */
133 /*    status                                Completion status             */
134 /*                                                                        */
135 /*  CALLS                                                                 */
136 /*                                                                        */
137 /*    _gx_display_language_table_set_ext    Actual display language table */
138 /*                                            set ext call                */
139 /*                                                                        */
140 /*  CALLED BY                                                             */
141 /*                                                                        */
142 /*    Application Code                                                    */
143 /*                                                                        */
144 /*  RELEASE HISTORY                                                       */
145 /*                                                                        */
146 /*    DATE              NAME                      DESCRIPTION             */
147 /*                                                                        */
148 /*  05-19-2020     Kenneth Maxwell          Initial Version 6.0           */
149 /*  09-30-2020     Kenneth Maxwell          Modified comment(s),          */
150 /*                                            resulting in version 6.1    */
151 /*                                                                        */
152 /**************************************************************************/
_gxe_display_language_table_set_ext(GX_DISPLAY * display,GX_CONST GX_STRING ** table,GX_UBYTE num_languages,UINT number_of_strings)153 UINT _gxe_display_language_table_set_ext(GX_DISPLAY *display, GX_CONST GX_STRING **table, GX_UBYTE num_languages, UINT number_of_strings)
154 {
155 UINT                status;
156 UINT                language;
157 UINT                string_id;
158 GX_CONST GX_STRING *string_table;
159 GX_CONST GX_STRING *string;
160 UINT                string_length;
161 
162     /* Check for invalid caller.  */
163     GX_INIT_AND_THREADS_CALLER_CHECKING
164 
165     if (display == GX_NULL)
166     {
167         /* Check for null pointer*/
168         return(GX_PTR_ERROR);
169     }
170 
171     /* Allow string table to be NULL if number_of_strings is zero. */
172     if (number_of_strings)
173     {
174         if (table == GX_NULL)
175         {
176             /* Return error.  */
177             return(GX_PTR_ERROR);
178         }
179 
180         for (language = 0; language < num_languages; language++)
181         {
182             string_table = table[language];
183             for (string_id = 0; string_id < number_of_strings; string_id++)
184             {
185                 string = &string_table[string_id];
186 
187                 if (string -> gx_string_ptr)
188                 {
189                     status = _gx_utility_string_length_check(string -> gx_string_ptr, &string_length, string -> gx_string_length);
190 
191                     if (status != GX_SUCCESS)
192                     {
193                         return status;
194                     }
195                 }
196                 else
197                 {
198                     string_length = 0;
199                 }
200 
201                 if (string_length != string -> gx_string_length)
202                 {
203                     return GX_INVALID_STRING_LENGTH;
204                 }
205             }
206         }
207     }
208 
209     /* Call actual system string table set.  */
210     status = _gx_display_language_table_set_ext(display, table, num_languages, number_of_strings);
211 
212     /* Return status.  */
213     return(status);
214 }
215 
216 /**************************************************************************/
217 /*                                                                        */
218 /*  FUNCTION                                               RELEASE        */
219 /*                                                                        */
220 /*    _gxe_display_language_direction_table_set           PORTABLE C      */
221 /*                                                           6.1.10       */
222 /*  AUTHOR                                                                */
223 /*                                                                        */
224 /*    Ting Zhu, Microsoft Corporation                                     */
225 /*                                                                        */
226 /*  DESCRIPTION                                                           */
227 /*                                                                        */
228 /*    This function checks for errors in display language direction table */
229 /*    set call.                                                           */
230 /*                                                                        */
231 /*  INPUT                                                                 */
232 /*                                                                        */
233 /*    display                               Pointer to display instance.  */
234 /*    language_direction_table              The language direction table  */
235 /*                                            to be set                   */
236 /*    num_languages                         Number of languages in the    */
237 /*                                            table                       */
238 /*                                                                        */
239 /*  OUTPUT                                                                */
240 /*                                                                        */
241 /*    status                                Completion status             */
242 /*                                                                        */
243 /*  CALLS                                                                 */
244 /*                                                                        */
245 /*    _gx_display_language_direciton_table_set                            */
246 /*                                          Actual display language table */
247 /*                                            set ext call                */
248 /*                                                                        */
249 /*  CALLED BY                                                             */
250 /*                                                                        */
251 /*    Application Code                                                    */
252 /*                                                                        */
253 /*  RELEASE HISTORY                                                       */
254 /*                                                                        */
255 /*    DATE              NAME                      DESCRIPTION             */
256 /*                                                                        */
257 /*  01-31-2022     Ting Zhu                 Initial Version 6.1.10        */
258 /*                                                                        */
259 /**************************************************************************/
260 #if defined(GX_DYNAMIC_BIDI_TEXT_SUPPORT)
_gxe_display_language_direction_table_set(GX_DISPLAY * display,GX_CONST GX_UBYTE * language_direction_table,GX_UBYTE num_languages)261 UINT _gxe_display_language_direction_table_set(GX_DISPLAY *display, GX_CONST GX_UBYTE *language_direction_table, GX_UBYTE num_languages)
262 {
263 UINT status;
264 
265     /* Check for invalid caller.  */
266     GX_INIT_AND_THREADS_CALLER_CHECKING
267 
268     if (display == GX_NULL)
269     {
270         /* Check for null pointer*/
271         return(GX_PTR_ERROR);
272     }
273 
274     /* Call actual system string table set.  */
275     status = _gx_display_language_direction_table_set(display, language_direction_table, num_languages);
276 
277     /* Return status.  */
278     return(status);
279 }
280 #endif
281