回精華區
作者itoc.bbs@xeon.tfcis.org (核心動力) 看板: plan
標題Re: [問題] 濾掉ascii
時間動力核心 (Wed, 19 Nov 2003 09:36:42 +0800 (CST)) Updated: 2003/11/19
※ 引述《cpd.bbs@pitch.twbbs.org (Seasons)》之銘言:
> 像kkcity一樣,轉寄時可以選擇...
> 是否要保留 ANSI 彩色控制碼?(Yes/No)    
> 覺得好像滿不錯的,應該怎麼做好呢?

: struct.h

#define MQ_JUSTIFY      0x01    /* 身分認證信函 */
#define MQ_ATTACH       0x02    /* 有 attachment 的信函 */
+ #define MQ_NOANSI       0x04    /* strip 掉 ANSI 的信件 */

: xover.c:xo_forward()

  static char rcpt[64];
  char fpath[128], folder[80], *dir, *title, *userid;
  HDR *hdr, xhdr;
  int tag, locus, userno, cc, xmode;
  int method;           /* 轉寄到 0:站外 >0:自己 <0:其他站內使用者 */
+ int mq;

  ...
  ...

  else
  {
    if (not_addr(rcpt))
      return XO_FOOT;

    method = 0;
+   mq = (vans("是否保留 ANSI 彩色控制碼(Y/N)?[Y] ") == 'n') ? MQ_NOANSI : 0;
  }

  ...
  ...

      else                      /* 轉寄站外 */
      {
-       if ((cc = bsmtp(fpath, title, rcpt, 0)) < 0)
+       if ((cc = bsmtp(fpath, title, rcpt, mq)) < 0)
          break;
      }

: mail.c:bsmtp()

    if (fp = fopen(fpath, "r"))
    {
      char *ptr;
+     char tmp[512];

      str = buf;
      *str++ = '.';
-     while (fgets(str, sizeof(buf) - 3, fp))
+     while (fgets(tmp, sizeof(tmp), fp))
      {
+       if (method & MQ_NOANSI)
+       {
+         str_ansi(str, tmp, sizeof(buf) - 3);
+         strcat(str, "\r\n");
+       }
+       else
+       {
+         str_ncpy(str, tmp, sizeof(buf) - 3);
          if (ptr = strchr(str, '\n'))
          {
            *ptr++ = '\r';
            *ptr++ = '\n';
            *ptr = '\0';
          }
+       }
        fputs((*str == '.' ? buf : str), fw);
      }
      fclose(fp);
    }

--
  Origin:  Maple-itoc˙動力核心  processor.tfcis.org 
  Author: itoc itoc.dorm11.nctu.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻