Enlightenment CVS committal Author : handyande Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_config Modified Files: Ecore_Config.h ecore_config_extra.c Log Message: Beginning of ecore_config_arg support for arguments with no direct property relationship see engage for demo usage =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_config/Ecore_Config.h,v retrieving revision 1.39 retrieving revision 1.40 diff -u -3 -r1.39 -r1.40 --- Ecore_Config.h 27 Nov 2004 23:14:23 -0000 1.39 +++ Ecore_Config.h 1 Dec 2004 00:49:18 -0000 1.40 @@ -249,6 +249,14 @@ EAPI char *ecore_config_theme_with_path_get(const char *key); EAPI void ecore_config_args_display(void); EAPI int ecore_config_args_parse(void); + EAPI void ecore_config_args_callback_str_add(char short_opt, + char *long_opt, char *desc, + void (*func)(char *val, void *data), + void *data); + EAPI void ecore_config_args_callback_noarg_add(char short_opt, + char *long_opt, char *desc, + void (*func)(char *val, void *data), + void *data); EAPI void ecore_config_app_describe(char *description); EAPI int ecore_config_create(const char *key, void *val, =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_config/ecore_config_extra.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ecore_config_extra.c 27 Nov 2004 23:14:28 -0000 1.2 +++ ecore_config_extra.c 1 Dec 2004 00:49:18 -0000 1.3 @@ -10,7 +10,20 @@ #include <sys/types.h> #include <sys/stat.h> +typedef struct __Ecore_Config_Arg_Callback _Ecore_Config_Arg_Callback; +struct __Ecore_Config_Arg_Callback +{ + char short_opt; + char *long_opt; + char *description; + void *data; + void (*func)(char *val, void *data); + Ecore_Config_Type type; + _Ecore_Config_Arg_Callback *next; +}; + char *__ecore_config_app_description; +_Ecore_Config_Arg_Callback *_ecore_config_arg_callbacks; extern int ecore_config_bound(Ecore_Config_Prop * e); extern char *ecore_config_rgb_to_argb(char *rgb); @@ -524,7 +537,7 @@ } static char *_ecore_config_short_types[] = - { "<nil> ", "<int> ", "<flt> ", "<str> ", "<rgb> ", "<str> ", "<bool>" }; + { " ", "<int> ", "<flt> ", "<str> ", "<rgb> ", "<str> ", "<bool>" }; /** * Prints the property list of the local configuration bundle to output. @@ -533,6 +546,7 @@ ecore_config_args_display(void) { Ecore_Config_Prop *props; + _Ecore_Config_Arg_Callback *callbacks; if (__ecore_config_app_description) printf("%s\n\n", __ecore_config_app_description); @@ -554,11 +568,24 @@ props->short_opt ? ',' : ' ', props->long_opt ? props->long_opt : props->key, _ecore_config_short_types[props->type], - props->description ? props-> - description : "(no description available)"); + props->description ? props->description : + "(no description available)"); props = props->next; } + callbacks = _ecore_config_arg_callbacks; + while (callbacks) + { + printf(" %c%c%c --%s\t%s %s\n", callbacks->short_opt ? '-' : ' ', + callbacks->short_opt ? callbacks->short_opt : ' ', + callbacks->short_opt ? ',' : ' ', + callbacks->long_opt ? callbacks->long_opt : "", + _ecore_config_short_types[callbacks->type], + callbacks->description ? callbacks->description : + "(no description available)"); + + callbacks = callbacks->next; + } } static int @@ -581,6 +608,40 @@ return ECORE_CONFIG_PARSE_CONTINUE; } +static void +ecore_config_args_callback_add(char short_opt, char *long_opt, char *desc, + void (*func)(char *val, void *data), + void *data, Ecore_Config_Type type) { + _Ecore_Config_Arg_Callback *new_cb; + + new_cb = malloc(sizeof(_Ecore_Config_Arg_Callback)); + new_cb->short_opt = short_opt; + if (long_opt) + new_cb->long_opt = strdup(long_opt); + if (desc) + new_cb->description = strdup(desc); + new_cb->data = data; + new_cb->func = func; + new_cb->type = type; + + new_cb->next = _ecore_config_arg_callbacks; + _ecore_config_arg_callbacks = new_cb; +} + +void +ecore_config_args_callback_str_add(char short_opt, char *long_opt, char *desc, + void (*func)(char *val, void *data), + void *data) { + ecore_config_args_callback_add(short_opt, long_opt, desc, func, data, PT_STR); +} + +void +ecore_config_args_callback_noarg_add(char short_opt, char *long_opt, char *desc, + void (*func)(char *val, void *data), + void *data) { + ecore_config_args_callback_add(short_opt, long_opt, desc, func, data, PT_NIL); +} + /** * Parse the arguments set by @ref ecore_app_args_set and set properties * accordingly. @@ -599,6 +660,7 @@ char *arg; char *long_opt, short_opt; Ecore_Config_Prop *prop; + _Ecore_Config_Arg_Callback *callback; ecore_app_args_get(&argc, &argv); nextarg = 1; @@ -646,6 +708,33 @@ } if (!found) { + callback = _ecore_config_arg_callbacks; + while (callback) + { + if ((callback->long_opt && + !strcmp(long_opt, callback->long_opt))) + { + found = 1; + if (callback->type == PT_NIL) + { + callback->func(NULL, callback->data); + } + else + { + if (!argv[++nextarg]) + { + printf("Missing expected argument for option --%s\n", long_opt); + return ECORE_CONFIG_PARSE_EXIT; + } + callback->func(argv[nextarg], callback->data); + } + break; + } + callback = callback->next; + } + } + if (!found) + { printf("Unrecognised option \"%s\"\n", long_opt); printf("Try using -h or --help for more information.\n\n"); return ECORE_CONFIG_PARSE_EXIT; @@ -683,6 +772,32 @@ if (!found) { + callback = _ecore_config_arg_callbacks; + while (callback) + { + if (short_opt == callback->short_opt) + { + found = 1; + if (callback->type == PT_NIL) + { + callback->func(NULL, callback->data); + } + else + { + if (!argv[++nextarg]) + { + printf("Missing expected argument for option -%c\n", short_opt); + return ECORE_CONFIG_PARSE_EXIT; + } + callback->func(argv[nextarg], callback->data); + } + break; + } + callback = callback->next; + } + } + if (!found) + { printf("Unrecognised option '%c'\n", short_opt); printf ("Try using -h or --help for more information.\n\n"); ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://productguide.itmanagersjournal.com/ _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs