回精華區
作者itoc (站上人數:802), 信區: plan
標題[功能] 將尚未存檔的水球存於信箱
時間2005/10/09 Sun 00:58:44 Updated: 2005/10/09
: src/util/Makefile

EXE =   ... saveBMWtoMbox

: src/util/saveBMWtoMbox.c 新增程式如下

/*-------------------------------------------------------*/
/* saveBMWtoMbox.c      ( NTHU CS MapleBBS Ver 3.10 )    */
/*-------------------------------------------------------*/
/* target : 將尚未存檔的水球存於信箱                     */
/* create : 05/10/08                                     */
/* update :   /  /                                       */
/* author : itoc.bbs@bbs.tnfsh.tn.edu.tw                 */
/*-------------------------------------------------------*/


#include "bbs.h"


/* 抄 bmw.c */
#define BMW_FORMAT  "\033[1;33;46m★%s \033[37;45m %s \033[m" /* 收到的水球 */
#define BMW_FORMAT2 "\033[1;33;41m☆%s \033[34;47m %s \033[m" /* 送出的水球 */


int
main()
{
  int fd;
  char c;
  char fbmw[64], buf[64], folder[64], *str;
  HDR hdr;
  ACCT acct;
  BMW bmw;
  FILE *fp;
  DIR *dirp;
  struct dirent *de;

  for (c = 'a'; c <= 'z'; c++)
  {
    sprintf(buf, BBSHOME "/usr/%c", c);
    chdir(buf);

    if (!(dirp = opendir(".")))
      continue;

    while (de = readdir(dirp))
    {
      str = de->d_name;
      if (*str <= ' ' || *str == '.')
        continue;

      /* 檢查有無未存檔的 FN_BMW */
      sprintf(fbmw, "%s/" FN_BMW, str);
      if (!dashf(fbmw))
        continue;

      /* 取得該 ID 的正確大小寫、userno */
      sprintf(buf, "%s/" FN_ACCT, str);
      if ((fd = open(buf, O_RDONLY)) >= 0)
      {
        read(fd, &acct, sizeof(ACCT));
        close(fd);
      }
      else
      {
        strcpy(acct.userid, str);
      }

      /* 將水球記錄變成信件 */
      if ((fd = open(fbmw, O_RDONLY)) >= 0)
      {
        sprintf(folder, "%s/" FN_DIR, str);
        if (fp = fdopen(hdr_stamp(folder, 0, &hdr, buf), "w"))
        {
          fprintf(fp, "              == 水球記錄 %s ==\n\n", Now());

          while (read(fd, &bmw, sizeof(BMW)) == sizeof(BMW))
          {
            fprintf(fp, bmw.sender == acct.userno ? BMW_FORMAT2 " %s\n" :
              BMW_FORMAT " %s\n",
              bmw.userid, bmw.msg, Btime(&bmw.btime));
          }
          fclose(fp);
        }
        close(fd);

        strcpy(hdr.owner, acct.userid);
        strcpy(hdr.title, "[備 忘 錄] 水球紀錄");
        hdr.xmode = MAIL_READ | MAIL_NOREPLY;
        rec_add(folder, &hdr, sizeof(HDR));
      }

      /* 存到信箱後就刪除 FN_BMW 及 FN_AMW */
      unlink(fbmw);
      sprintf(fbmw, "%s/" FN_AMW, str);
      unlink(fbmw);
    }

    closedir(dirp);
  }

  return 0;
}


--
□ 本文章由 itocitoc.Dorm11.NCTU.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻