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 | 31 | #include <lib3270/log.h> |
32 | 32 | #include <lib3270/trace.h> |
33 | 33 | #include <lib3270/actions.h> |
34 | +#include <utilc.h> | |
34 | 35 | |
35 | 36 | struct lib3270_action_callback |
36 | 37 | { |
... | ... | @@ -40,33 +41,6 @@ struct lib3270_action_callback |
40 | 41 | |
41 | 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 | 44 | const LIB3270_ACTION * lib3270_action_get_by_name(const char *name) |
71 | 45 | { |
72 | 46 | const LIB3270_ACTION * actions = lib3270_get_actions(); |
... | ... | @@ -81,7 +55,7 @@ const LIB3270_ACTION * lib3270_action_get_by_name(const char *name) |
81 | 55 | // Check only alphabetic and numeric (for compatibility) |
82 | 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 | 59 | return actions+f; |
86 | 60 | } |
87 | 61 | ... | ... |
src/core/properties/get.c
... | ... | @@ -32,6 +32,7 @@ |
32 | 32 | #include <string.h> |
33 | 33 | #include <lib3270.h> |
34 | 34 | #include <lib3270/properties.h> |
35 | + #include <utilc.h> | |
35 | 36 | |
36 | 37 | LIB3270_EXPORT const char * lib3270_property_get_description(const LIB3270_PROPERTY * property) { |
37 | 38 | |
... | ... | @@ -53,3 +54,40 @@ |
53 | 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 | 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 | 68 | |
69 | 69 | { |
70 | 70 | .name = "model_number", // Property name. |
71 | + .icon = "video-display", // Property Icon. | |
72 | + .label = N_("Terminal model"), // Property label. | |
71 | 73 | .description = N_( "The model number" ), // Property description. |
72 | 74 | .min = 2, // Minimum allowable value. |
73 | 75 | .max = 5, // Maximum allowable value. | ... | ... |
src/core/util.c
... | ... | @@ -807,3 +807,31 @@ char * lib3270_unescape(const char *text) |
807 | 807 | |
808 | 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
src/include/lib3270/actions.h
... | ... | @@ -68,8 +68,6 @@ |
68 | 68 | int (*activatable)(const H3270 *hSession); ///< @brief Is the action activatable? |
69 | 69 | |
70 | 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 | 72 | } LIB3270_ACTION; |
75 | 73 | ... | ... |
src/include/lib3270/properties.h
... | ... | @@ -107,6 +107,13 @@ |
107 | 107 | */ |
108 | 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 | 119 | * @brief Get lib3270 integer property by name. | ... | ... |
src/include/lib3270/toggle.h
... | ... | @@ -98,8 +98,6 @@ |
98 | 98 | LIB3270_TOGGLE_ID id; ///< @brief Toggle ID. |
99 | 99 | const char def; ///< @brief Default value. |
100 | 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 | 102 | } LIB3270_TOGGLE; |
105 | 103 | ... | ... |
src/include/utilc.h
... | ... | @@ -69,3 +69,15 @@ LIB3270_INTERNAL void rpf_free(rpf_t *r); |
69 | 69 | * |
70 | 70 | */ |
71 | 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 | 10 | #include <lib3270/trace.h> |
11 | 11 | #include <lib3270/toggle.h> |
12 | 12 | #include <lib3270/log.h> |
13 | +#include <lib3270/properties.h> | |
13 | 14 | |
14 | 15 | #define MAX_ARGS 10 |
15 | 16 | |
... | ... | @@ -152,6 +153,7 @@ int main(int argc, char *argv[]) |
152 | 153 | |
153 | 154 | lib3270_disconnect(h); |
154 | 155 | |
156 | + /* | |
155 | 157 | { |
156 | 158 | lib3270_set_lunames(h,"a,b,c,d,e"); |
157 | 159 | |
... | ... | @@ -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 | 178 | lib3270_session_free(h); |
169 | 179 | ... | ... |