/* * === FUNCTION ====================================================================== * Name: print_server_info * Description: 提取中文信息并打印输出 * ===================================================================================== */ void print_server_info (const uint8_t *packet) { char msg_buf[1024]; char *msg; uint16_t msg_length; uint16_t empty_length; uint16_t account_info_offset; msg_length = ntohs(*(uint16_t*)(packet + 0x1a)); empty_length = ntohs(*(uint16_t*)(packet + 0x1c + msg_length + 0x04)); account_info_offset = 0x1c + msg_length + 0x06 + empty_length + 0x12 + 0x09; /* success和failure报文系统信息的固定位置 */ if (msg_length) { msg = (char*)(packet + 0x1c); code_convert ("gb2312", "utf-8", msg, msg_length, msg_buf, 1024); fprintf (stdout, ">>Server Message: %s\n", msg_buf); } /* success报文关于用户账户信息 */ if (0x1a48 == ntohs(*(uint16_t*)(packet + account_info_offset))) { msg_length = *(uint8_t*)(packet + account_info_offset + 0x07); msg = (char*)(packet + account_info_offset + 0x08); code_convert ("gb2312", "utf-8", msg, msg_length, msg_buf, 1024); fprintf (stdout, ">>Account Info: %s\n", msg_buf); } }
int discuzupdateemail(char* userid, char* email, time_t firstlogin) { // update email and first login time after first register char sqlbuf[512]; char useridutf8[22]; //21 is the longest utf8 length MYSQL *mysql = NULL; mysql = mysql_init(mysql); mysql = mysql_real_connect(mysql,"localhost",SQLUSER,SQLPASSWD,SQLDB,0, NULL,0); if(!mysql) { writesyslog(ERRORLOG, "Can not open database!\n Please contact SYSOP\n"); return -1; } mysql_query(mysql, "set names utf8"); if(code_convert("gbk","utf8",userid, strlen(userid),useridutf8,22)== -1) { char log[256]; sprintf(log, "Convert username %s error \n", userid); writesyslog(ERRORLOG, log); return -1; } sprintf(sqlbuf, "update pre_common_member set email = '%s', regdate = %ld where username = '******'", email, firstlogin, userid); mysql_query(mysql, sqlbuf); sprintf(sqlbuf, "update pre_ucenter_members set email = '%s', regdate = %ld where username = '******'", email, firstlogin, userid); mysql_query(mysql, sqlbuf); mysql_close(mysql); return 0; }
value iconv_convert(value inbufVal, value from_charsetVal, value to_charsetVal) { char *from_charset; char *to_charset; char *inbuf; char *outbuf; size_t inlen; size_t outlen; from_charset = Val2Str(from_charsetVal); to_charset = Val2Str(to_charsetVal); inbuf = Val2Str(inbufVal); inlen = strlen(inbuf); outlen = inlen * 4; outbuf = (char *)malloc(outlen); if(code_convert(from_charset,to_charset,inbuf,inlen,outbuf,outlen) == -1) return val_null; inlen = strlen(outbuf); char *outData = (char *)malloc(inlen + 1); memcpy(outData, outbuf, inlen); *(outData + inlen) = 0; free(outbuf); value out = alloc_string(outData); return out; }
int main(int argc,char *argv[]) { char *result_converted=malloc(BUFFER); switch (argc){ case 2: break; case 3: if(!strcmp(argv[1],"zh_CN")) { strcpy(dest,"en"); strcpy(src,argv[1]); } break; default: break; printf("help: Gtrans [input language 'en'or'zh_CN'--default 'en'] ['string']\n"); return 0; } char bu[4096]; memset(bu, 0, sizeof(bu)); int i = 0; for(i = 1; i< argc; i++){ strcat(bu, argv[i]); strcat(bu, " "); } translate_engine(bu); code_convert("gb2312","utf-8",result,strlen(result),result_converted,BUFFER); //printf("%s\n",result_converted); return 0; }
/* * === FUNCTION ====================================================================== * Name: print_server_info * Description: 提取中文信息并打印输出 * ===================================================================================== */ void print_server_info (const uint8_t *packet, u_int packetlength, enum EAPType pack_type) { char msg_buf[1024]; size_t msg_len; char *msg; if (pack_type == RUIJIE_EAPOL_MSG) goto RUIJIE_MSG; /* success和failure报文系统信息的固定位置 */ msg_len = ntohs(*(uint16_t*)(packet + 0x1a)); if (msg_len < 3) return; msg = (char*)(packet + 0x1c); code_convert ("gb2312", "utf-8", msg, msg_len, msg_buf, 1024); fprintf (stdout, ">>Server Message: %s\n", msg_buf); // fflush (stderr); if (packetlength < 0x110) return; /* success报文关于用户账户信息的位置 */ msg_len = *(uint8_t*)(packet + 0x114); msg = (char*)(packet + 0x115); code_convert ("gb2312", "utf-8", msg, msg_len, msg_buf, 1024); fprintf (stdout, ">>Account Info: %s\n", msg_buf); // fflush (stderr); return; /* 锐捷的通知报文 */ RUIJIE_MSG:; msg = (char*)(packet + 0x1b); msg_len = strlen (msg); code_convert ("gb2312", "utf-8", msg, msg_len, msg_buf, 1024); fprintf (stdout, ">>Manager Notification: %s\n", msg_buf); // fflush (stderr); }
char * nd_utf8_to_gbk(const char *input_text, char *output_buf, int size_buf) { int inlen = (int) ndstrlen(input_text) ; int ret = code_convert("UTF-8","GBK",(char*)input_text,inlen,output_buf,size_buf); if (0==ret) { return output_buf ; } return NULL ; }
bool StringTool::u2g(char *inbuf,int inlen,char *outbuf,int outlen) { /* UTF-8,GB2312这个要大写???? 具体可以传递哪些参数可以使用命令iconv --list 查看支持那些编码 comment by wangqiguo 2014-4-28 */ return code_convert("UTF-8","GB2312",inbuf,inlen,outbuf,outlen); }
//将UTF-8编码转成GB2312 char *EASY_UTIL::Utf8ToGb18030(char *dest,int dest_len,const char*src) { if(0 !=code_convert("UTF-8", "GB18030",(char*)src, strlen(src), dest, dest_len)) { return NULL; } return dest; }
//将GB18030编码转成UTF-8: char *EASY_UTIL::Gb18030ToUtf8(char *dest,int dest_len,const char*src) { //if(0 !=code_convert("utf-8","gb2312", (char*)src, strlen(src), dest, dest_len)) if(0 !=code_convert("GB18030","UTF-8", (char*)src, strlen(src), dest, dest_len)) { return NULL; } return dest; }
/*GB2312 to UTF8*/ std::string CharacterConver::a2u(const char *inbuf) { size_t inlen = strlen(inbuf); char * outbuf = new char[inlen * 2 + 2]; std::string strRet; if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 + 2) ==0) { strRet = outbuf; } delete[] outbuf; return strRet; }
int _tmain(int argc, _TCHAR* argv[]) { char *inbuf = new char[9999999]; size_t inlen = 100; char *outbuf = new char[9999999]; size_t outlen = 100; memset(inbuf, 0, 100); strcpy_s(inbuf,1024, "¹þ¹þ¹þ¹þºÇºÇºÇºÇ°×¶«Éý"); //cout << "Ô´×Ö·û´®£º" << inbuf << endl; printf("%s\n", inbuf); code_convert("GBK", "utf-8", inbuf, inlen, outbuf, outlen); //cout << "תÂëºó´®£º" << outbuf << endl; printf("%s\n", outbuf); code_convert("utf-8", "GBK", outbuf, inlen, inbuf, outlen); //cout << "Ô´×Ö·û´®£º" << inbuf << endl; getchar(); return 0; }
/************************************************ * GB2312码转为UTF-8码 * * 成功则返回一个动态分配的byte*变量, * * 需要在使用完毕后手动free,失败返回NULL * ************************************************/ byte * g2u(byte * inbuf) { if ( strlen(inbuf) == 0 ) return NULL; int nOutLen = 2 * strlen(inbuf) - 1; byte* szOut = (byte*)malloc(nOutLen); //if (FAIL == code_convert("gb2312","utf-8",inbuf,strlen(inbuf),szOut,nOutLen)) { if (FAIL == code_convert("gbk","utf-8",inbuf,strlen(inbuf),szOut,nOutLen)) { free(szOut); szOut = NULL; } return szOut; }
/*GB2312תΪUTF8*/ std::string CSystem::a2u(const char *inbuf) { std::string strRet; //#ifndef ANDROID size_t inlen = strlen(inbuf); char * outbuf = new char[inlen * 2 + 2]; if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 + 2) == 0) { strRet = outbuf; } delete [] outbuf; //#endif return strRet; }
int get_row(struct dirent **entrylist,int n,int minlen) { struct winsize ws; ioctl(STDIN_FILENO,TIOCGWINSZ,&ws); int ws_col = ws.ws_col,ws_row = ws.ws_row,inlen,outlen,row,col,sum,flag,p,curl,maxlen; for (row = 1;row <= n;row++) { if (row - n % row > 1) continue; col = (n - 1) / row + 1; flag = 0; sum = 0; for (int i = 0;i < col;i++) { maxlen = 0; for (int j = 0;j < row;j++) { p = i * row + j; if (p >= n) break; else { inlen = strlen(entrylist[p]->d_name); outlen = 255; char *inbuf = entrylist[p]->d_name; char outbuf[255]; code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen); curl = strlen(outbuf) + 2; if (curl > maxlen) maxlen = curl; } } sum += maxlen; if (sum > ws_col) { flag = 0; break; } else { flag = 1; } } if (flag == 1) break; } return row; }
int main(int argc, char** argv) { int nRetCode = -1; char* szInBuf = NULL; char szOutBuf[BUF_SIZE] = ""; int nOutLeft = BUF_SIZE; struct stat filestat; uint32_t filesize; FILE* fp = NULL; printf("sizeof(size_t)=%d\n", sizeof(size_t) ); // allocate buffer. // int stat(const char* filename, struct stat *buf); stat("bbb.csv", &filestat); filesize = filestat.st_size; printf("file size=%d\n", filesize); szInBuf = (char*)malloc(filesize + 1); // load data if ( NULL == (fp = fopen("bbb.csv", "r")) ) { printf("open file error\n"); nRetCode = -1; goto ExitError; } if ( fread(szInBuf, filesize, 1, fp) != 1 ) { printf("read file error\n"); nRetCode = -1; goto ExitError; } fclose(fp); fp = NULL; // convert code. printf("%s\n", szInBuf); if (-1 == code_convert("gbk", szOutBuf, &nOutLeft, "utf8", szInBuf, &filesize) ) { perror("code convert error:"); nRetCode = -1; goto ExitError; } printf("%s\n", szOutBuf); nRetCode = 0; ExitError: free(szInBuf); szInBuf = NULL; return nRetCode; }
int encodingtest()//直接setcookies { char buf[256]; int r; r = code_convert(CHARSET, "utf8", STR_ENCODING_TEST, strlen(STR_ENCODING_TEST), buf, sizeof(buf) - 1); if (r < 0) { return -1;//nothing.error. } if (!strcmp(buf, getparm(STR_ENCODING_NAME))) { headerCookie(STR_ENCODING_COOKIES, "utf8"); return 1;//utf! } return 0;//nothing }
void print_notification_msg(const uint8_t *packet) { char msg_buf[1024]; size_t msg_length; char *msg; /* 锐捷的通知报文 */ msg = (char*)(packet + 0x1b); msg_length = strlen (msg); code_convert ("gb2312", "utf-8", msg, msg_length, msg_buf, 1024); fprintf (stdout, ">>Manager Notification: %s\n", msg_buf); }
/// @brief CodeConvert 함수 : 예를 들어 utf-8 -> euckr로 바꿀때 유용 C++ 함수 /// /// code 형식을 바꿀 경우 사용한다. /// 다른 이유가 없으면 이것을 이용해서 사용한다. /// /// @param sSource source /// @param to_codeset 원시 codeset /// @param from_codeset 바꿀 coddset /// @return 바뀐 string 데이터 string CodeConvert(const string& sSource, const char *to_codeset, const char *from_codeset) { char* cStr = NULL; string sCodeConvertStr; #ifdef HAVE_ICONV cStr = code_convert((char*)sSource.c_str(), to_codeset, from_codeset); #endif if (cStr != NULL) { sCodeConvertStr = cStr; free(cStr); } return sCodeConvertStr; }
void print_list(struct dirent **entrylist,int n,int row) { int col = (n - 1) / row + 1,total = 0,curl,inlen,outlen,p; int maxlen[col]; for (int i = 0;i < col;i++) { curl = 0; maxlen[i] = 0; for (int j = 0;j < row;j++) { p = i * row + j; if (p >= n) break; else { inlen = strlen(entrylist[p]->d_name); outlen = 255; char *inbuf = entrylist[p]->d_name; char outbuf[255]; code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen); curl = strlen(outbuf) + 2; if (curl > maxlen[i]) maxlen[i] = curl; } } if (i > 0) maxlen[i] += maxlen[i - 1]; } for (int i = 0;i < row;i++) { for (int j = 0;j < col;j++) { p = j * row + i; if (p >= n) break; else { if (j > 0) printf("\033[%dC",maxlen[j - 1]); printf("%s \n",entrylist[p]->d_name); } printf("\033[%dA",1); } printf("\033[%dB",1); } }
int encode_to_mbs(char *dest, int sz, const char *src, int srcsz) { const char *charset = u8_get_sys_charset(); if (pcs_utils_strcmpi(charset, "utf-8") == 0) { if (srcsz == -1) { const char *p = src; while(*p) { p++; } srcsz = p - src; } memcpy(dest, src, srcsz); return srcsz; } else { return code_convert("utf-8", charset, dest, sz, src, srcsz); } }
int encode_to_mbs_size(const char *src, int srcsz) { const char *charset = u8_get_sys_charset(); if (pcs_utils_strcmpi(charset, "utf-8") == 0) { if (srcsz == -1) { const char *p = src; while(*p) { p++; } srcsz = p - src; } return srcsz; } else { int sz; char *dest; sz = srcsz * 4 + 4; dest = (char *) alloca(sz); return code_convert("utf-8", charset, dest, sz, src, srcsz); } }
void print_server_info (const uint8_t *packet, uint16_t packetlength) { const uint8_t *str; { if ( *(packet + 0x2A) == 0x12) { str = (packet + 0x2B); goto FOUND_STR; } if (packetlength < 0x42) return; if ( *(packet + 0x42) == 0x12) { str = (packet + 0x43); goto FOUND_STR; } if (packetlength < 0x9A) return; if ( *(packet + 0x9A) == 0x12) { str = (packet + 0x9B); goto FOUND_STR; } if (packetlength < 0x120) return; if ( *(packet + 0x120) == 0x12) { str = (packet + 0x121); goto FOUND_STR; } return; } FOUND_STR:; char info_str [1024] = {0}; code_convert ("gb2312", "utf-8", (char*)(str + 1), *str, info_str, 1024); fprintf (stdout, ">>Server Info: %s\n", info_str); }
int g2u(char *inbuf, size_t inlen, char *outbuf, size_t outlen) { return code_convert("gb18030", "utf-8", inbuf, inlen, outbuf, outlen); }
//UNICODE码转为GB2312码 int u2g(char *inbuf,size_t inlen,char *outbuf,size_t outlen) { return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen); }
// #define WRD_VERBOSE static void wrdt_apply(int cmd, int wrd_argc, int wrd_args[]) { char *p; char *text; int i, len; static txtclr_preserve=0; if ( !w32g_wrd_wnd.active ) return; switch(cmd) { case WRD_LYRIC: p = wrd_event2string(wrd_args[0]); len = strlen(p); text = (char *)new_segment(&tmpbuffer, SAFE_CONVERT_LENGTH(len)); /*This must be not good thing,but as far as I know no wrd file written in EUC-JP code found*/ strcpy(text,p); #ifdef WRD_VERBOSE // ctl->cmsg(CMSG_INFO, VERB_VERBOSE, // "[WRD_LYRIC]\n%s", text ); #endif putstring_with_esc(text); reuse_mblock(&tmpbuffer); break; case WRD_NL: /* Newline (Ignored) */ esc_nextline(); // putchar('\n'); break; case WRD_COLOR: /*Compatibility Hack,This remaps color(17-29 color seems to be ignored in kterm)*/ esc_characterattribute(wrd_args[0]); break; case WRD_END: /* Never call */ break; case WRD_ESC: borlandc_esc(wrd_event2string(wrd_args[0])); break; case WRD_EXEC: /*I don't spaun another program*/ ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@EXEC(%s)", wrd_event2string(wrd_args[0])); break; case WRD_FADE: wrd_graphic_fade ( wrd_args[0], wrd_args[1], wrd_args[2] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@FADE(%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2]); #endif break; case WRD_FADESTEP: wrd_graphic_fadestep ( wrd_args[0] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@FADESTEP(%d/%d)", wrd_args[0], WRD_MAXFADESTEP); #endif break; case WRD_GCIRCLE: wrd_graphic_gcircle ( wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5] ); ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@GCIRCLE(%d,%d,%d,%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5]); break; case WRD_GCLS: wrd_graphic_gcls ( wrd_args[0] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@GCLS(%d)", wrd_args[0]); #endif break; case WRD_GINIT: wrd_graphic_ginit (); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@GINIT()"); #endif break; case WRD_GLINE: wrd_graphic_gline ( wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@GLINE(%d,%d,%d,%d,%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6]); #endif break; case WRD_GMODE: wrd_graphic_gmode ( wrd_args[0] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@GMODE(%d)", wrd_args[0]); #endif break; case WRD_GMOVE: wrd_graphic_gmove ( wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6], wrd_args[7], wrd_args[8] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@GMOVE(%d,%d,%d,%d,%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6], wrd_args[7], wrd_args[8]); #endif break; case WRD_GON: wrd_graphic_gon ( wrd_args[0] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@GON(%d)", wrd_args[0]); #endif break; case WRD_GSCREEN: wrd_graphic_gscreen ( wrd_args[0], wrd_args[1] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@GSCREEN(%d,%d)", wrd_args[0], wrd_args[1]); #endif break; case WRD_INKEY: inkey_flag = 1; ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@INKEY - begin"); break; case WRD_OUTKEY: inkey_flag = 0; ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@INKEY - end"); break; case WRD_LOCATE: { int x = wrd_args[0], y = wrd_args[1]; WrdWndGoto(x-1, y-1); } break; case WRD_LOOP: /* Never call */ break; case WRD_MAG: wrd_graphic_mag ( wrd_event2string(wrd_args[0]), wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4]); #ifdef WRD_VERBOSE p = (char *)new_segment(&tmpbuffer, MIN_MBLOCK_SIZE); strcpy(p, "@MAG("); strcat(p, wrd_event2string(wrd_args[0])); strcat(p, ","); for(i = 1; i < 3; i++) { if(wrd_args[i] == WRD_NOARG) strcat(p, "*,"); else sprintf(p + strlen(p), "%d,", wrd_args[i]); } sprintf(p + strlen(p), "%d,%d)", wrd_args[3], wrd_args[4]); ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "%s", p); reuse_mblock(&tmpbuffer); #endif break; case WRD_MIDI: /* Never call */ break; case WRD_OFFSET: /* Never call */ break; case WRD_PAL: wrd_graphic_pal_g4r4b4 (wrd_args[0], wrd_args + 1, 16 ); #ifdef WRD_VERBOSE p = (char *)new_segment(&tmpbuffer, MIN_MBLOCK_SIZE); sprintf(p, "@PAL(%03x", wrd_args[0]); for(i = 1; i < 17; i++) sprintf(p + strlen(p), ",%03x", wrd_args[i]); strcat(p, ")"); ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "%s", p); reuse_mblock(&tmpbuffer); #endif break; case WRD_PALCHG: wrd_graphic_apply_pal ( wrd_args[0] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@PALCHG(%s)", wrd_event2string(wrd_args[0])); #endif break; case WRD_PALREV: wrd_graphic_palrev ( wrd_args[0] ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@PALREV(%d)", wrd_args[0]); #endif break; case WRD_PATH: ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@PATH(%s)", wrd_event2string(wrd_args[0])); break; case WRD_PLOAD: wrd_graphic_pload ( wrd_event2string(wrd_args[0]) ); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@PLOAD(%s)", wrd_event2string(wrd_args[0])); #endif break; case WRD_REM: p = wrd_event2string(wrd_args[0]); len = strlen(p); text = (char *)new_segment(&tmpbuffer, SAFE_CONVERT_LENGTH(len)); code_convert(p, text, SAFE_CONVERT_LENGTH(len), NULL, NULL); ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@REM %s", text); reuse_mblock(&tmpbuffer); break; case WRD_REMARK: ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@REMARK(%s)", wrd_event2string(wrd_args[0])); break; case WRD_REST: /* Never call */ break; case WRD_SCREEN: /* Not supported */ break; case WRD_SCROLL: wrd_text_scroll (wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6]); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@SCROLL(%d,%d,%d,%d,%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6]); #endif break; case WRD_STARTUP: WrdWndReset (); inkey_flag = 0; #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@STARTUP(%d)", wrd_args[0]); #endif esc_clearscreen(); break; case WRD_STOP: /* Never call */ break; case WRD_TCLS: { char fillbuf[1024]; { int left = wrd_args[0], right = wrd_args[2]; int top = wrd_args[1], bottom = wrd_args[3]; SEIKIX(left); SEIKIX(right); SEIKIY(top); SEIKIY(bottom); if(left>right) right = left; if(top>bottom) bottom = top; memset(fillbuf,wrd_args[5],right-left);/*X2-X1*/ fillbuf[right-left]=0; // borlandc_con_save_attr(); esc_characterattribute(wrd_args[4]); for(i=top;i<=bottom;i++)/*Y1 to Y2*/ { WrdWndGoto(left-1,i-1); putstring(fillbuf); } // borlandc_con_restore_attr(); } } break; case WRD_TON: wrd_text_ton ( wrd_args[0] ); ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "@TON(%d)", wrd_args[0]); break; case WRD_WAIT: /* Never call */ break; case WRD_WMODE: /* Never call */ break; /* Ensyutsukun */ case WRD_eFONTM: print_ecmd("FONTM", wrd_args, 1); break; case WRD_eFONTP: print_ecmd("FONTP", wrd_args, 4); break; case WRD_eFONTR: print_ecmd("FONTR", wrd_args, 17); break; case WRD_eGSC: print_ecmd("GSC", wrd_args, 1); break; case WRD_eLINE: print_ecmd("LINE", wrd_args, 1); break; case WRD_ePAL: print_ecmd("PAL", wrd_args, 2); break; case WRD_eREGSAVE: print_ecmd("REGSAVE", wrd_args, 17); break; case WRD_eSCROLL: print_ecmd("SCROLL",wrd_args, 2); break; case WRD_eTEXTDOT: print_ecmd("TEXTDOT", wrd_args, 1); break; case WRD_eTMODE: print_ecmd("TMODE", wrd_args, 1); break; case WRD_eTSCRL: print_ecmd("TSCRL", wrd_args, 0); break; case WRD_eVCOPY: print_ecmd("VCOPY", wrd_args, 9); break; case WRD_eVSGET: print_ecmd("VSGE", wrd_args, 4); break; case WRD_eVSRES: print_ecmd("VSRES", wrd_args, 0); break; case WRD_eXCOPY: wrd_graphic_xcopy ( wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6], wrd_args[7], wrd_args[8], wrd_args[9], wrd_args[10], wrd_args[11], wrd_args[12], wrd_args[13] ); print_ecmd("XCOPY", wrd_args, 14); break; case WRD_START_SKIP: wrd_start_skip (); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "WRD_START_SKIP"); #endif break; case WRD_END_SKIP: wrd_end_skip (); #ifdef WRD_VERBOSE ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "WRD_END_SKIP"); #endif break; /* Extensionals */ } }
bool StringTool::g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen) { return code_convert("GB2312","UTF-8",inbuf,inlen,outbuf,outlen); }
// 以下两个函数是字符编码的转换,如果转换成功,传入的地址 // 的内容将会被更新,同时被return返回,否则原先的内容不会 // 被改变,返回NULL char* utf8_to_gbk(char *strUTF8, int size) { return code_convert(strUTF8, size, "GBK//IGNORE", "UTF-8"); }
static void wrdt_apply(int cmd, int wrd_argc, int wrd_args[]) { char *p; char *text; int i, len; static int txtclr_preserve=0; #if 0 if(inkey_flag) printf("* "); #endif switch(cmd) { case WRD_LYRIC: p = wrd_event2string(wrd_args[0]); len = strlen(p); text = (char *)new_segment(&tmpbuffer, SAFE_CONVERT_LENGTH(len)); /*This must be not good thing,but as far as I know no wrd file written in EUC-JP code found*/ code_convert(p, text, SAFE_CONVERT_LENGTH(len), "SJIS", (char *)-1); printf("%s",text); fflush(stdout); reuse_mblock(&tmpbuffer); break; case WRD_NL: /* Newline (Ignored) */ putchar('\n'); break; case WRD_COLOR: txtclr_preserve=wrd_args[0]; if(16 <= txtclr_preserve && txtclr_preserve <= 23) txtclr_preserve = wrd_color_remap[txtclr_preserve - 16] + 30; printf("\033[%dm", txtclr_preserve); break; case WRD_END: /* Never call */ break; case WRD_ESC: printf("\033[%s", wrd_event2string(wrd_args[0])); break; case WRD_EXEC: /*I don't spaun another program*/ ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@EXEC(%s)", wrd_event2string(wrd_args[0])); break; case WRD_FADE: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@FADE(%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2]); break; case WRD_FADESTEP: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@FADESTEP(%d/%d)", wrd_args[0], WRD_MAXFADESTEP); break; case WRD_GCIRCLE: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@GCIRCLE(%d,%d,%d,%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5]); break; case WRD_GCLS: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@GCLS(%d)", wrd_args[0]); break; case WRD_GINIT: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@GINIT()"); break; case WRD_GLINE: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@GLINE(%d,%d,%d,%d,%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6]); fflush(stdout); break; case WRD_GMODE: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@GMODE(%d)", wrd_args[0]); break; case WRD_GMOVE: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@GMOVE(%d,%d,%d,%d,%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6], wrd_args[7], wrd_args[8]); break; case WRD_GON: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@GON(%d)", wrd_args[0]); break; case WRD_GSCREEN: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@GSCREEN(%d,%d)", wrd_args[0], wrd_args[1]); break; case WRD_INKEY: inkey_flag = 1; ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@INKEY - begin"); break; case WRD_OUTKEY: inkey_flag = 0; ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@INKEY - end"); break; case WRD_LOCATE: printf("\033[%d;%dH", wrd_args[1], wrd_args[0]); break; case WRD_LOOP: /* Never call */ break; case WRD_MAG: p = (char *)new_segment(&tmpbuffer, MIN_MBLOCK_SIZE); strcpy(p, "@MAG("); strcat(p, wrd_event2string(wrd_args[0])); strcat(p, ","); for(i = 1; i < 3; i++) { if(wrd_args[i] == WRD_NOARG) strcat(p, "*,"); else sprintf(p + strlen(p), "%d,", wrd_args[i]); } sprintf(p + strlen(p), "%d,%d)", wrd_args[3], wrd_args[4]); ctl->cmsg(CMSG_INFO, VERB_DEBUG, "%s", p); reuse_mblock(&tmpbuffer); break; case WRD_MIDI: /* Never call */ break; case WRD_OFFSET: /* Never call */ break; case WRD_PAL: p = (char *)new_segment(&tmpbuffer, MIN_MBLOCK_SIZE); sprintf(p, "@PAL(%03x", wrd_args[0]); for(i = 1; i < 17; i++) sprintf(p + strlen(p), ",%03x", wrd_args[i]); strcat(p, ")"); ctl->cmsg(CMSG_INFO, VERB_DEBUG, "%s", p); reuse_mblock(&tmpbuffer); break; case WRD_PALCHG: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@PALCHG(%s)", wrd_event2string(wrd_args[0])); break; case WRD_PALREV: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@PALREV(%d)", wrd_args[0]); break; case WRD_PATH: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@PATH(%s)", wrd_event2string(wrd_args[0])); break; case WRD_PLOAD: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@PLOAD(%s)", wrd_event2string(wrd_args[0])); break; case WRD_REM: p = wrd_event2string(wrd_args[0]); len = strlen(p); text = (char *)new_segment(&tmpbuffer, SAFE_CONVERT_LENGTH(len)); code_convert(p, text, SAFE_CONVERT_LENGTH(len), NULL, NULL); ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@REM %s", text); reuse_mblock(&tmpbuffer); break; case WRD_REMARK: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@REMARK(%s)", wrd_event2string(wrd_args[0])); break; case WRD_REST: /* Never call */ break; case WRD_SCREEN: /* Not supported */ break; case WRD_SCROLL: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@SCROLL(%d,%d,%d,%d,%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5], wrd_args[6]); break; case WRD_STARTUP: inkey_flag = 0; ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@STARTUP(%d)", wrd_args[0]); printf("\033[0m\033[H\033[J"); fflush(stdout); break; case WRD_STOP: /* Never call */ break; case WRD_TCLS: { char fillbuf[1024]; fillbuf[0]=0x1b; fillbuf[1]='7'; fillbuf[2]=0; printf(fillbuf); /* 0-7: normal, 8-16: reverse */ if(wrd_args[4] <= 7) wrd_args[4] += 30; else wrd_args[4] += 32; printf("\033[%dm",wrd_args[4]); memset(fillbuf,wrd_args[5],wrd_args[2]-wrd_args[0]);/*X2-X1*/ fillbuf[wrd_args[2]-wrd_args[0]]=0; for(i=wrd_args[1];i<=wrd_args[3];i++)/*Y1 to Y2*/ printf("\033[%d;%dH%s",i,wrd_args[0],fillbuf);/*X1to....*/ fillbuf[0]=0x1b; fillbuf[1]='8'; fillbuf[2]=0; printf(fillbuf); printf("\033[%dm",txtclr_preserve); fflush(stdout); } #if 0 ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@TCLS(%d,%d,%d,%d,%d,%d,%d)", wrd_args[0], wrd_args[1], wrd_args[2], wrd_args[3], wrd_args[4], wrd_args[5]); #endif break; case WRD_TON: ctl->cmsg(CMSG_INFO, VERB_DEBUG, "@TON(%d)", wrd_args[0]); break; case WRD_WAIT: /* Never call */ break; case WRD_WMODE: /* Never call */ break; /* Ensyutsukun */ case WRD_eFONTM: break; case WRD_eFONTP: break; case WRD_eFONTR: break; case WRD_eGSC: break; case WRD_eLINE: break; case WRD_ePAL: break; case WRD_eREGSAVE: break; case WRD_eSCROLL: break; case WRD_eTEXTDOT: break; case WRD_eTMODE: break; case WRD_eTSCRL: break; case WRD_eVCOPY: break; case WRD_eVSGET: break; case WRD_eVSRES: break; case WRD_eXCOPY: break; default: break; } wrd_argc = 0; }
char* gbk_to_utf8(char *strGBK, int size) { return code_convert(strGBK, size,"UTF-8//IGNORE", "GBK" ); }
//GB2312ÂëתΪUNICODEÂë int g2u(char *inbuf, int inlen, char *outbuf, int outlen) { return code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, outlen); }