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)) | ... | ... |