int main(int argc, char **argv) { FILE *fp; int i; u_char clen; usecount_t usecount; gboolean pr_usecount = TRUE; char *fname; char *fname_out = NULL; if (argc <= 1) { printf("%s: file name expected\n", argv[0]); exit(1); } for(i=1; i < argc;) { if (!strcmp(argv[i], "-nousecount")) { i++; pr_usecount = FALSE; } else if (!strcmp(argv[i], "-o")) { if (i==argc-1) p_err("-o need out file name"); fname_out = argv[i+1]; i+=2; } else fname = argv[i++]; } FILE *fp_out; if (!fname_out) { fp_out = stdout; } else { dbg("%s use %s\n", argv[0], fname_out); fp_out = fopen(fname_out, "w"); if (!fp_out) p_err("cannot create %s\n", fname_out); } if ((fp=fopen(fname,"rb"))==NULL) p_err("Cannot open %s", argv[1]); TSIN_GTAB_HEAD head; int phsz = 2; fread(&head, sizeof(head), 1, fp); if (!strcmp(head.signature, TSIN_GTAB_KEY)) { if (head.maxkey * head.keybits > 32) phsz = 8; else phsz = 4; } else rewind(fp); if (phsz > 2) { fprintf(stderr, "phsz %d keybits:%d\n", phsz, head.keybits); fprintf(stderr, "keymap '%s'\n", head.keymap); fprintf(fp_out,TSIN_GTAB_KEY" %d %d %s\n", head.keybits, head.maxkey, head.keymap+1); } while (!feof(fp)) { phokey_t phbuf[MAX_PHRASE_LEN]; u_int phbuf32[MAX_PHRASE_LEN]; u_int64_t phbuf64[MAX_PHRASE_LEN]; fread(&clen,1,1,fp); fread(&usecount, sizeof(usecount_t), 1,fp); if (!pr_usecount) usecount = 0; if (phsz==2) fread(phbuf, sizeof(phokey_t), clen, fp); else if (phsz==4) fread(phbuf32, 4, clen, fp); else if (phsz==8) fread(phbuf64, 8, clen, fp); for(i=0;i<clen;i++) { char ch[CH_SZ]; int n = fread(ch, 1, 1, fp); if (n<=0) goto stop; int len=utf8_sz(ch); fread(&ch[1], 1, len-1, fp); int j; for(j=0; j < len; j++) fprintf(fp_out, "%c", ch[j]); } fprintf(fp_out, " "); for(i=0;i<clen;i++) { if (phsz==2) prph2(fp_out, phbuf[i]); else { u_int64_t k; if (phsz==4) k = phbuf32[i]; else k = phbuf64[i]; char tkey[16]; get_keymap_str(k, head.keymap, head.keybits, tkey); fprintf(fp_out, "%s", tkey); } if (i!=clen-1) fprintf(fp_out, " "); } fprintf(fp_out, " %d\n", usecount); } stop: fclose(fp); fclose(fp_out); exit(0); }
int main(int argc, char **argv) { FILE *fp; int i; char clen; usecount_t usecount; gboolean pr_usecount = TRUE; char *fname; char *fname_out = NULL; gtk_init(&argc, &argv); if (argc <= 1) { printf("%s: file name expected\n", argv[0]); exit(1); } init_TableDir(); gboolean b_pinyin = is_pinyin_kbm(); for(i=1; i < argc;) { if (!strcmp(argv[i], "-nousecount")) { i++; pr_usecount = FALSE; b_pinyin = FALSE; } else if (!strcmp(argv[i], "-o")) { if (i==argc-1) p_err("-o need out file name"); fname_out = argv[i+1]; i+=2; } else fname = argv[i++]; } FILE *fp_out; if (!fname_out) { fp_out = stdout; } else { dbg("%s use %s\n", argv[0], fname_out); fp_out = fopen(fname_out, "w"); if (!fp_out) p_err("cannot create %s\n", fname_out); } if (b_pinyin) fprintf(fp_out, "!!pinyin\n"); if ((fp=fopen(fname,"rb"))==NULL) p_err("Cannot open %s %s", fname, sys_err_strA()); TSIN_GTAB_HEAD head; int phsz = 2; fread(&head, sizeof(head), 1, fp); if (!strcmp(head.signature, TSIN_GTAB_KEY)) { if (head.maxkey * head.keybits > 32) phsz = 8; else phsz = 4; } else rewind(fp); if (phsz > 2) { fprintf(stderr, "phsz %d keybits:%d\n", phsz, head.keybits); fprintf(stderr, "keymap '%s'\n", head.keymap); fprintf(fp_out,TSIN_GTAB_KEY" %d %d %s\n", head.keybits, head.maxkey, head.keymap+1); } while (!feof(fp)) { phokey_t phbuf[MAX_PHRASE_LEN]; u_int phbuf32[MAX_PHRASE_LEN]; u_int64_t phbuf64[MAX_PHRASE_LEN]; gboolean is_deleted = FALSE; fread(&clen,1,1,fp); if (clen < 0) { clen = - clen; is_deleted = TRUE; } fread(&usecount, sizeof(usecount_t), 1,fp); if (!pr_usecount) usecount = 0; if (phsz==2) fread(phbuf, sizeof(phokey_t), clen, fp); else if (phsz==4) fread(phbuf32, 4, clen, fp); else if (phsz==8) fread(phbuf64, 8, clen, fp); char tt[512]; int ttlen=0; tt[0]=0; for(i=0;i<clen;i++) { char ch[CH_SZ]; int n = fread(ch, 1, 1, fp); if (n<=0) goto stop; int len=utf8_sz(ch); fread(&ch[1], 1, len-1, fp); memcpy(tt+ttlen, ch, len); ttlen+=len; } tt[ttlen]=0; if (!tt[0]) continue; if (is_deleted) continue; fprintf(fp_out, "%s ", tt); for(i=0;i<clen;i++) { if (phsz==2) { if (b_pinyin) { char *t = phokey2pinyin(phbuf[i]); // dbg("z %s\n", t); fprintf(fp_out, "%s", t); } else prph2(fp_out, phbuf[i]); } else { u_int64_t k; if (phsz==4) k = phbuf32[i]; else k = phbuf64[i]; char tkey[16]; get_keymap_str(k, head.keymap, head.keybits, tkey); fprintf(fp_out, "%s", tkey); } if (i!=clen-1) fprintf(fp_out, " "); } fprintf(fp_out, " %d\n", usecount); } stop: fclose(fp); fclose(fp_out); exit(0); }
int main(int argc, char **argv) { gtk_init(&argc, &argv); #if 1 if (argc != 3) p_err("%s a_file.gtab outfile", argv[0]); #endif #if 1 char *infile = argv[1]; char *outfile = argv[2]; #else char *infile = "data/ar30.gtab"; char *outfile = "l"; #endif FILE *fr; if ((fr=fopen(infile, "rb"))==NULL) p_err("cannot err open %s", infile); FILE *fp_out; if ((fp_out=fopen(outfile,"w"))==NULL) { printf("Cannot open %s", outfile); exit(-1); } struct TableHead th; fread(&th,1, sizeof(th), fr); #if NEED_SWAP swap_byte_4(&th.version); swap_byte_4(&th.flag); swap_byte_4(&th.space_style); swap_byte_4(&th.KeyS); swap_byte_4(&th.MaxPress); swap_byte_4(&th.M_DUP_SEL); swap_byte_4(&th.DefC); for(i=0; i <= KeyNum; i++) swap_byte_4(&idx1[i]); #endif int KeyNum = th.KeyS; dbg("keys %d\n",KeyNum); if (!th.keybits) th.keybits = 6; dbg("keybits:%d maxPress:%d\n", th.keybits, th.MaxPress); int max_keyN; if (th.MaxPress*th.keybits > 32) { max_keyN = 64 / th.keybits; key64 = TRUE; dbg("it's a 64-bit .gtab\n"); } else { max_keyN = 32 / th.keybits; key64 = FALSE; } dbg("key64:%d\n", key64); char kname[128][CH_SZ]; char keymap[128]; gtab_idx1_t idx1[256]; static char kno[128]; itN = th.DefC; bzero(keymap, sizeof(keymap)); fread(keymap, 1, th.KeyS, fr); fread(kname, CH_SZ, th.KeyS, fr); fread(idx1, sizeof(gtab_idx1_t), KeyNum+1, fr); int i; for(i=0; i < th.KeyS; i++) { kno[keymap[i]] = i; } fprintf(fp_out,TSIN_GTAB_KEY" %d %d %s\n", th.keybits, th.MaxPress, keymap+1); if (key64) { fread(it64, sizeof(ITEM64), th.DefC, fr); qsort(it64, th.DefC, sizeof(ITEM64), qcmp_ch64); } else { fread(it, sizeof(ITEM), th.DefC, fr); qsort(it, th.DefC, sizeof(ITEM), qcmp_ch); } itN = th.DefC; // dbg("itN:%d\n", itN); #if 0 for(i=0; i < itN; i++) { printf("\n%d ", i); utf8_putchar(it64[i].ch); } #endif fclose(fr); char fname[128]; get_gcin_user_fname(tsin32_f, fname); FILE *fp; if ((fp=fopen(fname,"rb"))==NULL) { printf("Cannot open %s", fname); exit(-1); } while (!feof(fp)) { int i; phokey_t phbuf[MAX_PHRASE_LEN]; u_char clen; usecount_t usecount; fread(&clen,1,1,fp); fread(&usecount, sizeof(usecount_t), 1,fp); fread(phbuf,sizeof(phokey_t), clen, fp); char str[MAX_PHRASE_LEN * CH_SZ + 1]; int strN = 0; KKARR kk[MAX_PHRASE_LEN]; KKARR64 kk64[MAX_PHRASE_LEN]; gboolean has_err = FALSE; if (key64) bzero(kk64, sizeof(kk64)); else bzero(kk, sizeof(kk)); // dbg("clen %d\n", clen); for(i=0;i<clen;i++) { char ch[CH_SZ]; int n = fread(ch, 1, 1, fp); if (n<=0) goto stop; int len=utf8_sz(ch); fread(&ch[1], 1, len-1, fp); // utf8_putchar(ch); if (key64) { if (!(kk64[i].arr = find_ch64(ch, &kk64[i].N))) has_err = TRUE; } else { if (!(kk[i].arr = find_ch(ch, &kk[i].N))) has_err = TRUE; } memcpy(str+strN, ch, len); strN+=len; } if (has_err) { // dbg("has_error\n"); continue; } #if 0 for(i=0; i < clen; i++) printf("%d ", kk64[i].N); printf("\n"); #endif str[strN]=0; int permN; if (key64) { permN=kk64[0].N; for(i=1;i<clen;i++) permN *= kk64[i].N; } else { permN=kk[0].N; for(i=1;i<clen;i++) permN *= kk[i].N; } int z; for(z=0; z < permN; z++) { char vz[MAX_PHRASE_LEN]; int tz = z; if (key64) { for(i=0; i < clen; i++) { vz[i] = tz % kk64[i].N; tz /= kk64[i].N; } } else { for(i=0; i < clen; i++) { vz[i] = tz % kk[i].N; tz /= kk[i].N; } } char kstr[512]; kstr[0]=0; for(i=0;i<clen;i++) { char tkey[16]; u_int64_t k=0; if (key64) { memcpy(&k, kk64[i].arr[vz[i]].key, 8); } else { u_int t; memcpy(&t, kk[i].arr[vz[i]].key, 4); k = t; } get_keymap_str(k, keymap, th.keybits, tkey); strcat(kstr, tkey); strcat(kstr, " "); } fprintf(fp_out,"%s %s%d\n", str, kstr, usecount); } } stop: fclose(fp); fclose(fp_out); return 0; }