diff options
author | b0ric <b0risov.alexandr@rambler.ru> | 2009-08-18 20:45:05 +0300 |
---|---|---|
committer | b0ric <b0risov.alexandr@rambler.ru> | 2009-08-18 20:45:05 +0300 |
commit | 7742a666d5ac98ea3a976336cf60a5530ab29e73 (patch) | |
tree | f985cda18f15f8a13feb5c10d17c5cc7a952f23a /src/main.c | |
parent | e5165d9838d03963284710e6b957fe9a3b0e267a (diff) |
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..8ffced8 --- /dev/null +++ b/src/main.c @@ -0,0 +1,182 @@ +/* + * This file is part of WordExtract. + * + * Copyright (C) 2009 Borisov Alexandr + * + * WordExtract is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * WordExtract is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with WordExtract. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <sys/stat.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "main.h" +#include "mainwin.h" +#include "dict.h" +#include "engparser.h" + +Language lang; +SaveOpt save_user_words = {2, 40}; +char optpath[PATH_LENGTH] = {0}; +char dictfile[PATH_LENGTH] = {0}; +char conffile[PATH_LENGTH] = {0}; + +static void fill_vars(); + +int main(int argc, char *argv[]) +{ + FILE *fdict; + + gtk_init(&argc, &argv); + fill_vars(); + dict = load_dict(); + lang = ENG; + create_main_window(); + gtk_widget_show(main_window); + gtk_main(); + + /*termination*/ + if (!(fdict = fopen(dictfile, "w"))) + perror(dictfile); + else { + save_dict(fdict, dict); + fclose(fdict); + } + if (dict_words.by_az) + free(dict_words.by_az); + if (user_words.by_az) + free(user_words.by_az); + if (dict) { + if (dict->lsibl) + free_words(dict->lsibl); + if (dict->rsibl) + free_words(dict->rsibl); + free(dict->word); + } + return 0; +} + +static void fill_vars() +{ + strcpy(optpath, getenv("HOME")); + strcat(optpath, OPT_FOLDER); + strcat(dictfile, optpath); + strcat(dictfile, DICT_FILE); + strcat(conffile, optpath); + strcat(conffile, CONF_FILE); + read_config(); +} + +void create_config(char *path) +{ + mode_t mode_0755 = S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH; + struct stat st; + FILE *conf; + char file[PATH_LENGTH] = {0}; + + if (stat(path, &st)) { + fprintf(stderr, "%s: Creating directory\n", path); + if (mkdir(path, mode_0755)) { + perror(path); + exit(1); + } + } + strcat(file, path); + strcat(file, CONF_FILE); + fprintf(stderr, "%s: Creating configuration file\n", file); + if (!(conf = fopen(file, "w"))) { + perror(file); + exit(1); + } + fclose(conf); +} + +void read_config() +{ + FILE *conf; + + if (!(conf = fopen(conffile, "r"))) { + perror(conffile); + create_config(optpath); + write_config(); + if (!(conf = fopen(dictfile, "r"))) { + perror(conffile); + exit(1); + } + } else { + char option[OPTION_LENGTH] = {0}; + char svalue[OPTION_LENGTH] = {0}; + while (fscanf(conf, "%s\t\t%s\n", option, svalue) != EOF) { + if (!strcmp(option, "columns")) { + save_user_words.columns = atoi(svalue); + } else if (!strcmp(option, "field")) { + save_user_words.col_width = atoi(svalue); + } else if (!strcmp(option, "language")) { + lang = atoi(svalue); + } else if (!strcmp(option, "exclude_with_capital")) { + excl_w_capital = atoi(svalue); + } else if (!strcmp(option, "lower_first_capital")) { + lower_first_capital = atoi(svalue); + } else if (!strcmp(option, "exclude_quoted")) { + quote.excl_symbolled = atoi(svalue); + } else if (!strcmp(option, "exclude_with_first_quote")) { + quote.excl_w_starting = atoi(svalue); + } else if (!strcmp(option, "exclude_with_middle_quote")) { + quote.excl_w_middle = atoi(svalue); + } else if (!strcmp(option, "exclude_part_after_quote")) { + quote.excl_word_after_symb = atoi(svalue); + } else if (!strcmp(option, "exclude_with_end_quote")) { + quote.excl_w_ending = atoi(svalue); + } else if (!strcmp(option, "exclude_hyphened")) { + hyphen.excl_symbolled = atoi(svalue); + } else if (!strcmp(option, "exclude_with_first_hyphen")) { + hyphen.excl_w_starting = atoi(svalue); + } else if (!strcmp(option, "exclude_with_middle_hyphen")) { + hyphen.excl_w_middle = atoi(svalue); + } else if (!strcmp(option, "exclude_part_after_hyphen")) { + hyphen.excl_word_after_symb = atoi(svalue); + } else if (!strcmp(option, "exclude_with_end_hyphen")) { + hyphen.excl_w_ending = atoi(svalue); + } + } + fclose(conf); + } +} + +void write_config() +{ + FILE *conf; + + if (!(conf = fopen(conffile, "w"))) + perror(conffile); + else { + fprintf(conf, "%s\t\t%d\n", "columns", save_user_words.columns); + fprintf(conf, "%s\t\t%d\n", "field", save_user_words.col_width); + fprintf(conf, "%s\t\t%d\n", "language", lang); + fprintf(conf, "%s\t\t%d\n", "exclude_with_capital", excl_w_capital); + fprintf(conf, "%s\t\t%d\n", "lower_first_capital", lower_first_capital); + fprintf(conf, "%s\t\t%d\n", "exclude_quoted", quote.excl_symbolled); + fprintf(conf, "%s\t\t%d\n", "exclude_with_first_quote", quote.excl_w_starting); + fprintf(conf, "%s\t\t%d\n", "exclude_with_middle_quote", quote.excl_w_middle); + fprintf(conf, "%s\t\t%d\n", "exclude_part_after_quote", quote.excl_word_after_symb); + fprintf(conf, "%s\t\t%d\n", "exclude_with_end_quote", quote.excl_w_ending); + fprintf(conf, "%s\t\t%d\n", "exclude_hyphened", hyphen.excl_symbolled); + fprintf(conf, "%s\t\t%d\n", "exclude_with_first_hyphen", hyphen.excl_w_starting); + fprintf(conf, "%s\t\t%d\n", "exclude_with_middle_hyphen", hyphen.excl_w_middle); + fprintf(conf, "%s\t\t%d\n", "exclude_part_after_hyphen", hyphen.excl_word_after_symb); + fprintf(conf, "%s\t\t%d\n", "exclude_with_end_hyphen", hyphen.excl_w_ending); + fclose(conf); + } +} + |