update for beta release
[platform/core/uifw/e17.git] / src / bin / e_imc_main.c
1 #include "e.h"
2
3 static void _e_help(void);
4
5 /* externally accessible functions */
6
7 int
8 main(int argc, char **argv)
9 {
10    int i = 0;
11    int valid_args = 0;
12    int write_ops = 0;
13    Eet_File *ef = NULL;
14    E_Input_Method_Config *write_imc = NULL;
15    E_Input_Method_Config *read_imc = NULL;
16    
17    char *file = NULL;
18    char *set_name = NULL;
19    char *set_exe = NULL;
20    char *set_setup = NULL;
21    char *set_gtk_im_module = NULL;
22    char *set_qt_im_module = NULL;
23    char *set_xmodifiers = NULL;
24    char *set_ecore_imf_module = NULL;
25    int list = 0;
26
27    /* handle some command-line parameters */
28    for (i = 1; i < argc; i++)
29      {
30         if ((!strcmp(argv[i], "-set-name")) && (i < (argc - 1)))
31           {
32              i++;
33              set_name = argv[i];
34              valid_args++;
35              write_ops++;
36           }
37         else if ((!strcmp(argv[i], "-set-exe")) && (i < (argc - 1)))
38           {
39              i++;
40              set_exe = argv[i];
41              valid_args++;
42              write_ops++;
43           }
44         else if ((!strcmp(argv[i], "-set-setup")) && (i < (argc - 1)))
45           {
46              i++;
47              set_setup = argv[i];
48              valid_args++;
49              write_ops++;
50           }
51         else if ((!strcmp(argv[i], "-set-gtk-im-module")) && (i < (argc - 1)))
52           {
53              i++;
54              set_gtk_im_module = argv[i];
55              valid_args++;
56              write_ops++;
57           }
58         else if ((!strcmp(argv[i], "-set-qt-im-module")) && (i < (argc - 1)))
59           {
60              i++;
61              set_qt_im_module = argv[i];
62              valid_args++;
63              write_ops++;
64           }
65         else if ((!strcmp(argv[i], "-set-xmodifiers")) && (i < (argc - 1)))
66           {
67              i++;
68              set_xmodifiers = argv[i];
69              valid_args++;
70              write_ops++;
71           }
72         else if ((!strcmp(argv[i], "-set-ecore-imf-module")) && (i < (argc - 1)))
73           {
74              i++;
75              set_ecore_imf_module = argv[i];
76              valid_args++;
77              write_ops++;
78           }
79         else if ((!strcmp(argv[i], "-h")) ||
80                  (!strcmp(argv[i], "-help")) ||
81                  (!strcmp(argv[i], "--h")) ||
82                  (!strcmp(argv[i], "--help")))
83           {
84              _e_help();
85              exit(0);
86           }
87         else if ((!strcmp(argv[i], "-list")))
88           {
89              list = 1;
90              valid_args++;
91           }
92         else
93           file = argv[i];
94      }
95    if (!file)
96      {
97         printf("ERROR: no file specified!\n");
98         _e_help();
99         exit(0);
100      }
101
102     if (valid_args == 0) {
103         printf("ERROR: no valid arguments!\n");
104         _e_help();
105         exit(0);
106     }
107
108    eet_init();
109    e_intl_data_init();
110    
111    if (write_ops != 0 && ecore_file_exists(file))
112      {
113         ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
114      }
115    else if (write_ops != 0)
116      {
117         ef = eet_open(file, EET_FILE_MODE_WRITE);
118      }
119    else
120      {
121         ef = eet_open(file, EET_FILE_MODE_READ);
122      }
123    
124    if (!ef)
125      {
126         printf("ERROR: cannot open file %s for READ/WRITE (%i:%s)\n", 
127                file, errno, strerror(errno));
128         return -1;
129      }
130
131    /* If File Exists, Try to read imc */
132    read_imc = e_intl_input_method_config_read(ef);
133    
134    /* else create new imc */
135    if (write_ops != 0)
136      {
137         write_imc = calloc(sizeof(E_Input_Method_Config), 1);
138         write_imc->version = E_INTL_INPUT_METHOD_CONFIG_VERSION;
139         if (read_imc)
140           {
141              write_imc->e_im_name = read_imc->e_im_name;
142              write_imc->gtk_im_module = read_imc->gtk_im_module;
143              write_imc->qt_im_module = read_imc->qt_im_module;
144              write_imc->xmodifiers = read_imc->xmodifiers;
145              write_imc->ecore_imf_module = read_imc->ecore_imf_module;
146              write_imc->e_im_exec = read_imc->e_im_exec;
147              write_imc->e_im_setup_exec = read_imc->e_im_setup_exec;
148           }
149              
150         if (set_name)   
151           write_imc->e_im_name = set_name;     
152         if (set_gtk_im_module)     
153           write_imc->gtk_im_module = set_gtk_im_module;     
154         if (set_qt_im_module)     
155           write_imc->qt_im_module = set_qt_im_module;
156         if (set_xmodifiers)     
157           write_imc->xmodifiers = set_xmodifiers;
158         if (set_ecore_imf_module)     
159           write_imc->ecore_imf_module = set_ecore_imf_module;
160         if (set_exe)
161           write_imc->e_im_exec = set_exe;
162         if (set_setup)
163           write_imc->e_im_setup_exec = set_setup;
164
165         
166         /* write imc to file */
167         e_intl_input_method_config_write(ef, write_imc);
168      }
169
170
171    if (list)
172      {
173         printf("Config File List:\n");
174         printf("Config Version:    %i\n", read_imc->version);
175         printf("Config Name:       %s\n", read_imc->e_im_name);
176         printf("Command Line:      %s\n", read_imc->e_im_exec);
177         printf("Setup Line:        %s\n", read_imc->e_im_setup_exec);
178         printf("gtk_im_module:     %s\n", read_imc->gtk_im_module);
179         printf("qt_im_module:      %s\n", read_imc->qt_im_module);
180         printf("xmodifiers:        %s\n", read_imc->xmodifiers);
181         printf("ecore_imf_module:  %s\n", read_imc->ecore_imf_module);
182      }
183    
184    e_intl_input_method_config_free(read_imc);
185    E_FREE(write_imc); 
186    eet_close(ef);
187    e_intl_data_shutdown();
188    eet_shutdown();
189    /* just return 0 to keep the compiler quiet */
190    return 0;
191 }
192
193 static void
194 _e_help(void)
195 {
196    printf("OPTIONS:\n"
197           "  -set-name NAME             Set the application name\n"
198           "  -set-exe EXE               Set the application execute line\n"
199           "  -set-setup EXE             Set the setup application execute line\n"
200           "  -set-gtk-im-module         Set the gtk_im_module env var\n"
201           "  -set-qt-im-module          Set the qt_im_module env var\n"
202           "  -set-ecore-imf-module      Set the ecore_imf_module env var\n"
203           "  -set-xmodifiers            Set the xmodifiers env var\n"
204           "  -list                      List Contents of Input Method Config file\n"
205           );
206 }