/* * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 */ #include "e.h" static void _e_help(void); /* externally accessible functions */ int main(int argc, char **argv) { int i = 0; int valid_args = 0; Eet_File *ef = NULL; char buf[4096]; int write_ops = 0; int size; char *str, *v; char *lang = NULL; int del_name = 0; int del_generic = 0; int del_comment = 0; int del_exe = 0; int del_win_name = 0; int del_win_class = 0; int del_win_title = 0; int del_win_role = 0; int del_icon_class = 0; int del_startup_notify = 0; int del_wait_exit = 0; char *file = NULL; char *set_name = NULL; char *set_generic = NULL; char *set_comment = NULL; char *set_exe = NULL; char *set_win_name = NULL; char *set_win_class = NULL; char *set_win_title = NULL; char *set_win_role = NULL; char *set_icon_class = NULL; int set_startup_notify = -1; int set_wait_exit = -1; int get_name = 0; int get_generic = 0; int get_comment = 0; int get_exe = 0; int get_win_name = 0; int get_win_class = 0; int get_win_title = 0; int get_win_role = 0; int get_icon_class = 0; int get_startup_notify = 0; int get_wait_exit = 0; /* handle some command-line parameters */ for (i = 1; i < argc; i++) { if ((!strcmp(argv[i], "-lang")) && (i < (argc - 1))) { i++; lang = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-name")) && (i < (argc - 1))) { i++; set_name = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-generic")) && (i < (argc - 1))) { i++; set_generic = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-comment")) && (i < (argc - 1))) { i++; set_comment = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-exe")) && (i < (argc - 1))) { i++; set_exe = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-win-name")) && (i < (argc - 1))) { i++; set_win_name = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-win-class")) && (i < (argc - 1))) { i++; set_win_class = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-win-title")) && (i < (argc - 1))) { i++; set_win_title = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-win-role")) && (i < (argc - 1))) { i++; set_win_role = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-icon-class")) && (i < (argc - 1))) { i++; set_icon_class = argv[i]; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-startup-notify")) && (i < (argc - 1))) { i++; set_startup_notify = atoi(argv[i]); valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-set-wait-exit")) && (i < (argc - 1))) { i++; set_wait_exit = atoi(argv[i]); valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-all"))) { del_name = 1; del_generic = 1; del_comment = 1; del_exe = 1; del_win_name = 1; del_win_class = 1; del_win_title = 1; del_win_role = 1; del_icon_class = 1; del_startup_notify = 1; del_wait_exit = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-name"))) { del_name = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-generic"))) { del_generic = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-comment"))) { del_comment = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-exe"))) { del_exe = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-win-name"))) { del_win_name = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-win-class"))) { del_win_class = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-win-title"))) { del_win_title = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-win-role"))) { del_win_role = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-icon-class"))) { del_icon_class = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-startup-notify"))) { del_startup_notify = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-del-wait-exit"))) { del_wait_exit = 1; valid_args++; write_ops++; } else if ((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "-help")) || (!strcmp(argv[i], "--h")) || (!strcmp(argv[i], "--help"))) { _e_help(); exit(0); } else if ((!strcmp(argv[i], "-get-name"))) { get_name = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-generic"))) { get_generic = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-comment"))) { get_comment = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-exe"))) { get_exe = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-win-name"))) { get_win_name = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-win-class"))) { get_win_class = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-win-title"))) { get_win_title = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-win-role"))) { get_win_role = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-icon-class"))) { get_icon_class = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-startup-notify"))) { get_startup_notify = 1; valid_args++; } else if ((!strcmp(argv[i], "-get-wait-exit"))) { get_wait_exit = 1; valid_args++; } else file = argv[i]; } if (!file) { printf("ERROR: no file specified!\n"); _e_help(); exit(0); } if (valid_args == 0) { printf("ERROR: no valid arguments!\n"); _e_help(); exit(0); } eet_init(); if (write_ops != 0) { ef = eet_open(file, EET_FILE_MODE_READ_WRITE); } else { ef = eet_open(file, EET_FILE_MODE_READ); } if (!ef) { printf("ERROR: cannot open file %s for READ/WRITE\n", file); return -1; } if (set_name) { if (lang) snprintf(buf, sizeof(buf), "app/info/name[%s]", lang); else snprintf(buf, sizeof(buf), "app/info/name"); eet_write(ef, buf, set_name, strlen(set_name), 0); } if (set_generic) { if (lang) snprintf(buf, sizeof(buf), "app/info/generic[%s]", lang); else snprintf(buf, sizeof(buf), "app/info/generic"); eet_write(ef, buf, set_generic, strlen(set_generic), 0); } if (set_comment) { if (lang) snprintf(buf, sizeof(buf), "app/info/comment[%s]", lang); else snprintf(buf, sizeof(buf), "app/info/comment"); eet_write(ef, buf, set_comment, strlen(set_comment), 0); } if (set_exe) eet_write(ef, "app/info/exe", set_exe, strlen(set_exe), 0); if (set_win_name) eet_write(ef, "app/window/name", set_win_name, strlen(set_win_name), 0); if (set_win_class) eet_write(ef, "app/window/class", set_win_class, strlen(set_win_class), 0); if (set_win_title) eet_write(ef, "app/window/title", set_win_title, strlen(set_win_title), 0); if (set_win_role) eet_write(ef, "app/window/role", set_win_role, strlen(set_win_role), 0); if (set_icon_class) eet_write(ef, "app/icon/class", set_icon_class, strlen(set_icon_class), 0); if (set_startup_notify >= 0) { unsigned char tmp[1]; tmp[0] = set_startup_notify; if (set_startup_notify) eet_write(ef, "app/info/startup_notify", tmp, 1, 0); else eet_write(ef, "app/info/startup_notify", tmp, 1, 0); } if (set_wait_exit >= 0) { unsigned char tmp[1]; tmp[0] = set_wait_exit; if (set_wait_exit) eet_write(ef, "app/info/wait_exit", tmp, 1, 0); else eet_write(ef, "app/info/wait_exit", tmp, 1, 0); } if (del_name) { char **matches = NULL; int match_num = 0; matches = eet_list(ef, "app/info/name*", &match_num); if (matches) { for (i = 0; i < match_num; i++) eet_delete(ef, matches[i]); free(matches); } } if (del_generic) { char **matches = NULL; int match_num = 0; matches = eet_list(ef, "app/info/generic*", &match_num); if (matches) { for (i = 0; i < match_num; i++) eet_delete(ef, matches[i]); free(matches); } } if (del_comment) { char **matches = NULL; int match_num = 0; matches = eet_list(ef, "app/info/comment*", &match_num); if (matches) { for (i = 0; i < match_num; i++) eet_delete(ef, matches[i]); free(matches); } } if (del_exe) eet_delete(ef, "app/info/exe"); if (del_win_name) eet_delete(ef, "app/window/name"); if (del_win_class) eet_delete(ef, "app/window/class"); if (del_win_title) eet_delete(ef, "app/window/title"); if (del_win_role) eet_delete(ef, "app/window/role"); if (del_icon_class) eet_delete(ef, "app/icon/class"); if (del_startup_notify) eet_delete(ef, "app/info/startup_notify"); if (del_wait_exit) eet_delete(ef, "app/info/wait_exit"); if (get_name) { if (lang) { snprintf(buf, sizeof(buf), "app/info/name[%s]", lang); v = eet_read(ef, buf, &size); if (!v) v = eet_read(ef, "app/info/name", &size); } else v = eet_read(ef, "app/info/name", &size); if (v) { str = malloc(size + 1); memcpy(str, v, size); str[size] = 0; free(v); printf("%s\n", str); } } if (get_generic) { if (lang) { snprintf(buf, sizeof(buf), "app/info/generic[%s]", lang); v = eet_read(ef, buf, &size); if (!v) v = eet_read(ef, "app/info/generic", &size); } else v = eet_read(ef, "app/info/generic", &size); if (v) { str = malloc(size + 1); memcpy(str, v, size); str[size] = 0; free(v); printf("%s\n", str); } } if (get_comment) { if (lang) { snprintf(buf, sizeof(buf), "app/info/comment[%s]", lang); v = eet_read(ef, buf, &size); if (!v) v = eet_read(ef, "app/info/comment", &size); } else v = eet_read(ef, "app/info/comment", &size); if (v) { str = malloc(size + 1); memcpy(str, v, size); str[size] = 0; free(v); printf("%s\n", str); } } if (get_exe) { v = eet_read(ef, "app/info/exe", &size); if (v) { str = malloc(size + 1); memcpy(str, v, size); str[size] = 0; free(v); printf("%s\n", str); } } if (get_win_name) { v = eet_read(ef, "app/window/name", &size); if (v) { str = malloc(size + 1); memcpy(str, v, size); str[size] = 0; free(v); printf("%s\n", str); } } if (get_win_class) { v = eet_read(ef, "app/window/class", &size); if (v) { str = malloc(size + 1); memcpy(str, v, size); str[size] = 0; free(v); printf("%s\n", str); } } if (get_win_title) { v = eet_read(ef, "app/window/title", &size); if (v) { str = malloc(size + 1); memcpy(str, v, size); str[size] = 0; free(v); printf("%s\n", str); } } if (get_win_role) { v = eet_read(ef, "app/window/role", &size); if (v) { str = malloc(size + 1); memcpy(str, v, size); str[size] = 0; free(v); printf("%s\n", str); } } if (get_icon_class) { v = eet_read(ef, "app/icon/class", &size); if (v) { str = malloc(size + 1); memcpy(str, v, size); str[size] = 0; free(v); printf("%s\n", str); } } if (get_startup_notify) { v = eet_read(ef, "app/info/startup_notify", &size); if (v) { if ((int) *v == 1) { printf("1\n"); } else { printf("0\n"); } free(v); } else { printf("Not set\n"); } } if (get_wait_exit) { v = eet_read(ef, "app/info/wait_exit", &size); if (v) { if ((int) *v == 1) { printf("1\n"); } else { printf("0\n"); } free(v); } else { printf("Not set\n"); } } eet_close(ef); eet_shutdown(); /* just return 0 to keep the compiler quiet */ return 0; } static void _e_help(void) { printf("OPTIONS:\n" " -lang LANG Set the language properties to modify\n" " -set-name NAME Set the application name\n" " -set-generic GENERIC Set the application generic name\n" " -set-comment COMMENT Set the application comment\n" " -set-exe EXE Set the application execute line\n" " -set-win-name WIN_NAME Set the application window name glob\n" " -set-win-class WIN_CLASS Set the application window class glob\n" " -set-win-title WIN_TITLE Set the application window title glob\n" " -set-win-role WIN_ROLE Set the application window role glob\n" " -set-icon-class CLASS_NAME Set the application icon class for themes\n" " -set-startup-notify [1/0] Set the application startup notify flag\n" " -set-wait-exit [1/0] Set the application wait exit flag\n" " -get-name Get the application name\n" " -get-generic Get the application generic name\n" " -get-comment Get the application comment\n" " -get-exe Get the application execute line\n" " -get-win-name Get the application window name glob\n" " -get-win-class Get the application window class glob\n" " -get-win-title Get the application window title glob\n" " -get-win-role Get the application window role glob\n" " -get-icon-class Get the application icon class for themes\n" " -get-startup-notify Get the application startup notify flag\n" " -get-wait-exit Get the application wait exit flag\n" " -del-name Delete the application name\n" " -del-generic Delete the application generic name\n" " -del-comment Delete the application comment\n" " -del-exe Delete the application execute line\n" " -del-win-name Delete the application window name\n" " -del-win-class Delete the application window class\n" " -del-win-title Delete the application window title glob\n" " -del-win-role Delete the application window role glob\n" " -del-icon-class Delete the application icon class for themes\n" " -del-startup-notify Delete the application startup notify flag\n" " -del-wait-exit Delete the application wait exit flag\n" ); }