Commit ecbf3ba64082cd1b510d91f2ab21825f479f8cb4
1 parent
3b6932dd
Exists in
master
and in
3 other branches
Adding method to get property descriptor by name.
Showing
11 changed files
with
106 additions
and
36 deletions
Show diff stats
src/core/actions/actions.c
| @@ -31,6 +31,7 @@ | @@ -31,6 +31,7 @@ | ||
| 31 | #include <lib3270/log.h> | 31 | #include <lib3270/log.h> |
| 32 | #include <lib3270/trace.h> | 32 | #include <lib3270/trace.h> |
| 33 | #include <lib3270/actions.h> | 33 | #include <lib3270/actions.h> |
| 34 | +#include <utilc.h> | ||
| 34 | 35 | ||
| 35 | struct lib3270_action_callback | 36 | struct lib3270_action_callback |
| 36 | { | 37 | { |
| @@ -40,33 +41,6 @@ struct lib3270_action_callback | @@ -40,33 +41,6 @@ struct lib3270_action_callback | ||
| 40 | 41 | ||
| 41 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ | 42 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ |
| 42 | 43 | ||
| 43 | -static int compare_alnum(const char *s1, const char *s2) | ||
| 44 | -{ | ||
| 45 | - while(*s1 && *s2) { | ||
| 46 | - | ||
| 47 | - char c1 = toupper(*s1); | ||
| 48 | - if(!isalnum(c1)) { | ||
| 49 | - s1++; | ||
| 50 | - continue; | ||
| 51 | - } | ||
| 52 | - | ||
| 53 | - char c2 = toupper(*s2); | ||
| 54 | - if(!isalnum(c2)) { | ||
| 55 | - s2++; | ||
| 56 | - continue; | ||
| 57 | - } | ||
| 58 | - | ||
| 59 | - if(c1 != c2) | ||
| 60 | - return 1; | ||
| 61 | - | ||
| 62 | - s1++; | ||
| 63 | - s2++; | ||
| 64 | - | ||
| 65 | - } | ||
| 66 | - | ||
| 67 | - return 0; | ||
| 68 | -} | ||
| 69 | - | ||
| 70 | const LIB3270_ACTION * lib3270_action_get_by_name(const char *name) | 44 | const LIB3270_ACTION * lib3270_action_get_by_name(const char *name) |
| 71 | { | 45 | { |
| 72 | const LIB3270_ACTION * actions = lib3270_get_actions(); | 46 | const LIB3270_ACTION * actions = lib3270_get_actions(); |
| @@ -81,7 +55,7 @@ const LIB3270_ACTION * lib3270_action_get_by_name(const char *name) | @@ -81,7 +55,7 @@ const LIB3270_ACTION * lib3270_action_get_by_name(const char *name) | ||
| 81 | // Check only alphabetic and numeric (for compatibility) | 55 | // Check only alphabetic and numeric (for compatibility) |
| 82 | for(f=0; actions[f].name; f++) | 56 | for(f=0; actions[f].name; f++) |
| 83 | { | 57 | { |
| 84 | - if(!compare_alnum(name,actions[f].name)) | 58 | + if(!lib3270_compare_alnum(name,actions[f].name)) |
| 85 | return actions+f; | 59 | return actions+f; |
| 86 | } | 60 | } |
| 87 | 61 |
src/core/properties/get.c
| @@ -32,6 +32,7 @@ | @@ -32,6 +32,7 @@ | ||
| 32 | #include <string.h> | 32 | #include <string.h> |
| 33 | #include <lib3270.h> | 33 | #include <lib3270.h> |
| 34 | #include <lib3270/properties.h> | 34 | #include <lib3270/properties.h> |
| 35 | + #include <utilc.h> | ||
| 35 | 36 | ||
| 36 | LIB3270_EXPORT const char * lib3270_property_get_description(const LIB3270_PROPERTY * property) { | 37 | LIB3270_EXPORT const char * lib3270_property_get_description(const LIB3270_PROPERTY * property) { |
| 37 | 38 | ||
| @@ -53,3 +54,40 @@ | @@ -53,3 +54,40 @@ | ||
| 53 | return property->name; | 54 | return property->name; |
| 54 | 55 | ||
| 55 | } | 56 | } |
| 57 | + | ||
| 58 | + LIB3270_EXPORT const LIB3270_PROPERTY * lib3270_property_get_by_name(const char *name) { | ||
| 59 | + | ||
| 60 | + // Search string properties | ||
| 61 | + { | ||
| 62 | + const LIB3270_STRING_PROPERTY * property = lib3270_get_string_properties_list(); | ||
| 63 | + | ||
| 64 | + while(property->name) { | ||
| 65 | + | ||
| 66 | + if(!lib3270_compare_alnum(name,property->name)) | ||
| 67 | + return (const LIB3270_PROPERTY *) property; | ||
| 68 | + | ||
| 69 | + property++; | ||
| 70 | + | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + // Search unsigned int properties. | ||
| 76 | + { | ||
| 77 | + const LIB3270_UINT_PROPERTY * property = lib3270_get_unsigned_properties_list(); | ||
| 78 | + | ||
| 79 | + while(property->name) { | ||
| 80 | + | ||
| 81 | + if(!lib3270_compare_alnum(name,property->name)) | ||
| 82 | + return (const LIB3270_PROPERTY *) property; | ||
| 83 | + | ||
| 84 | + property++; | ||
| 85 | + | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + // Not found! | ||
| 91 | + errno = ENOENT; | ||
| 92 | + return NULL; | ||
| 93 | + } |
src/core/properties/string.c
| @@ -67,10 +67,11 @@ | @@ -67,10 +67,11 @@ | ||
| 67 | }, | 67 | }, |
| 68 | 68 | ||
| 69 | { | 69 | { |
| 70 | - .name = "url", // Property name. | ||
| 71 | - .description = N_( "URL of the current host" ), // Property description. | ||
| 72 | - .get = lib3270_get_url, // Get value. | ||
| 73 | - .set = lib3270_set_url // Set value. | 70 | + .name = "url", // Property name. |
| 71 | + .icon = "network-server", // Property icon. | ||
| 72 | + .description = N_( "URL of the current host" ), // Property description. | ||
| 73 | + .get = lib3270_get_url, // Get value. | ||
| 74 | + .set = lib3270_set_url // Set value. | ||
| 74 | }, | 75 | }, |
| 75 | 76 | ||
| 76 | { | 77 | { |
src/core/properties/unsigned.c
| @@ -68,6 +68,8 @@ | @@ -68,6 +68,8 @@ | ||
| 68 | 68 | ||
| 69 | { | 69 | { |
| 70 | .name = "model_number", // Property name. | 70 | .name = "model_number", // Property name. |
| 71 | + .icon = "video-display", // Property Icon. | ||
| 72 | + .label = N_("Terminal model"), // Property label. | ||
| 71 | .description = N_( "The model number" ), // Property description. | 73 | .description = N_( "The model number" ), // Property description. |
| 72 | .min = 2, // Minimum allowable value. | 74 | .min = 2, // Minimum allowable value. |
| 73 | .max = 5, // Maximum allowable value. | 75 | .max = 5, // Maximum allowable value. |
src/core/util.c
| @@ -807,3 +807,31 @@ char * lib3270_unescape(const char *text) | @@ -807,3 +807,31 @@ char * lib3270_unescape(const char *text) | ||
| 807 | 807 | ||
| 808 | return outString; | 808 | return outString; |
| 809 | } | 809 | } |
| 810 | + | ||
| 811 | +int lib3270_compare_alnum(const char *s1, const char *s2) | ||
| 812 | +{ | ||
| 813 | + while(*s1 && *s2) { | ||
| 814 | + | ||
| 815 | + char c1 = toupper(*s1); | ||
| 816 | + if(!isalnum(c1)) { | ||
| 817 | + s1++; | ||
| 818 | + continue; | ||
| 819 | + } | ||
| 820 | + | ||
| 821 | + char c2 = toupper(*s2); | ||
| 822 | + if(!isalnum(c2)) { | ||
| 823 | + s2++; | ||
| 824 | + continue; | ||
| 825 | + } | ||
| 826 | + | ||
| 827 | + if(c1 != c2) | ||
| 828 | + return 1; | ||
| 829 | + | ||
| 830 | + s1++; | ||
| 831 | + s2++; | ||
| 832 | + | ||
| 833 | + } | ||
| 834 | + | ||
| 835 | + return 0; | ||
| 836 | +} | ||
| 837 | + |
src/include/lib3270.h
| @@ -365,6 +365,8 @@ | @@ -365,6 +365,8 @@ | ||
| 365 | */ | 365 | */ |
| 366 | #define LIB3270_PROPERTY_HEAD \ | 366 | #define LIB3270_PROPERTY_HEAD \ |
| 367 | const char * name; \ | 367 | const char * name; \ |
| 368 | + const char * label; \ | ||
| 369 | + const char * icon; \ | ||
| 368 | const char * summary; \ | 370 | const char * summary; \ |
| 369 | const char * description; | 371 | const char * description; |
| 370 | 372 |
src/include/lib3270/actions.h
| @@ -68,8 +68,6 @@ | @@ -68,8 +68,6 @@ | ||
| 68 | int (*activatable)(const H3270 *hSession); ///< @brief Is the action activatable? | 68 | int (*activatable)(const H3270 *hSession); ///< @brief Is the action activatable? |
| 69 | 69 | ||
| 70 | const char *key; ///< @brief Default key (or NULL if no default). | 70 | const char *key; ///< @brief Default key (or NULL if no default). |
| 71 | - const char *icon; ///< @brief Icon name (from https://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html) | ||
| 72 | - const char *label; ///< @brief Button label (or NULL). | ||
| 73 | 71 | ||
| 74 | } LIB3270_ACTION; | 72 | } LIB3270_ACTION; |
| 75 | 73 |
src/include/lib3270/properties.h
| @@ -107,6 +107,13 @@ | @@ -107,6 +107,13 @@ | ||
| 107 | */ | 107 | */ |
| 108 | LIB3270_EXPORT const LIB3270_STRING_PROPERTY * lib3270_get_string_properties_list(void); | 108 | LIB3270_EXPORT const LIB3270_STRING_PROPERTY * lib3270_get_string_properties_list(void); |
| 109 | 109 | ||
| 110 | + /** | ||
| 111 | + * @brief Get property descriptor by name. | ||
| 112 | + * | ||
| 113 | + * @return Property descriptor or NULL if failed. | ||
| 114 | + * | ||
| 115 | + */ | ||
| 116 | + LIB3270_EXPORT const LIB3270_PROPERTY * lib3270_property_get_by_name(const char *name); | ||
| 110 | 117 | ||
| 111 | /** | 118 | /** |
| 112 | * @brief Get lib3270 integer property by name. | 119 | * @brief Get lib3270 integer property by name. |
src/include/lib3270/toggle.h
| @@ -98,8 +98,6 @@ | @@ -98,8 +98,6 @@ | ||
| 98 | LIB3270_TOGGLE_ID id; ///< @brief Toggle ID. | 98 | LIB3270_TOGGLE_ID id; ///< @brief Toggle ID. |
| 99 | const char def; ///< @brief Default value. | 99 | const char def; ///< @brief Default value. |
| 100 | const char * key; ///< @brief Default key (or NULL if no default). | 100 | const char * key; ///< @brief Default key (or NULL if no default). |
| 101 | - const char * icon; ///< @brief Icon name (from https://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html) | ||
| 102 | - const char * label; ///< @brief Label for button or menu (NULL if isn't available). | ||
| 103 | 101 | ||
| 104 | } LIB3270_TOGGLE; | 102 | } LIB3270_TOGGLE; |
| 105 | 103 |
src/include/utilc.h
| @@ -69,3 +69,15 @@ LIB3270_INTERNAL void rpf_free(rpf_t *r); | @@ -69,3 +69,15 @@ LIB3270_INTERNAL void rpf_free(rpf_t *r); | ||
| 69 | * | 69 | * |
| 70 | */ | 70 | */ |
| 71 | LIB3270_INTERNAL char * lib3270_unescape(const char *text); | 71 | LIB3270_INTERNAL char * lib3270_unescape(const char *text); |
| 72 | + | ||
| 73 | +/** | ||
| 74 | + * @brief Compare strings ignoring non alfanumeric chars. | ||
| 75 | + * | ||
| 76 | + * @param s1 First string. | ||
| 77 | + * @param s2 Second string. | ||
| 78 | + * | ||
| 79 | + * @return 0 if equal, non zero if not. | ||
| 80 | + * | ||
| 81 | + */ | ||
| 82 | +LIB3270_INTERNAL int lib3270_compare_alnum(const char *s1, const char *s2); | ||
| 83 | + |
src/testprogram/testprogram.c
| @@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
| 10 | #include <lib3270/trace.h> | 10 | #include <lib3270/trace.h> |
| 11 | #include <lib3270/toggle.h> | 11 | #include <lib3270/toggle.h> |
| 12 | #include <lib3270/log.h> | 12 | #include <lib3270/log.h> |
| 13 | +#include <lib3270/properties.h> | ||
| 13 | 14 | ||
| 14 | #define MAX_ARGS 10 | 15 | #define MAX_ARGS 10 |
| 15 | 16 | ||
| @@ -152,6 +153,7 @@ int main(int argc, char *argv[]) | @@ -152,6 +153,7 @@ int main(int argc, char *argv[]) | ||
| 152 | 153 | ||
| 153 | lib3270_disconnect(h); | 154 | lib3270_disconnect(h); |
| 154 | 155 | ||
| 156 | + /* | ||
| 155 | { | 157 | { |
| 156 | lib3270_set_lunames(h,"a,b,c,d,e"); | 158 | lib3270_set_lunames(h,"a,b,c,d,e"); |
| 157 | 159 | ||
| @@ -164,6 +166,14 @@ int main(int argc, char *argv[]) | @@ -164,6 +166,14 @@ int main(int argc, char *argv[]) | ||
| 164 | } | 166 | } |
| 165 | 167 | ||
| 166 | } | 168 | } |
| 169 | + */ | ||
| 170 | + | ||
| 171 | + { | ||
| 172 | + const LIB3270_PROPERTY * property = lib3270_property_get_by_name("model-number"); | ||
| 173 | + | ||
| 174 | + debug("Model-number=%p",property); | ||
| 175 | + | ||
| 176 | + } | ||
| 167 | 177 | ||
| 168 | lib3270_session_free(h); | 178 | lib3270_session_free(h); |
| 169 | 179 |