作者itoc, 信區: itoc
標題[功能] expire 寫進 .BRD [transbrd.c]
時間03/08/17
作者: Kudo (淡蛋~~) 看板: plan
標題: [功能] expire 寫進 .BRD [transbrd.c]
時間: Thu Apr 11 04:20:41 2002 Updated: 2005/05/19
/*-------------------------------------------------------*/
/* util/transbrd.c ( NTHU CS MapleBBS Ver 3.10 ) */
/*-------------------------------------------------------*/
/* target : M3 看板轉換程式 */
/* create : 02/03/10 */
/* update : / / */
/* author : Kudo.bbs@kudo.twbbs.org */
/*-------------------------------------------------------*/
/* syntax : transbrd */
/*-------------------------------------------------------*/
#if 0
使用方法:
0. For Maple 3.X To Maple 3.X
1. 使用前請先備份 .BRD
2. make transbrd.c
3. 執行 transbrd, 產生 BRD.NEW, 請自行 rename 為 .BRD
4. 轉換完後,將新加入的欄位,加入 struct.h 裡
5. 將全部 source make clean 後重新 make
#endif
#include "bbs.h"
#define DEF_MAXP 3000 /* 看板文章預設上限數量 */
#define DEF_MINP 500 /* 看板文章預設下限數量 */
#define DEF_MAXT 365 /* 看板文章預設保留天數 */
typedef struct
{
char bname[BNLEN + 1]; /* board ID */
int days; /* expired days */
int maxp; /* max post */
int minp; /* min post */
} Life;
struct NEW
{
char brdname[BNLEN + 1]; /* board name */
char title[BTLEN + 1];
char BM[BMLEN + 1]; /* BMs' uid, token '/' */
uschar bvote; /* 共有幾項投票舉行中 */
time_t bstamp; /* 建立看板的時間, unique */
usint readlevel; /* 閱讀文章的權限 */
usint postlevel; /* 發表文章的權限 */
usint battr; /* 看板屬性 */
time_t btime; /* .DIR 的 st_mtime */
int bpost; /* 共有幾篇 post */
time_t blast; /* 最後一篇 post 的時間 */
int maxpost; /* 文章上限 */
int minpost; /* 文章下限 */
int maxtime; /* 文章保留時間 */
};
typedef struct NEW NEW;
int
main()
{
NEW new;
BRD old;
int fdr, fdw;
int count = 0, number;
char *ptr, *bname, buf[256];
Life table[MAXBOARD];
FILE *fp;
setgid(BBSGID);
setuid(BBSUID);
chdir(BBSHOME);
/* --------------------------------------------------- */
/* load expire.ctl */
/* --------------------------------------------------- */
if (fp = fopen(FN_ETC_EXPIRE, "r"))
{
while (fgets(buf, sizeof(buf), fp) && buf[0])
{
if (buf[0] < '0')
continue;
bname = (char *) strtok(buf, " \t\r\n");
if (bname && *bname)
{
strcpy(table[count].bname, bname);
ptr = (char *) strtok(NULL, " \t\r\n");
if (ptr && (number = atoi(ptr)) > 0)
{
table[count].days = number;
ptr = (char *) strtok(NULL, " \t\r\n");
if (ptr && (number = atoi(ptr)) > 0)
{
table[count].maxp = number;
ptr = (char *) strtok(NULL, " \t\r\n");
if (ptr && (number = atoi(ptr)) > 0)
{
table[count].minp = number;
}
}
}
count++;
}
}
fclose(fp);
}
number = count; /* 借 number 來存讀出來的資料數目 */
/* --------------------------------------------------- */
/* create BRD.NEW */
/* --------------------------------------------------- */
if ((fdr = open(FN_BRD, O_RDONLY)) < 0)
exit(1);
fdw = open("BRD.NEW", O_WRONLY | O_CREAT, 0600);
while (read(fdr, &old, sizeof(BRD)) == sizeof(BRD))
{
strcpy(new.brdname, old.brdname);
for (count = 0;; count++)
{
if (count > number)
{
table[count].days = DEF_MAXT;
table[count].maxp = DEF_MAXP;
table[count].minp = DEF_MINP;
break;
}
if (strcmp(old.brdname, table[count].bname) != 0)
continue;
else
break;
}
strcpy(new.title, old.title);
strcpy(new.BM, old.BM);
new.bvote = old.bvote;
new.bstamp = old.bstamp;
new.readlevel = old.readlevel;
new.postlevel = old.postlevel;
new.battr = old.battr;
new.btime = old.btime;
new.bpost = old.bpost;
new.blast = old.blast;
new.maxpost = (table[count].maxp > 0) ? table[count].maxp : DEF_MAXP;
new.minpost = (table[count].minp > 0) ? table[count].minp : DEF_MINP;
new.maxtime = (table[count].days > 0) ? table[count].days : DEF_MAXT;
write(fdw, &new, sizeof(NEW));
}
close(fdr);
close(fdw);
}
--
Chih-Kuan Chien (Kudo)
kudo@ms21.url.com.tw
--
□ Origin: 淡蛋的小窩 bbs.kudo.idv.tw
□ From: www.kudo.idv.tw