Config: fill the paths to the resource directories from command line.

Add support multi paths for resource directories as arguments
from command line.

Now support next parameterized arguments:
--id path/ - image directory path,
--sd path/ - sound directory path,
--fd path/ - font directory path,
--dd path/ - data directory path,
--to - open template dialog.

For example:
enventor  --id path_1/ --id path_2/ --sd path_3/ --fd path_n/
This commit is contained in:
Mykyta Biliavskyi 2015-05-12 10:51:52 +00:00 committed by ChunEon Park
parent 118e86e0dd
commit dee12936e3
3 changed files with 125 additions and 74 deletions

View File

@ -266,20 +266,42 @@ config_edc_path_set(const char *edc_path)
}
void
config_init(const char *edc_path, const char *edc_img_path,
const char *edc_snd_path, const char *edc_fnt_path,
const char *edc_dat_path)
config_init(const char *edc_path, Eina_List *edc_img_path,
Eina_List *edc_snd_path, Eina_List *edc_fnt_path,
Eina_List *edc_dat_path)
{
Eina_Stringshare *s;
eddc_init();
config_data *cd = config_load();
g_cd = cd;
if (edc_path[0]) config_edc_path_set(edc_path);
if (edc_img_path[0]) config_edc_img_path_set(edc_img_path);
if (edc_snd_path[0]) config_edc_snd_path_set(edc_snd_path);
if (edc_fnt_path[0]) config_edc_fnt_path_set(edc_fnt_path);
if (edc_dat_path[0]) config_edc_dat_path_set(edc_dat_path);
if (edc_img_path)
{
EINA_LIST_FREE(cd->edc_img_path_list, s) eina_stringshare_del(s);
g_cd->edc_img_path_list = edc_img_path;
}
if (edc_snd_path)
{
EINA_LIST_FREE(cd->edc_snd_path_list, s) eina_stringshare_del(s);
g_cd->edc_snd_path_list = edc_snd_path;
}
if (edc_fnt_path)
{
EINA_LIST_FREE(cd->edc_fnt_path_list, s) eina_stringshare_del(s);
g_cd->edc_fnt_path_list = edc_fnt_path;
}
if (edc_dat_path)
{
EINA_LIST_FREE(cd->edc_dat_path_list, s) eina_stringshare_del(s);
g_cd->edc_dat_path_list = edc_dat_path;
}
}
void

View File

@ -2,6 +2,7 @@
#include "config.h"
#endif
#include <Ecore_Getopt.h>
#include <Eio.h>
#include "common.h"
@ -284,39 +285,61 @@ tools_set(Evas_Object *enventor)
}
static Eina_Bool
args_dispatch(int argc, char **argv, char *edc_path, char *img_path,
char *snd_path, char *fnt_path, char *dat_path,
args_dispatch(int argc, char **argv, char *edc_path, Eina_List **img_path,
Eina_List **snd_path, Eina_List **fnt_path, Eina_List **dat_path,
Eina_Bool *template_new)
{
Eina_List *id = NULL;
Eina_List *fd = NULL;
Eina_List *sd = NULL;
Eina_List *dd = NULL;
Eina_Bool quit = EINA_FALSE;
Eina_Bool help = EINA_FALSE;
Eina_Bool default_edc = EINA_TRUE;
*template_new = EINA_FALSE;
//No arguments. set defaults
if (argc == 1) goto defaults;
//Help
if ((argc >=2 ) && !strcmp(argv[1], "--help"))
{
fprintf(stdout, "Usage: enventor [input file] [-to] [-id image path]"
"[-sd sound path] [-fd font path] [-dd data path]\n"
"\n"
"-input file = EDC file to open. If input file is skipped, "
"Enventor will open a default template code with a temporary "
"file.\n"
"-to = Open template menu when you launch Enventor\n"
"-id = image resources, that edc includes, path\n"
"-sd = sound resources, that edc includes, path\n"
"-fd = font resources, that edc includes, path\n"
"-dd = data resources, that edc includes, path\n"
"\n"
"Examples of Enventor command line usage:\n"
"$ enventor\n"
"$ enventor -to\n"
"$ enventor newfile.edc -to\n"
"$ enventor sample.edc -id ./images -sd ./sounds\n"
"\n");
exit(0);
}
static const Ecore_Getopt optdesc = {
"enventor",
NULL,
NULL,
NULL,
NULL,
NULL,
EINA_TRUE,
{
ECORE_GETOPT_STORE_TRUE('t', "to", "Open template menu"),
ECORE_GETOPT_APPEND_METAVAR('i', "id", "Images path",
"path", ECORE_GETOPT_TYPE_STR),
ECORE_GETOPT_APPEND_METAVAR('s', "sd", "Sounds path",
"path", ECORE_GETOPT_TYPE_STR),
ECORE_GETOPT_APPEND_METAVAR('f', "fd", "Fonts path",
"path", ECORE_GETOPT_TYPE_STR),
ECORE_GETOPT_APPEND_METAVAR('d', "dd", "Data path",
"path", ECORE_GETOPT_TYPE_STR),
ECORE_GETOPT_VERSION('v', "version"),
ECORE_GETOPT_COPYRIGHT('c', "copyright"),
ECORE_GETOPT_LICENSE('l', "license"),
ECORE_GETOPT_HELP('h', "help"),
ECORE_GETOPT_SENTINEL
}
};
Ecore_Getopt_Value values[] = {
ECORE_GETOPT_VALUE_BOOL(*template_new),
ECORE_GETOPT_VALUE_LIST(id),
ECORE_GETOPT_VALUE_LIST(sd),
ECORE_GETOPT_VALUE_LIST(fd),
ECORE_GETOPT_VALUE_LIST(dd),
ECORE_GETOPT_VALUE_BOOL(quit),
ECORE_GETOPT_VALUE_BOOL(quit),
ECORE_GETOPT_VALUE_BOOL(quit),
ECORE_GETOPT_VALUE_BOOL(help),
ECORE_GETOPT_VALUE_NONE
};
//edc path
if ((argc >= 2) && strstr(argv[1], ".edc"))
@ -324,42 +347,15 @@ args_dispatch(int argc, char **argv, char *edc_path, char *img_path,
sprintf(edc_path, "%s", argv[1]);
default_edc = EINA_FALSE;
}
else if ((argc >= 2) && !strcmp("-to", argv[1]))
{
*template_new = EINA_TRUE;
}
else goto defaults;
int cur_arg = 2;
while (cur_arg < argc)
if ((ecore_getopt_parse(&optdesc, values, argc, argv) < 0) || quit)
exit(0);
if (help)
{
if (!strcmp("-to", argv[cur_arg]))
{
*template_new = EINA_TRUE;
cur_arg++;
}
else if (!strcmp("-id", argv[cur_arg]))
{
sprintf(img_path, "%s", argv[cur_arg + 1]);
cur_arg += 2;
}
else if (!strcmp("-sd", argv[cur_arg]))
{
sprintf(snd_path, "%s", argv[cur_arg + 1]);
cur_arg += 2;
}
else if (!strcmp("-fd", argv[cur_arg]))
{
sprintf(fnt_path, "%s", argv[cur_arg + 1]);
cur_arg += 2;
}
else if (!strcmp("-dd", argv[cur_arg]))
{
sprintf(dat_path, "%s", argv[cur_arg + 1]);
cur_arg += 2;
}
++cur_arg;
fprintf(stderr, "enventor [input file] [--to] "
"[--id image path] [--sd sound path] "
"[--fd font path] [--dd data path]\n");
exit(0);
}
defaults:
@ -370,6 +366,39 @@ defaults:
sprintf(edc_path, "%s", (const char *)tmp_path);
eina_tmpstr_del(tmp_path);
}
else
{
char *s = NULL;
EINA_LIST_FREE(id, s)
{
*img_path = eina_list_append(*img_path, eina_stringshare_add(s));
free(s);
}
id = NULL;
EINA_LIST_FREE(sd, s)
{
*snd_path = eina_list_append(*snd_path, eina_stringshare_add(s));
free(s);
}
sd = NULL;
EINA_LIST_FREE(fd, s)
{
*fnt_path = eina_list_append(*fnt_path, eina_stringshare_add(s));
free(s);
}
fd = NULL;
EINA_LIST_FREE(dd, s)
{
*dat_path = eina_list_append(*dat_path, eina_stringshare_add(s));
free(s);
}
}
ecore_getopt_list_free(id);
ecore_getopt_list_free(fd);
ecore_getopt_list_free(sd);
ecore_getopt_list_free(dd);
return default_edc;
}
@ -377,14 +406,14 @@ static Eina_Bool
config_data_set(app_data *ad, int argc, char **argv)
{
char edc_path[PATH_MAX] = { 0, };
char img_path[PATH_MAX] = { 0, };
char snd_path[PATH_MAX] = { 0, };
char fnt_path[PATH_MAX] = { 0, };
char dat_path[PATH_MAX] = { 0, };
Eina_List *img_path = NULL;
Eina_List *snd_path = NULL;
Eina_List *fnt_path = NULL;
Eina_List *dat_path = NULL;
Eina_Bool template_new = EINA_FALSE;
Eina_Bool default_edc = args_dispatch(argc, argv, edc_path, img_path,
snd_path, fnt_path, dat_path,
Eina_Bool default_edc = args_dispatch(argc, argv, edc_path, &img_path,
&snd_path, &fnt_path, &dat_path,
&template_new);
config_init(edc_path, img_path, snd_path, fnt_path, dat_path);
config_update_cb_set(config_update_cb, ad);

View File

@ -3,7 +3,7 @@
#define MAX_VIEW_SCALE 5.0
#define MIN_VIEW_SCALE 0.5
void config_init(const char *edc_path, const char *edc_img_path, const char *edc_snd_path, const char *edc_fnt_path, const char *edc_dat_path);
void config_init(const char *edc_path, Eina_List *edc_img_path, Eina_List *edc_snd_path, Eina_List *edc_fnt_path, Eina_List *edc_dat_path);
void config_term(void);
const char *config_edc_path_get(void);
const char *config_edj_path_get(void);