int connect_ts_share_svr() { SOCKET ConnectSocket = -1; struct addrinfo *result = NULL, *ptr = NULL, hints; int iResult; bzero( &hints, sizeof(hints) ); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; char port_s[8]; sprintf(port_s, "%d", TS_SHARE_SERVER_PORT); iResult = getaddrinfo(TS_SHARE_SERVER, port_s, &hints, &result); if ( iResult != 0 ) { #if UNIX p_err("getaddrinfo failed: %s\n", sys_err_strA()); #else p_err("getaddrinfo failed: %s\n", sock_err_strA()); #endif } for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) { // Create a SOCKET for connecting to server ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); if (ConnectSocket < 0) { dbg("Error at socket(): %s\n", sys_err_strA()); continue; } // Connect to server. iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen); if (iResult < 0) { closesocket(ConnectSocket); ConnectSocket = -1; continue; } break; } if (ConnectSocket <= 0) { p_err("cannot connect to %s:%d", TS_SHARE_SERVER, TS_SHARE_SERVER_PORT, sys_err_strA()); } freeaddrinfo(result); return ConnectSocket; }
GCIN_module_callback_functions *init_GCIN_module_callback_functions(char *sofile) { #if UNIX void *handle; char *error; dbg("dlopen %s\n", sofile); if (!(handle = dlopen(sofile, RTLD_LAZY))) { if ((error = dlerror()) != NULL) box_warn(error); return NULL; } #else HMODULE handle = LoadLibraryA(sofile); if (!handle) { box_warn("LoadLibraryA %s error %s", sofile, sys_err_strA()); return NULL; } #define dlsym GetProcAddress #endif GCIN_module_callback_functions st; *(void **) (&st.module_init_win) = dlsym(handle, "module_init_win"); if (!st.module_init_win) p_err("module_init_win() not found in %s", sofile); *(void **) (&st.module_get_win_geom) = dlsym(handle, "module_get_win_geom"); *(void **) (&st.module_reset) = dlsym(handle, "module_reset"); *(void **) (&st.module_get_preedit) = dlsym(handle, "module_get_preedit"); *(void **) (&st.module_feedkey) = dlsym(handle, "module_feedkey"); *(void **) (&st.module_feedkey_release) = dlsym(handle, "module_feedkey_release"); *(void **) (&st.module_move_win) = dlsym(handle, "module_move_win"); *(void **) (&st.module_change_font_size) = dlsym(handle, "module_change_font_size"); *(void **) (&st.module_show_win) = dlsym(handle, "module_show_win"); *(void **) (&st.module_hide_win) = dlsym(handle, "module_hide_win"); *(void **) (&st.module_win_visible) = dlsym(handle, "module_win_visible"); *(void **) (&st.module_flush_input) = dlsym(handle, "module_flush_input"); *(void **) (&st.module_setup_window_create) = dlsym(handle, "module_setup_window_create"); return tmemdup(&st, GCIN_module_callback_functions, 1); }
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); }