int input_init() { int status = CLI_RET_UNKNOWN; if (gl) { input_deinit(); } gl = new_GetLine(CLI_MAX_LINE_LEN, CLI_MAX_HIST_LEN); if (gl) { /* Try to set up a clean exit on these signals. If it fails, we'll * trudge along with a warning */ if (gl_trap_signal(gl, SIGINT, GLS_DONT_FORWARD, GLS_ABORT, EINTR) || gl_trap_signal(gl, SIGQUIT, GLS_DONT_FORWARD, GLS_ABORT, EINTR)) { fprintf(stderr, SIGHANLDER_FAILED); } tab_complete = new_WordCompletion(); if (tab_complete != NULL) { gl_customize_completion(gl, NULL, tab_completion); } else { /* Non-fatal - complain and carry on */ fprintf(stderr, "Failed to initialize tab-completion.\n"); } status = 0; } return status; }
int main(int argc, char *argv[]) { GSList *errors = NULL, *files = NULL; Filetree tree; int mode = 0, mode_parsed = FALSE, ret = 0; if (parse_global_args(&argc, &argv, entries, TRUE) || argc < 2 || help) { print_help(); exit(EXIT_FAILURE); } if (!strcmp(argv[1], "scan")) { mode = LOUDNESS_MODE_SCAN; mode_parsed = loudness_scan_parse(&argc, &argv); #ifdef USE_TAGLIB } else if (!strcmp(argv[1], "tag")) { mode = LOUDNESS_MODE_TAG; mode_parsed = loudness_tag_parse(&argc, &argv); #endif } else if (!strcmp(argv[1], "dump")) { mode = LOUDNESS_MODE_DUMP; mode_parsed = loudness_dump_parse(&argc, &argv); } else { fprintf(stderr, "Unknown mode '%s'\n", argv[1]); } if (!mode_parsed) { exit(EXIT_FAILURE); } if (decode_to_file && argc - 1 != 1) { fprintf(stderr, "Cannot decode more than one file\n"); exit(EXIT_FAILURE); } g_thread_init(NULL); input_init(argv[0], forced_plugin); scanner_init_common(); setlocale(LC_COLLATE, ""); setlocale(LC_CTYPE, ""); tree = filetree_init(&argv[1], (size_t) (argc - 1), recursive, follow_symlinks, no_sort, &errors); g_slist_foreach(errors, filetree_print_error, &verbose); g_slist_foreach(errors, filetree_free_error, NULL); g_slist_free(errors); filetree_file_list(tree, &files); filetree_remove_common_prefix(files); switch (mode) { case LOUDNESS_MODE_SCAN: loudness_scan(files); break; #ifdef USE_TAGLIB case LOUDNESS_MODE_TAG: ret = loudness_tag(files); break; #endif case LOUDNESS_MODE_DUMP: ret = loudness_dump(files); break; } g_slist_foreach(files, filetree_free_list_entry, NULL); g_slist_free(files); filetree_destroy(tree); input_deinit(); g_free(forced_plugin); return ret; }