Commit eb5a1d119aca547e1c73dd6c5729c261437d5b17
1 parent
713a618b
Exists in
master
and in
3 other branches
Boolean and integer properties aren't the same.
Showing
2 changed files
with
71 additions
and
12 deletions
Show diff stats
src/include/lib3270/properties.h
... | ... | @@ -60,6 +60,13 @@ |
60 | 60 | |
61 | 61 | } LIB3270_STRING_PROPERTY; |
62 | 62 | |
63 | + /** | |
64 | + * @brief Get lib3270 integer properties table. | |
65 | + * | |
66 | + * @return The properties table. | |
67 | + * | |
68 | + */ | |
69 | + LIB3270_EXPORT const LIB3270_INT_PROPERTY * lib3270_get_boolean_properties_list(void); | |
63 | 70 | |
64 | 71 | /** |
65 | 72 | * @brief Get lib3270 integer properties table. | ... | ... |
src/lib3270/properties.c
... | ... | @@ -48,10 +48,9 @@ |
48 | 48 | return (int) lib3270_get_program_message(hSession); |
49 | 49 | } |
50 | 50 | |
51 | - const LIB3270_INT_PROPERTY * lib3270_get_int_properties_list(void) { | |
52 | - | |
53 | - static const LIB3270_INT_PROPERTY properties[] = { | |
51 | + const LIB3270_INT_PROPERTY * lib3270_get_boolean_properties_list(void) { | |
54 | 52 | |
53 | + static const LIB3270_INT_PROPERTY properties[] = { | |
55 | 54 | { |
56 | 55 | "ready", // Property name. |
57 | 56 | N_( "" ), // Property description. |
... | ... | @@ -137,6 +136,23 @@ |
137 | 136 | }, |
138 | 137 | |
139 | 138 | { |
139 | + "has_selection", // Property name. | |
140 | + N_( "Has selected area" ), // Property description. | |
141 | + lib3270_has_selection, // Get value. | |
142 | + NULL // Set value. | |
143 | + }, | |
144 | + | |
145 | + }; | |
146 | + | |
147 | + return properties; | |
148 | + | |
149 | + } | |
150 | + | |
151 | + const LIB3270_INT_PROPERTY * lib3270_get_int_properties_list(void) { | |
152 | + | |
153 | + static const LIB3270_INT_PROPERTY properties[] = { | |
154 | + | |
155 | + { | |
140 | 156 | "cursor_address", // Property name. |
141 | 157 | N_( "Cursor address" ), // Property description. |
142 | 158 | lib3270_get_cursor_address, // Get value. |
... | ... | @@ -144,13 +160,6 @@ |
144 | 160 | }, |
145 | 161 | |
146 | 162 | { |
147 | - "has_selection", // Property name. | |
148 | - N_( "Has selected aread" ), // Property description. | |
149 | - lib3270_has_selection, // Get value. | |
150 | - NULL // Set value. | |
151 | - }, | |
152 | - | |
153 | - { | |
154 | 163 | "model_number", // Property name. |
155 | 164 | N_( "The model number" ), // Property description. |
156 | 165 | lib3270_get_model_number, // Get value. |
... | ... | @@ -292,13 +301,35 @@ |
292 | 301 | int lib3270_get_int_property(H3270 *hSession, const char *name, int seconds) |
293 | 302 | { |
294 | 303 | size_t ix; |
304 | + const LIB3270_INT_PROPERTY * properties; | |
295 | 305 | |
296 | 306 | if(seconds) |
297 | 307 | { |
298 | 308 | lib3270_wait_for_ready(hSession, seconds); |
299 | 309 | } |
300 | 310 | |
301 | - const LIB3270_INT_PROPERTY * properties = lib3270_get_int_properties_list(); | |
311 | + // Check for boolean properties | |
312 | + properties = lib3270_get_boolean_properties_list(); | |
313 | + for(ix = 0; ix < (sizeof(properties)/sizeof(properties[0])); ix++) | |
314 | + { | |
315 | + if(!strcasecmp(name,properties[ix].name)) | |
316 | + { | |
317 | + if(properties[ix].get) | |
318 | + { | |
319 | + return properties[ix].get(hSession); | |
320 | + } | |
321 | + else | |
322 | + { | |
323 | + errno = EPERM; | |
324 | + return -1; | |
325 | + } | |
326 | + } | |
327 | + | |
328 | + | |
329 | + } | |
330 | + | |
331 | + // Check for int properties | |
332 | + properties = lib3270_get_int_properties_list(); | |
302 | 333 | for(ix = 0; ix < (sizeof(properties)/sizeof(properties[0])); ix++) |
303 | 334 | { |
304 | 335 | if(!strcasecmp(name,properties[ix].name)) |
... | ... | @@ -324,13 +355,34 @@ int lib3270_get_int_property(H3270 *hSession, const char *name, int seconds) |
324 | 355 | int lib3270_set_int_property(H3270 *hSession, const char *name, int value, int seconds) |
325 | 356 | { |
326 | 357 | size_t ix; |
358 | + const LIB3270_INT_PROPERTY * properties; | |
327 | 359 | |
328 | 360 | if(seconds) |
329 | 361 | { |
330 | 362 | lib3270_wait_for_ready(hSession, seconds); |
331 | 363 | } |
332 | 364 | |
333 | - const LIB3270_INT_PROPERTY * properties = lib3270_get_int_properties_list(); | |
365 | + // Check for boolean properties | |
366 | + properties = lib3270_get_boolean_properties_list(); | |
367 | + for(ix = 0; properties[ix].name; ix++) | |
368 | + { | |
369 | + if(!strcasecmp(name,properties[ix].name)) | |
370 | + { | |
371 | + if(properties[ix].set) | |
372 | + { | |
373 | + return properties[ix].set(hSession, value); | |
374 | + } | |
375 | + else | |
376 | + { | |
377 | + errno = EPERM; | |
378 | + return -1; | |
379 | + } | |
380 | + } | |
381 | + | |
382 | + } | |
383 | + | |
384 | + // Check for INT Properties | |
385 | + properties = lib3270_get_int_properties_list(); | |
334 | 386 | for(ix = 0; properties[ix].name; ix++) |
335 | 387 | { |
336 | 388 | if(!strcasecmp(name,properties[ix].name)) | ... | ... |