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 |