Commit eb5a1d119aca547e1c73dd6c5729c261437d5b17

Authored by Perry Werneck
1 parent 713a618b

Boolean and integer properties aren't the same.

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