int m17n_ccx_filter(M17nCCX *m17n,FILE *in,FILE *out){ int rcode = -1; int ecode; m17n->m_mtext = 0; m17n->m_dec = mconv_stream_converter(m17n->m_icode,in); if( m17n->m_dec == 0 ){ m17n_ccx_freeconv(m17n); return -1; } m17n->m_enc = mconv_stream_converter(m17n->m_ocode,out); if( m17n->m_enc == 0 ){ m17n_ccx_freeconv(m17n); return -2; } LAP("converter-set"); m17n->m_mtext = mtext(); m17n->m_dec->lenient = 1; mconv_decode(m17n->m_dec,m17n->m_mtext); LAP("decoded"); m17n->m_enc->lenient = 1; m17n->m_enc->last_block = 1; ecode = mconv_encode(m17n->m_enc,m17n->m_mtext); rcode = 0; LAP("encoded"); m17n_ccx_freeconv(m17n); LAP("filter-done"); return rcode; }
void cCR_CIC_EV::run() { for(int i = 0; i < m_pathList.size(); i++) m_waitingEnding.insert(m_pathList[i].opposite(this)); m_mutex.unlock(); for(int i = 0; i < m_pathListOptimal.size(); i++) ((cCR_CIC_EV*) m_pathListOptimal[i].opposite(this))->receiveFractDist(this); m_state = FRACTSENT; while(m_state != RELEASED){ msleep(100); m_mutex.lock(); if(m_waitingRelease.empty()) m_state = RELEASED; m_mutex.unlock(); } LAP(); for(int i = 0; i < m_pathList.size(); i++) ((cCR_CIC_EV*) m_pathList[i].opposite(this))->receiveRelease(this); while(!m_waitingEnding.empty()){ msleep(100); } if(m_state == SAVED) LAP2(); final();
int m17n_ccx_init(M17nCCX *m17n,const char *icode,const char *ocode){ m17n->m_Start = Time(); if( m17n_lib_init() < 0 ){ return -1; } LAP("dylib-done"); m17n_Init(); LAP("init-done"); if( icode == 0 ) icode = "utf-8"; if( (m17n->m_icode = mconv_resolve_coding(msymbol(icode))) == 0 ){ fprintf(stderr,"--M17N unknown code: %s\n",icode); return -2; } if( ocode == 0 ) ocode = "utf-8"; if( (m17n->m_ocode = mconv_resolve_coding(msymbol(ocode))) == 0 ){ fprintf(stderr,"--M17N unknown code: %s\n",ocode); return -3; } LAP("ccx-init-done"); return 0; }
int m17n_ccx_string(M17nCCX *m17n,const char *istr,int len,char *ostr,int siz){ const unsigned char *uistr = (const unsigned char*)istr; const unsigned char *uostr = (const unsigned char*)ostr; int rcode = -1; int ecode; int oleng = 1; m17n->m_mtext = 0; m17n->m_dec = mconv_buffer_converter(m17n->m_icode,uistr,len); if( m17n->m_dec == 0 ){ m17n_ccx_freeconv(m17n); return -1; } m17n->m_enc = mconv_buffer_converter(m17n->m_ocode,uostr,siz-1); if( m17n->m_enc == 0 ){ m17n_ccx_freeconv(m17n); return -2; } LAP("converter-set"); m17n->m_mtext = mtext(); m17n->m_dec->lenient = 1; mconv_decode(m17n->m_dec,m17n->m_mtext); LAP("decoded"); m17n->m_enc->lenient = 1; m17n->m_enc->last_block = 1; ecode = mconv_encode(m17n->m_enc,m17n->m_mtext); oleng = m17n->m_enc->nbytes; ostr[oleng] = 0; rcode = oleng; LAP("encoded"); m17n_ccx_freeconv(m17n); LAP("filter-done"); return rcode; }
void cCR_CIC::run() { for(int i = 0; i < m_pathList.size(); i++) m_waitingEnding.insert(m_pathList[i].opposite(this)); m_crList += this; for(int i = 0; i < m_pathListOptimal.size(); i++) m_crList += (cCR_CIC*) m_pathList[i].opposite(this); m_mutex.unlock(); sendFractDist(); for(int i = 0; i < m_pathList.size(); i++){ if(((cCR_CIC*) m_pathList[i].opposite(this))->m_state < FDSENT){ i--; msleep(10); } } while(m_state != RELEASED){ msleep(100); m_mutex.lock(); if(m_waitingRelease.empty()) m_state = RELEASED; m_mutex.unlock(); } LAP(); for(int i = 0; i < m_pathList.size(); i++) ((cCR_CIC*) m_pathList[i].opposite(this))->receiveRelease(this); bool wait = true; while(wait){ m_mutex.lock(); wait = !m_waitingEnding.empty(); m_mutex.unlock(); msleep(10); } LAP2(); final();
int m17n_mainX(int ac,const char *av[],FILE *in,FILE *out){ int ai; const char *arg; M17nCCX *m17n; int fini = 0; m17n = (M17nCCX*)m17n_ccx_new(0,0,0,0); m17n->m_icnam = "iso-2022-jp"; m17n->m_ocnam = "iso-2022-jp"; for( ai = 1; ai < ac; ai++ ){ arg = av[ai]; if( strneq(arg,"-i",2) ){ m17n->m_icnam = arg+2; }else if( strneq(arg,"-o",2) ){ m17n->m_ocnam = arg+2; }else if( strneq(arg,"-d",2) ){ sscanf(arg+2,"%X",&m17n->m_trace); }else if( strneq(arg,"-x",2) ){ fini = 1; } } if( m17n_ccx_init(m17n,m17n->m_icnam,m17n->m_ocnam) != 0 ){ return -1; } m17n_ccx_filter(m17n,in,out); if( fini ){ m17n_Fini(); } m17n_ccx_free(m17n); LAP("finish"); fflush(out); return 0; }