Welcome

メイン | P2SC »

2004年06月27日

t_jis2sjis::sjis 少し高速化

ぷろぐらむ

前からずっと気になってた半角かな送信前にJIS END 送ってくる人たち用の対策をしてみました。
ついでに、3文字目を無視してみました。少し高速化。
…律儀にきちんと解析するもんでもないしな(笑い

char* t_jis2sjis::sjis(const char* lpsz)
{
const char *p;
unsigned char *b;
int lenmx;
int jis = 0;

/* NULL の時は帰る */
if(lpsz == NULL)
{
trans_sjis_buffer[0] = '\0';
return trans_sjis_buffer;
}

/* 審査 */
p = lpsz; /* 検査Pointer */

b = (unsigned char*)trans_sjis_buffer; /* Result */
lenmx = MAX_CODEBUF; /* あふれ対策 */


while(( *p != '\0' ) && (lenmx > 0) )
{
/* ESC Entry
* (っつーか 3文字目みんなてきとーに入れすぎ(;´Д`)
* IRC では開始終端ともにB にするのが一般的
*/
if( p[0] == ESC )
{
if( p[1] == '$' ) jis=1;
if( p[1] == '(' ) jis=0;

/* skip */
p++, lenmx--;
if(! p[0] ) continue;

/* skip */
p++, lenmx--;
if(! p[0] ) continue;

/* skip */
/*3文字目は無視 (B|J|H|Q) */
p++, lenmx--;
continue;
}

/* if jis */
if( !jis )
{
/* normal copy */
b[0] = p[0];

/* skip */
p++, lenmx--;
b++;
}else{
/* copy after trans */
b[0] = p[0];
b[1] = p[1];

/* ...trans */
t_jis2sjis::sub(&(b[0]),&(b[1]));

/* skip */
p++, lenmx--;
b++;
if(! p[0] ) continue;

/* skip */
p++, lenmx--;
b++;
}
}

if(b) *b = 0;

return trans_sjis_buffer;

}

投稿者 rizel : 2004年06月27日 13:48

Trackback Pings

このエントリーのトラックバックURL:
http://katakuri.sakura.ne.jp/~kata/mt-tb.cgi/1

コメント

コメントしてください




保存しますか?