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