Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
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
}
Esempio n. 7
0
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);

}