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 /** System Management (System) */
18 /** */
19 /**************************************************************************/
20
21 #define GX_SOURCE_CODE
22
23
24 /* Include necessary system files. */
25
26 #include "gx_api.h"
27 #include "gx_system.h"
28 #include "gx_display.h"
29 #include "gx_utility.h"
30
31
32 /**************************************************************************/
33 /* */
34 /* FUNCTION RELEASE */
35 /* */
36 /* _gx_display_string_get PORTABLE C */
37 /* 6.1 */
38 /* AUTHOR */
39 /* */
40 /* Kenneth Maxwell, Microsoft Corporation */
41 /* */
42 /* DESCRIPTION (deprecated) */
43 /* */
44 /* This service return the string associated with the specified string */
45 /* ID. */
46 /* */
47 /* INPUT */
48 /* */
49 /* display Pointer to display instance */
50 /* string_id String resource ID */
51 /* return_string Pointer to return string */
52 /* pointer */
53 /* */
54 /* OUTPUT */
55 /* */
56 /* status Completion status */
57 /* */
58 /* CALLS */
59 /* */
60 /* None */
61 /* */
62 /* CALLED BY */
63 /* */
64 /* Application Code */
65 /* _gx_context_string_get */
66 /* _gx_widget_string_get Drew the text onto the wdiget */
67 /* */
68 /* RELEASE HISTORY */
69 /* */
70 /* DATE NAME DESCRIPTION */
71 /* */
72 /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */
73 /* 09-30-2020 Kenneth Maxwell Modified comment(s), */
74 /* resulting in version 6.1 */
75 /* */
76 /**************************************************************************/
77 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
_gx_display_string_get(GX_DISPLAY * display,GX_RESOURCE_ID string_id,GX_CONST GX_CHAR ** return_string)78 UINT _gx_display_string_get(GX_DISPLAY *display, GX_RESOURCE_ID string_id, GX_CONST GX_CHAR **return_string)
79 {
80 UINT status = GX_SUCCESS;
81 GX_RESOURCE_ID string_table_size;
82 GX_CONST GX_CHAR *string_ptr = GX_NULL;
83 INT language;
84
85 /* Pickup size of string table. */
86 string_table_size = display -> gx_display_string_table_size;
87
88 /* Check to make sure the string ID is valid. */
89 if(string_id >= string_table_size)
90 {
91 status = GX_INVALID_RESOURCE_ID;
92 }
93 else if (string_id > 0)
94 {
95 /* Setup return string pointer associated with this ID. */
96 /* first try the active language */
97 language = display -> gx_display_active_language;
98 if (display -> gx_display_language_table)
99 {
100 string_ptr = display -> gx_display_language_table[language][string_id].gx_string_ptr;
101 if (language && string_ptr == GX_NULL)
102 {
103 /* If active language string is NULL, return reference language string */
104 string_ptr = display -> gx_display_language_table[0][string_id].gx_string_ptr;
105 }
106 }
107 else
108 {
109 if (display -> gx_display_language_table_deprecated)
110 {
111 string_ptr = display -> gx_display_language_table_deprecated[language][string_id];
112 if (language && string_ptr == GX_NULL)
113 {
114 /* If active language string is NULL, return reference language string */
115 string_ptr = display -> gx_display_language_table_deprecated[0][string_id];
116 }
117 }
118 }
119 }
120
121 *return_string = string_ptr;
122 return status;
123 }
124 #endif
125
126 /**************************************************************************/
127 /* */
128 /* FUNCTION RELEASE */
129 /* */
130 /* _gx_display_string_get_ext PORTABLE C */
131 /* 6.1 */
132 /* AUTHOR */
133 /* */
134 /* Kenneth Maxwell, Microsoft Corporation */
135 /* */
136 /* DESCRIPTION */
137 /* */
138 /* This service return the string associated with the specified string */
139 /* ID. */
140 /* */
141 /* INPUT */
142 /* */
143 /* display Pointer to display instance */
144 /* string_id String resource ID */
145 /* return_string Pointer to return string */
146 /* pointer */
147 /* */
148 /* OUTPUT */
149 /* */
150 /* status Completion status */
151 /* */
152 /* CALLS */
153 /* */
154 /* None */
155 /* */
156 /* CALLED BY */
157 /* */
158 /* Application Code */
159 /* _gx_context_string_get */
160 /* _gx_widget_string_get Drew the text onto the wdiget */
161 /* */
162 /* RELEASE HISTORY */
163 /* */
164 /* DATE NAME DESCRIPTION */
165 /* */
166 /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */
167 /* 09-30-2020 Kenneth Maxwell Modified comment(s), */
168 /* resulting in version 6.1 */
169 /* */
170 /**************************************************************************/
_gx_display_string_get_ext(GX_DISPLAY * display,GX_RESOURCE_ID string_id,GX_STRING * return_string)171 UINT _gx_display_string_get_ext(GX_DISPLAY *display, GX_RESOURCE_ID string_id, GX_STRING *return_string)
172 {
173 GX_RESOURCE_ID string_table_size;
174 GX_STRING string;
175 INT language;
176 UINT status = GX_SUCCESS;
177
178 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
179 GX_CONST GX_CHAR *old_string;
180 UINT string_length;
181 #endif
182
183 string.gx_string_ptr = GX_NULL;
184 string.gx_string_length = 0;
185
186 #if defined(GX_ENABLE_DEPRECATED_STRING_API)
187 /* If application is used the deprecated API to assign string table,
188 convert to GX_STRING here
189 */
190 if (display -> gx_display_language_table_deprecated)
191 {
192 status = _gx_display_string_get(display, string_id, &old_string);
193 if (status == GX_SUCCESS)
194 {
195 status = _gx_utility_string_length_check(old_string, &string_length, GX_MAX_STRING_LENGTH);
196 if (status == GX_SUCCESS)
197 {
198 string.gx_string_length = string_length;
199 string.gx_string_ptr = old_string;
200 }
201 }
202 *return_string = string;
203 return status;
204 }
205 #endif
206
207 /* Pickup size of string table. */
208 string_table_size = display -> gx_display_string_table_size;
209
210 /* Check to make sure the string ID is valid. */
211 if(string_id >= string_table_size)
212 {
213 status = GX_INVALID_RESOURCE_ID;
214 }
215 else if(string_id > 0)
216 {
217 if (display -> gx_display_language_table)
218 {
219 /* Setup return string pointer associated with this ID. */
220 /* first try the active language */
221 language = display -> gx_display_active_language;
222 string = display -> gx_display_language_table[language][string_id];
223
224 if (language && string.gx_string_ptr == GX_NULL)
225 {
226 /* If active language string is NULL, return reference language string */
227 string = display -> gx_display_language_table[0][string_id];
228 }
229 }
230 }
231
232 *return_string = string;
233 return status;
234 }
235