void update_table_file(char *name, int version) { if (!phonetic_char_dynamic_sequence) return; char fname_user[256]; char fname_version[256]; char fname_sys[256]; char version_name[256]; strcat(strcpy(version_name, name), ".version"); get_hime_user_fname(version_name, fname_version); get_hime_user_fname(name, fname_user); get_sys_table_file_name(name, fname_sys); FILE *fp; if ((fp=fopen(fname_version, "r"))) { int ver=0; fscanf(fp, "%d", &ver); fclose(fp); if (ver >= version) return; } char cmd[256]; sprintf(cmd, "mv -f %s %s.old && cp %s %s && echo %d > %s", fname_user, fname_user, fname_sys, fname_user, version, fname_version); dbg("exec %s\n", cmd); system(cmd); }
void get_gcin_user_or_sys_fname(char *name, char fname[]) { if (!getenv("GCIN_TABLE_DIR")) { if (get_gcin_user_fname(name, fname)) return; } get_sys_table_file_name(name, fname); }
void load_tsin_contrib() { char minus_priv[128]; #define PRIVATE_PHRASES "private-phrases" gen_bin(PRIVATE_PHRASES, private_file_src, minus_priv); #define CONTRIBUTED_PHRASES "contributed-phrases" char minus_contributed[128]; gen_bin(CONTRIBUTED_PHRASES, contributed_file_src, minus_contributed); #define DOWNLOADED_PHRASES "downloaded-phrases" char minus_downloaded[128]; gen_bin(DOWNLOADED_PHRASES, downloaded_file_src, minus_downloaded); char sys_tsfname[128], contrib_temp[128]; get_sys_table_file_name(tsin32_f, sys_tsfname); get_gcin_user_fname("contrib-temp", contrib_temp); #if UNIX unix_exec(GCIN_BIN_DIR"/tsd2a32 -b -minus %s -o %s%s%s%s", sys_tsfname, contrib_temp, minus_priv, minus_contributed, minus_downloaded); #else char *argv[32]; int argc=0; argv[argc++]="-b"; argv[argc++]="-o"; argv[argc++]=contrib_temp; argv[argc++]="-minus"; argv[argc++]=sys_tsfname; if (minus_priv[0]) { argv[argc++]="-minus"; argv[argc++]=PRIVATE_PHRASES; } if (minus_contributed[0]) { argv[argc++]="-minus"; argv[argc++]=CONTRIBUTED_PHRASES; } if (minus_downloaded[0]) { argv[argc++]="-minus"; argv[argc++]=DOWNLOADED_PHRASES; } win32exec_argv("tsd2a32.exe", argc, argv); #endif free_tsin(); load_tsin_db0(contrib_temp, FALSE); }
void load_pin_juyin() { text_pho_N = 6; char pinfname[128]; get_sys_table_file_name("pin-juyin.xlt", pinfname); dbg("pinyin kbm %s\n", pinfname); FILE *fr; if ((fr=fopen(pinfname,"rb"))==NULL) p_err("Cannot open %s", pinfname); fread(&pin_juyinN, sizeof(short), 1, fr); pin_juyin = tmalloc(PIN_JUYIN, pin_juyinN); fread(pin_juyin, sizeof(PIN_JUYIN), pin_juyinN, fr); fclose(fr); }
static int translate(char *fname, char *str, int strN, char **out) { char fullname[128]; if (!strN) { *out = strdup(str); return 0; } get_sys_table_file_name(fname, fullname); if ((fp=fopen(fullname, "rb"))==NULL) p_err("cannot open %s %s", fname, fullname); struct stat st; stat(fullname, &st); N = st.st_size / sizeof(T2S); char *p=str; char *endp = str + strN; int opN=0; char *op = NULL; while (p < endp) { op = (char *)realloc(op, opN+5); opN += k_lookup(p, &op[opN]); p+=utf8_sz(p); } fclose(fp); *out = op; op[opN]=0; return opN; }
void pho_load() { char *pho_tab; if (is_chs) { pho_tab = phonetic_huge_tab ? s_pho_huge_tab:s_pho_normal_tab; } else pho_tab = phonetic_huge_tab ? pho_huge_tab:pho_normal_tab; if (!getenv("GCIN_TABLE_DIR") && phonetic_char_dynamic_sequence) { get_gcin_user_fname(pho_tab, phofname); #if UNIX if (access(phofname, W_OK) < 0){ #else if (_access(phofname, 02) < 0){ #endif char sys_file[256], vv[256]; get_sys_table_file_name(sys_file, pho_tab); #if UNIX sprintf(vv,"cp %s %s\n", sys_file, phofname); system(vv); #else CopyFileA(sys_file, phofname, FALSE); #endif } } else { get_sys_table_file_name(pho_tab, phofname); dbg("use system's pho, no dynamic adj\n"); } update_table_file(pho_tab, 4); FILE *fr; if ((fr=fopen(phofname,"rb"))==NULL) p_err("err %s\n", phofname); fread(&idxnum_pho,sizeof(u_short),1,fr); fread(&idxnum_pho,sizeof(u_short),1,fr); fread(&ch_phoN,sizeof(int),1,fr); fread(&pho_phrase_area_sz, sizeof(pho_phrase_area_sz), 1,fr); if (idx_pho) free(idx_pho); idx_pho = tmalloc(PHO_IDX, idxnum_pho + 1); fread(idx_pho, sizeof(PHO_IDX), idxnum_pho, fr); ch_pho_ofs = ftell(fr); if (ch_pho) free(ch_pho); if (!(ch_pho=tmalloc(PHO_ITEM, ch_phoN))) p_err("malloc error"); fread(ch_pho,sizeof(PHO_ITEM), ch_phoN, fr); // dbg("ch_phoN:%d %d\n", ch_phoN, idxnum_pho); if (pho_phrase_area) { free(pho_phrase_area); pho_phrase_area = NULL; } if (pho_phrase_area_sz) { pho_phrase_area = tmalloc(char, pho_phrase_area_sz); fread(pho_phrase_area, 1,pho_phrase_area_sz, fr); #if 0 dbg("pho_phrase loaded %d\n", pho_phrase_area_sz); int i; for(i=0; i <pho_phrase_area_sz; i+=strlen(pho_phrase_area+i)+1) { dbg(" %s\n", pho_phrase_area+i); } #endif } fclose(fr); idx_pho[idxnum_pho].key=0xffff; idx_pho[idxnum_pho].start=ch_phoN; #if 0 int i; for(i=0; i <ch_phoN; i++) { char tt[5]; utf8cpy(tt, ch_pho[i].ch); dbg("oooo %s\n", tt); } #endif }
void load_gtab_list(gboolean skip_disabled) { char ttt[128]; FILE *fp; get_hime_user_fname(gtab_list, ttt); if ((fp=fopen(ttt, "rb"))==NULL) { get_sys_table_file_name(gtab_list, ttt); if ((fp=fopen(ttt, "rb"))==NULL) p_err("cannot open %s", ttt); } dbg("load_gtab_list %s\n", ttt); skip_utf8_sigature(fp); int i; for (i=0; i < inmdN; i++) { INMD *pinmd = &inmd[i]; free(pinmd->filename); pinmd->filename=NULL; free(pinmd->cname); pinmd->cname=NULL; free(pinmd->icon); pinmd->icon=NULL; } inmdN = 0; char *def_file = strrchr(default_input_method_str, ' '); if (def_file) def_file++; while (!feof(fp)) { char line[256]; char name_ar[32], *name=name_ar; char key[32]; char file[32]; char icon[128]; inmd = trealloc(inmd, INMD, inmdN); name[0]=0; key[0]=0; file[0]=0; icon[0]=0; line[0]=0; myfgets(line, sizeof(line), fp); if (strlen(line) < 2) continue; if (line[0]=='#') continue; if (skip_disabled && line[0]=='!') continue; sscanf(line, "%s %s %s %s", name, key, file, icon); // dbg("%s %c\n", line, key[0]); if (strlen(name) < 1) break; int inmd_idx; INMD *pinmd = &inmd[inmd_idx = inmdN++]; bzero(pinmd, sizeof(INMD)); pinmd->key_ch = key[0]; pinmd->in_cycle = strchr(hime_str_im_cycle, key[0]) != NULL; // dbg("%d %d '%c'\n",inmdN, pinmd->in_cycle, pinmd->key_ch); if (!strcmp(file, "!ANTHY")) { strcpy(file, "anthy-module.so"); } if (!strcmp(file, "!INT_CODE")) { strcpy(file, "intcode-module.so"); } pinmd->filename = strdup(file); if (strstr(file, ".so") || strstr(file, ".dll")) { pinmd->method_type = method_type_MODULE; dbg("%s is module file\n", file); } else { int i; for(i=0; method_codes[i].id; i++) if (!strcmp(file, method_codes[i].id)) break; if (method_codes[i].id) pinmd->method_type = method_codes[i].method_type; } if (name[0]=='!') { name++; pinmd->disabled = TRUE; } if (default_input_method_str[0]==key[0] && !pinmd->disabled && (!def_file || !strcmp(file, def_file))) { default_input_method = inmd_idx; dbg("default_input_method %s %s %s %d\n", name, default_input_method_str, key, default_input_method); } pinmd->cname = strdup(name); if (strlen(icon)) pinmd->icon = strdup(icon); } fclose(fp); }