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,6 +60,13 @@
60 60
61 } LIB3270_STRING_PROPERTY; 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 * @brief Get lib3270 integer properties table. 72 * @brief Get lib3270 integer properties table.
src/lib3270/properties.c
@@ -48,10 +48,9 @@ @@ -48,10 +48,9 @@
48 return (int) lib3270_get_program_message(hSession); 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 "ready", // Property name. 55 "ready", // Property name.
57 N_( "" ), // Property description. 56 N_( "" ), // Property description.
@@ -137,6 +136,23 @@ @@ -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 "cursor_address", // Property name. 156 "cursor_address", // Property name.
141 N_( "Cursor address" ), // Property description. 157 N_( "Cursor address" ), // Property description.
142 lib3270_get_cursor_address, // Get value. 158 lib3270_get_cursor_address, // Get value.
@@ -144,13 +160,6 @@ @@ -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 "model_number", // Property name. 163 "model_number", // Property name.
155 N_( "The model number" ), // Property description. 164 N_( "The model number" ), // Property description.
156 lib3270_get_model_number, // Get value. 165 lib3270_get_model_number, // Get value.
@@ -292,13 +301,35 @@ @@ -292,13 +301,35 @@
292 int lib3270_get_int_property(H3270 *hSession, const char *name, int seconds) 301 int lib3270_get_int_property(H3270 *hSession, const char *name, int seconds)
293 { 302 {
294 size_t ix; 303 size_t ix;
  304 + const LIB3270_INT_PROPERTY * properties;
295 305
296 if(seconds) 306 if(seconds)
297 { 307 {
298 lib3270_wait_for_ready(hSession, seconds); 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 for(ix = 0; ix < (sizeof(properties)/sizeof(properties[0])); ix++) 333 for(ix = 0; ix < (sizeof(properties)/sizeof(properties[0])); ix++)
303 { 334 {
304 if(!strcasecmp(name,properties[ix].name)) 335 if(!strcasecmp(name,properties[ix].name))
@@ -324,13 +355,34 @@ int lib3270_get_int_property(H3270 *hSession, const char *name, int seconds) @@ -324,13 +355,34 @@ int lib3270_get_int_property(H3270 *hSession, const char *name, int seconds)
324 int lib3270_set_int_property(H3270 *hSession, const char *name, int value, int seconds) 355 int lib3270_set_int_property(H3270 *hSession, const char *name, int value, int seconds)
325 { 356 {
326 size_t ix; 357 size_t ix;
  358 + const LIB3270_INT_PROPERTY * properties;
327 359
328 if(seconds) 360 if(seconds)
329 { 361 {
330 lib3270_wait_for_ready(hSession, seconds); 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 for(ix = 0; properties[ix].name; ix++) 386 for(ix = 0; properties[ix].name; ix++)
335 { 387 {
336 if(!strcasecmp(name,properties[ix].name)) 388 if(!strcasecmp(name,properties[ix].name))