回精華區
作者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
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻