作者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;
}
--
□ 本文章由 itoc 從 itoc.Dorm11.NCTU.edu.tw 發表