- 主题:过滤彩色标题(转载)
【 以下文字转载自 cnAdmin 讨论区 】
【 原文由 flyriver@happynet.org 所发表 】
转信站: APUE!zixia.net!HAPPY
出 处: 166.111.160.6
receive_article.c 中加入一个函数 my_ansi_filter(),我把它从 FB2K 里面
抽出来的,稍微改了一下。
void my_ansi_filter(char *source)
{
char result[500];
int i, flag = 0, loc=0;
int len;
len = strlen(source);
for ( i = 0 ; i < len ; i++ )
{
if ( source[i] == '\x1B' ) {
flag = 1;
continue;
} else if ( flag == 1 && isalpha(source[i]) ) {
flag = 0;
continue;
} else if ( flag == 1 ) {
continue;
} else {
result[loc++]=source[i];
}
}
result[loc]='\0';
strncpy(source, result, loc+1);
}
然后修改 post_article() 函数,在
str_decode(conv_buf,SUBJECT);
之后,加入一句
my_ansi_filter(conv_buf);
保存 receive_article.c 文件。然后重新编译和安装。
这样改动之后只是过滤文章列表的彩色标题,文章内容里面的没有过滤掉,
但已经不影响阅读了。
--
FROM 166.111.168.8
【 以下文字转载自 cnAdmin 讨论区 】
【 原文由 flyriver@happynet.org 所发表 】
转信站: APUE!zixia.net!HAPPY
出 处: 166.111.160.6
【 在 flyriver (忧郁的飞流直下) 的大作中提到: 】
: receive_article.c 中加入一个函数 my_ansi_filter(),我把它从 FB2K 里面
: 抽出来的,稍微改了一下。
: void my_ansi_filter(char *source)
: {
: char result[500];
: int i, flag = 0, loc=0;
: int len;
: len = strlen(source);
这里再加一句话好一点
len = len >= sizeof(result) ? sizeof(result)-1 : len;
: for ( i = 0 ; i < len ; i++ )
: {
: .............
--
FROM 166.111.168.8
【 以下文字转载自 cnAdmin 讨论区 】
【 原文由 hightman.bbs@bbs.dot66.net 所发表 】
转信站: APUE!zixia.net!Shanty
万一source超过 500 呢? xixi
我也写过一个类似函数:在count.c中有
/* ------------------------------------------------ */
/* Strip the ansi Code */
/* ------------------------------------------------ */
void
strip_ansi(src)
char *src;
{
register int ch, ansi;
char *dst;
dst = src;
ansi = 0;
for (;;)
{
ch = *src++;
if (ch == '\0' || ch == '\r' || ch == '\n')
break;
if (ch == 27)
{
ansi = 1;
}
else if (ansi)
{
if (!strchr("[01234567;", ch))
ansi = 0;
}
else
{
*dst++ = ch;
}
}
*dst = '\0';
}
※ 引述《flyriver@happynet.org (忧郁的飞流直下)》之铭言:
> receive_article.c 中加入一个函数 my_ansi_filter(),我把它从 FB2K 里面
> 抽出来的,稍微改了一下。
> void my_ansi_filter(char *source)
> {
> char result[500];
> int i, flag = 0, loc=0;
> int len;
> len = strlen(source);
> for ( i = 0 ; i < len ; i++ )
> {
> if ( source[i] == '\x1B' ) {
> flag = 1;
> continue;
> } else if ( flag == 1 && isalpha(source[i]) ) {
> flag = 0;
> continue;
> } else if ( flag == 1 ) {
> continue;
> } else {
> result[loc++]=source[i];
> }
> }
> result[loc]='\0';
> strncpy(source, result, loc+1);
> }
> 然后修改 post_article() 函数,在
> str_decode(conv_buf,SUBJECT);
> 之后,加入一句
> my_ansi_filter(conv_buf);
> 保存 receive_article.c 文件。然后重新编译和安装。
> 这样改动之后只是过滤文章列表的彩色标题,文章内容里面的没有过滤掉,
> 但已经不影响阅读了。
--